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)
~~~