blob: 005ab066ce0da8906935c3308a94c0a335c448bd (
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
91
92
93
94
|
diff -aur modules-4.0.0/init/zsh-functions/_module modules-4.0.0-patched/init/zsh-functions/_module
--- modules-4.0.0/init/zsh-functions/_module 2017-10-16 06:49:58.000000000 +0200
+++ modules-4.0.0-patched/init/zsh-functions/_module 2017-11-01 17:58:13.771039301 +0100
@@ -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,18 +42,15 @@
/:ERROR:/d;'
}
-_module_not_yet_loaded() {
- _module_avail | sort | sed -r "\%^(${LOADEDMODULES//:/|})$%d"
-}
-
-
_module_avail_mods() {
- local -a avail_mods;
- avail_mods=(${$(_module_avail)})
+ _module_completion dir
+}
- _describe -t avail-mods 'available modulefiles' avail_mods && ret=0
+_module_all_mods() {
+ _module_completion
}
+
_module_saved_colls() {
local -a saved_colls;
saved_colls=(${$(_module_savelist)})
@@ -44,10 +59,8 @@
}
_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() {
@@ -169,7 +182,7 @@
'*:modulepath:_files -/' && ret=0
;;
(display|help|show|test|whatis)
- _alternative 'avail-mods:modulefiles:{_module_avail_mods}' \
+ _alternative 'avail-mods:modulefiles:{_module_all_mods}' \
&& ret=0
;;
esac
|