about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-03-08 10:17:03 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-03-08 10:17:03 +0000
commitc93f38253f230062513b3e8fbe1a39125a220e8c (patch)
treec99fd10f6b687462799efc14cf194b028d13f3df /Completion
parentc97203ac114ad34b9e922aa7a9abbb831d61bf23 (diff)
downloadzsh-c93f38253f230062513b3e8fbe1a39125a220e8c.tar.gz
zsh-c93f38253f230062513b3e8fbe1a39125a220e8c.tar.xz
zsh-c93f38253f230062513b3e8fbe1a39125a220e8c.zip
try to find out the sub commands to complete in _init_d (13591)
Diffstat (limited to 'Completion')
-rwxr-xr-xCompletion/User/_init_d19
1 files changed, 18 insertions, 1 deletions
diff --git a/Completion/User/_init_d b/Completion/User/_init_d
index 134b91cc5..239388591 100755
--- a/Completion/User/_init_d
+++ b/Completion/User/_init_d
@@ -1,5 +1,22 @@
 #compdef -P */(init|rc[0-9]#).d/*
 
+local magic cmds what
+
 # This should probably be system specific...
 
-_sub_commands start stop
+# If the file starts with `#!' we hope that this is a shell script
+# and get lines looking like <space>foo|bar) with the words in $what.
+
+what='(st(art|op|atus)|re(start|load)|debug_(up|down)|dump(|_stats)|add|delete|clean|list)'
+
+read -u0k 2 magic < $words[1] && [[ $magic = '#!' ]] &&
+    cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $words[1])"}:#[[:blank:]]#(\'|)${~what}(|${~what})#(\'|)\)}}//[^a-z_]} )
+
+# This would be the pattern to use every line of the form <space>foo).
+# Some people say this might match too many lines...
+#
+#    cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $words[1])"}:#[[:blank:]]#(\'|)[a-z_|]##(\'|)\)}}//[^a-z_]} )
+
+(( $#cmds )) || cmds=(start stop)
+
+_sub_commands $cmds