Skip to content

Instantly share code, notes, and snippets.

@jasonm23
Forked from hamann/gist:39371c46806e14ab3853
Last active September 10, 2020 20:00
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save jasonm23/3b20b4953363a555516aa5e59088ea49 to your computer and use it in GitHub Desktop.
Save jasonm23/3b20b4953363a555516aa5e59088ea49 to your computer and use it in GitHub Desktop.
Elixir mix oh-my-zsh completion plugin

Elixir Mix Oh-My-Zsh plugin

Copy the folder ./elixir_mix/ to ~/.oh-my-zsh/custom/plugins/ and add _elixir_mix to your .zshrc plugins list. e.g.

Example:

plugins=(
  autojump
  git
  elixir_mix
)

#compdef mix
#autoload
# Elixir mix zsh completion
mix_help=$(mix --help \
| tr -s ' ' \
| sed -e 's/ # /:/' \
-e 's/^mix //' \
-e 's/^mix:.*//' \
-e 's/^iex.*//' )
declare -a all_tasks
all_tasks=($(echo $mix_help | sed 's/:.*//'))
local -a _1st_arguments
IFS=$'\n' _1st_arguments=($(mix_help))
_1st_arguments+=(
'--help:Describe available tasks'
'--version:Prints the Elixir version information'
)
__task_list ()
{
local expl
_wanted tasks expl 'help' compadd $all_tasks
}
local expl
local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \
':command:->command' \
'*::options:->options'
case $state in
(command)
_describe -t commands "mix subcommand" _1st_arguments
return
;;
(options)
case $line[1] in
(help)
_arguments ':feature:__task_list'
;;
(test)
_files
;;
esac
;;
esac
@jasonm23
Copy link
Author

Added as a pull request on oh-my-zsh (replaces the hardcoded completion task list in the current mix oh-my-zsh plugin.)

@vayn
Copy link

vayn commented May 13, 2017

IFS=$'\n' _1st_arguments=($(mix_help)) should be
IFS=$'\n' _1st_arguments=($(echo $mix_help))

@eagle-te
Copy link

@jasonm23
Would it be possible that you create a pull request for https://github.com/zsh-users/zsh-completions too?

tyvm

@jasonm23
Copy link
Author

@eagle-te feel free to use it, I haven't touched Elixir or Mix in 2 years so I think I'm not the right person to do this right now.

If you'd feel better if I attached and explicit Apache or MIT licence on this Gist I'm happy to do it.

@eagle-te
Copy link

@jasonm23

Thanks,
no need to attach an extra licence.
I'll create a PR and credit you anyhow.

@jasonm23
Copy link
Author

Cheers

@justgage
Copy link

This wasn't working for me so I fixed it in this gist: https://gist.github.com/justgage/1641a2d04a2e59169bac7902886d44c4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment