nitc :: BashCompletion :: defaultinit
# This class generates a compatible `bash_completion` script file.
#
# On some Linux systems `bash_completion` allow the program to control command line behaviour.
#
# ~~~sh
# $ nitls [TAB][TAB]
# file1.nit file2.nit file3.nit
#
# $ nitls --[TAB][TAB]
# --bash-toolname --keep --path --tree
# --depends --log --package --verbose
# --disable-phase --log-dir --quiet --version
# --gen-bash-completion --no-color --recursive --warn
# --help --only-metamodel --source
# --ignore-visibility --only-parse --stop-on-first-error
# ~~~
#
# Generated file can be placed in system bash_completion directory `/etc/bash_completion.d/`
# or source it in `~/.bash_completion`.
class BashCompletion
super Template
var toolcontext: ToolContext
private fun extract_options_names: Array[String] do
var names = new Array[String]
for option in toolcontext.option_context.options do
for name in option.names do
if name.has_prefix("--") then names.add name
end
end
return names
end
redef fun rendering do
var name = toolcontext.toolname
var option_names = extract_options_names
addn "# generated bash completion file for {name} {toolcontext.version}"
addn "_{name}()"
addn "\{"
addn " local cur prev opts"
addn " COMPREPLY=()"
addn " cur=\"$\{COMP_WORDS[COMP_CWORD]\}\""
addn " prev=\"$\{COMP_WORDS[COMP_CWORD-1]\}\""
if not option_names.is_empty then
addn " opts=\"{option_names.join(" ")}\""
addn " if [[ $\{cur\} == -* ]] ; then"
addn " COMPREPLY=( $(compgen -W \"$\{opts\}\" -- $\{cur\}) )"
addn " return 0"
addn " fi"
end
addn "\} &&"
addn "complete -o default -F _{name} {name}"
end
end
src/toolcontext.nit:636,1--690,3