summaryrefslogtreecommitdiffstats
path: root/completions/_modules
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--completions/_modules85
1 files changed, 85 insertions, 0 deletions
diff --git a/completions/_modules b/completions/_modules
new file mode 100644
index 0000000..4f7c4d4
--- /dev/null
+++ b/completions/_modules
@@ -0,0 +1,85 @@
+# module completion by Ted Stern <stern@cray.com> -*- shell-script -*-
+#
+# Use of this file is deprecated, upstream completion is available in
+# modules >= 3.2.7, use that instead.
+#
+# Completion for Environment Modules `module' alias.
+#
+# See https://sourceforge.net/projects/modules/
+# https://modules.sourceforge.net/
+#
+# There are several versions of modules that are commonly used. Older
+# Cray UNICOS systems and many other sites use 2.2.2b. The latest GPL'd
+# version is 3.1.6. But the module alias is somewhat self-documenting
+# via the `module help' command, so use that to print the options.
+#
+# Programmable completion might be more difficult under tcsh since the
+# module command is an alias, and the `module avail' command returns
+# its output as stderr.
+
+# Test for existence of /etc/profile.d/modules.sh too because we may end up
+# being sourced before it and thus before the `module' alias has been defined.
+[ -f /etc/profile.d/modules.sh ] || return 1
+
+_module_list()
+{
+ local modules="$(command sed 's/:/ /g' <<<$LOADEDMODULES | sort)"
+ compgen -W "$modules" -- $1
+}
+
+_module_path()
+{
+ local modules="$(command sed 's/:/ /g' <<<$MODULEPATH | sort)"
+ compgen -W "$modules" -- $1
+}
+
+_module_avail()
+{
+ local modules="$(
+ module avail 2>&1 |
+ command grep -E -v '^(-|$)' |
+ xargs printf '%s\n' | command sed -e 's/(default)//g' | sort
+ )"
+
+ compgen -W "$modules" -- $1
+}
+
+# A completion function for the module alias
+_module()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ if ((cword == 1)); then
+ # First parameter on line -- we expect it to be a mode selection
+
+ local options
+ options="$(module help 2>&1 | command grep -E '^[[:space:]]*\+' |
+ awk '{print $2}' | command sed -e 's/|/ /g' | sort)"
+
+ COMPREPLY=($(compgen -W "$options" -- "$cur"))
+
+ elif ((cword == 2)); then
+ case $prev in
+ add | display | help | load | show | whatis)
+ COMPREPLY=($(_module_avail "$cur"))
+ ;;
+ rm | switch | swap | unload | update)
+ COMPREPLY=($(_module_list "$cur"))
+ ;;
+ unuse)
+ COMPREPLY=($(_module_path "$cur"))
+ ;;
+ esac
+ elif ((cword == 3)); then
+ case ${words[1]} in
+ swap | switch)
+ COMPREPLY=($(_module_avail "$cur"))
+ ;;
+ esac
+ fi
+
+} &&
+ complete -F _module -o default module
+
+# ex: filetype=sh