From: Jean Privat Date: Thu, 24 Jul 2014 15:32:59 +0000 (-0400) Subject: bash_completion: add a magic script that do the bash_completion setup X-Git-Tag: v0.6.7~17^2 X-Git-Url: http://nitlanguage.org bash_completion: add a magic script that do the bash_completion setup Signed-off-by: Jean Privat --- diff --git a/README b/README index d1f2ae8..2b4e22e 100644 --- a/README +++ b/README @@ -56,11 +56,12 @@ How to start: $ bin/nitc examples/hello_world.nit $ ./hello_world +You can put the `bin/` directoty in your PATH + Using bash completion with Nit tools: - $ bin/nitc --bash-completion - $ ln -s /absolute/path/to/bin/nitc.bash ~/.bash_completion/nitc - $ . ~/.bash_completion/nitc + $ echo source /absolute/path/to/misc/bash_completion/nit >> ~/.bash_completion + $ source ~/.bash_completion More information: diff --git a/misc/bash_completion/nit b/misc/bash_completion/nit new file mode 100644 index 0000000..6d464ec --- /dev/null +++ b/misc/bash_completion/nit @@ -0,0 +1,45 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Bash completion for nit commands +# Put (or link) this file into `/etc/bash_completion.d/` +# or source it in `~/.bash_completion`. + +_nit_lazy() { + # Check if a valid command + which $1 > /dev/null || return 1 + + # Drop possible directories to get the command name + local cmd=`basename $1` + + # Generate the bash-completion + # and setup a new `complete` for the command + eval "$($1 --bash-completion)" + + # Special case for `nitc` that uses the completion of `nitg` + if test "$cmd" = "nitc"; then + cmd=nitg + complete -F _nitg -o default nitc + fi + + if [[ $(type -t _$cmd) == function ]]; then + # All if fine, finish the job by invoking the function _$cmd + _$cmd + return $? + else + # Problem, no function _$cmd + return 1 + fi +} && +complete -F _nit_lazy -o default nit nitc nitdoc nitg nitlight nitls nitmetrics nitunit nitx diff --git a/src/toolcontext.nit b/src/toolcontext.nit index 4abb05c..d25d3fd 100644 --- a/src/toolcontext.nit +++ b/src/toolcontext.nit @@ -339,8 +339,8 @@ end # --help --only-metamodel --source # --ignore-visibility --only-parse --stop-on-first-error # -# Generated file must be placed in system bash_completion directory `/etc/bash_completion.d/` -# or in the user directory `~/.bash_completion`. +# Generated file can be placed in system bash_completion directory `/etc/bash_completion.d/` +# or source it in `~/.bash_completion`. class BashCompletion super Template