Skip to content

Latest commit

 

History

History
70 lines (50 loc) · 1.96 KB

shell_autocompletion.md

File metadata and controls

70 lines (50 loc) · 1.96 KB

Shell auto-completion

The following adds support for the tab completion of standard Stack arguments to the following shell programs: Bash, Zsh (the Z shell) and fish. Completion of file names and executables within Stack is still lacking. For further information, see issue #823.

!!! info

Stack's completion library provides
[hidden options](https://github.com/pcapriotti/optparse-applicative#bash-zsh-and-fish-completions)
for Bash, Zsh, and fish which output commands used for shell
auto-completion. For example:

~~~bash
$ stack --bash-completion-script stack
_stack()
{
    local CMDLINE
    local IFS=$'\n'
    CMDLINE=(--bash-completion-index $COMP_CWORD)

    for arg in ${COMP_WORDS[@]}; do
        CMDLINE=(${CMDLINE[@]} --bash-completion-word $arg)
    done

    COMPREPLY=( $(stack "${CMDLINE[@]}") )
}

complete -o filenames -F _stack stack
~~~

=== "Bash"

Add the output of the following command to your preferred completions file
(e.g. `~/.config/bash_completions.d/stack`).

~~~bash
stack --bash-completion-script $(which stack)
~~~

You may need to `source` this.

=== "Zsh"

Add the output of the following command to your preferred completions file
(e.g. `~/.config/zsh/completions/_stack`).

~~~zsh
stack --zsh-completion-script $(which stack)
~~~

You won't need to `source` this, but do update your `fpath`:

~~~zsh
fpath=($HOME/.config/zsh/completions $fpath)
autoload -U compinit && compinit
~~~

=== "fish"

Add the output of the following command to your preferred completions file
(e.g. `~/.config/fish/completions/stack.fish`).

~~~fish
stack --fish-completion-script $(which stack)
~~~