Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Completion function patches



On Sun, 04 Oct 2009 08:04:14 -0500
Edgar Merino <donvodka@xxxxxxxxx> wrote:
> Hello, I recently had to work with two utility functions for the 
> completion system: _services and _init_d. I'm running archlinux and here 
> services are under the /etc/rc.d directory, instead of the default 
> directory that appears in those 2 scripts (/etc/init.d). Attached I 
> provide you with pataches for both scripts, so that they work fine when 
> running a system with an init framework similar to mine. Please let me 
> know if I should do something else to contribute this code.

Thanks, I'll commit the following.

Index: Completion/Unix/Command/_init_d
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_init_d,v
retrieving revision 1.8
diff -u -r1.8 _init_d
--- Completion/Unix/Command/_init_d	8 Oct 2007 08:40:14 -0000	1.8
+++ Completion/Unix/Command/_init_d	4 Oct 2009 18:10:02 -0000
@@ -7,7 +7,20 @@
 # This should probably be system specific...
 
 script=$words[1]
-[[ $script = */* ]] || script=/etc/init.d/$script
+if [[ $script != */* ]]; then
+  local -a scriptpath
+  local dir
+  # Known locations of init scripts
+  # C.f. Unix/Type/_services
+  scriptpath=(/etc/init.d /etc/rc.d /etc/rc.d/init.d)
+
+  for dir in $scriptpath; do
+    if [[ -f $dir/$script ]]; then
+      script=$dir/$script
+      break
+    fi
+  done
+fi
 
 # 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.
Index: Completion/Unix/Type/_services
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_services,v
retrieving revision 1.4
diff -u -r1.4 _services
--- Completion/Unix/Type/_services	8 Jun 2005 12:45:36 -0000	1.4
+++ Completion/Unix/Type/_services	4 Oct 2009 18:10:02 -0000
@@ -12,7 +12,19 @@
     'init:init service:compadd -a inits' \
     'xinetd:xinetd service:compadd -a xinetds' && ret=0
 else
-  _wanted services expl service compadd "$@" - /etc/init.d/*(-*:t) && ret=0
+  local -a scriptpath
+  local dir
+  # Known locations of init scripts
+  # C.f. Unix/Commands/_init_d
+  scriptpath=(/etc/init.d /etc/rc.d /etc/rc.d/init.d)
+
+  for dir in $scriptpath; do
+    if [[ -d $dir ]]; then
+      break
+    fi
+  done
+  _wanted services expl service compadd "$@" - $dir/*(-*:t) &&
+  ret=0
 fi
 
 return ret

-- 
Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/



Messages sorted by: Reverse Date, Date, Thread, Author