bash_completion: add a magic script that do the bash_completion setup
authorJean Privat <jean@pryen.org>
Thu, 24 Jul 2014 15:32:59 +0000 (11:32 -0400)
committerJean Privat <jean@pryen.org>
Fri, 25 Jul 2014 15:37:02 +0000 (11:37 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

README
misc/bash_completion/nit [new file with mode: 0644]
src/toolcontext.nit

diff --git a/README b/README
index d1f2ae8..2b4e22e 100644 (file)
--- 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 (file)
index 0000000..6d464ec
--- /dev/null
@@ -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
index 4abb05c..d25d3fd 100644 (file)
@@ -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