blob: eaaad5c807c1b0bcb81b05b1eec556f038d55cb3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
--- a/init/zsh-functions/_module
+++ a/init/zsh-functions/_module
@@ -4,17 +4,35 @@
# Zsh command-line completion for module
# Copyright (C) 2017 Xavier Delaruelle <xavier.delaruelle@cea.fr>
#
+# patched version:
+# - directory-wise completion
+#
-_module_avail() {
- module avail -t 2>&1 | sed '
- /^-\+/d; /^\s*$/d;
- /->.*$/d;
- /:$/d;
- /:ERROR:/d;
- s#^\(.*\)/\(.\+\)(.*default.*)#\1\n\1\/\2#;
- s#(.*)$##g;
- s#\s*$##g;
- s#/*$##g;'
+function _module_completion () {
+ emulate -L zsh
+ local _module_path_prefix
+ local -a _module_search_path _module_type_d _module_type_f
+ _module_path_prefix=$(echo ${(q)words[$CURRENT]} | sed -ne 's#\(.*/\).*#\1#p')
+ _module_search_paths=(${^${(@s/:/)MODULEPATH}}/$_module_path_prefix)
+
+ _module_type_d=()
+ _module_type_f=()
+ eval $(find $_module_search_paths -mindepth 1 -maxdepth 1 -not -name '.modulerc' -not -name '.version' -printf "_module_type_%Y+=${(q)_module_path_prefix}%P\n" 2> /dev/null)
+
+ case "$@" in
+ dir)
+ compadd ${_module_type_d}
+ ;;
+ notloaded)
+ local -a _modules_loaded=(${=LOADEDMODULES//:/})
+ compadd -q -S / ${_module_type_d}
+ compadd ${_module_type_f:|_modules_loaded}
+ ;;
+ *)
+ compadd -q -S / ${_module_type_d}
+ compadd ${_module_type_f}
+ ;;
+ esac
}
_module_savelist() {
@@ -24,16 +42,13 @@ _module_savelist() {
/:ERROR:/d;'
}
-_module_not_yet_loaded() {
- _module_avail | sort | sed -E "\%^(${LOADEDMODULES//:/|})$%d"
-}
+_module_all_mods() {
+ _module_completion
+ }
_module_avail_mods() {
- local -a avail_mods;
- avail_mods=(${$(_module_avail)})
-
- _describe -t avail-mods 'available modulefiles' avail_mods && ret=0
+ _module_completion dir
}
_module_saved_colls() {
@@ -44,10 +59,8 @@ _module_saved_colls() {
}
_module_notloaded_mods() {
- local -a not_yet_loaded_mods;
- not_yet_loaded_mods=(${$(_module_not_yet_loaded)})
+ _module_completion notloaded
- _describe -t avail-mods 'available modulefiles' not_yet_loaded_mods && ret=0
}
_module_loaded_mods() {
@@ -177,7 +190,7 @@ _module() {
'*:modulepath:_files -/' && ret=0
;;
(display|help|show|test|whatis|is-loaded|is-avail|info-loaded)
- _alternative 'avail-mods:modulefiles:{_module_avail_mods}' \
+ _alternative 'avail-mods:modulefiles:{_module_all_mods}' \
&& ret=0
;;
(append-path|prepend-path)
|