zsh-workers
 help / color / mirror / code / Atom feed
From: Borsenkow Andrej <Andrej.Borsenkow@mow.siemens.ru>
To: "'Zsh hackers list'" <zsh-workers@sunsite.dk>
Subject: RE: PATCH: _chkconfig, _service
Date: Mon, 6 May 2002 11:15:16 +0400	[thread overview]
Message-ID: <6134254DE87BD411908B00A0C99B044F02E89A36@mowd019a.mow.siemens.ru> (raw)
In-Reply-To: <20020419162253.GA25529@logica.com>

[-- Attachment #1: Type: text/plain, Size: 728 bytes --]

> On Fri, Apr 19, 2002 at 12:23:18PM +0400, Borsenkow Andrej wrote:
> > This adds support for chkconfig and service. I put them in RedHat
> > because they originate there, but I have only Mandrake so actual
usage
> 
> Have you noticed that an _chkconfig already exists? Not in the
> RedHat directory because it also handles IRIX.
> 

Oops. I mostly now do this stuff on Mandrake under stock 4.0.4. Really,
we need 4.0.5 if even for new completions.

Good, this adds _services helper that tries to use chkconfig --list if
available; it also accounts for xinetd support in chkconfig. It also
makes _init_d to work for plain service name and uses them where
appropriate.

O.K.?

I tried to preserve indentation style :-)

-andrej


[-- Attachment #2: zsh-initscripts.diff --]
[-- Type: application/octet-stream, Size: 5621 bytes --]

Index: Completion/Redhat/Command/.distfiles
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Redhat/Command/.distfiles,v
retrieving revision 1.1
diff -u -r1.1 .distfiles
--- Completion/Redhat/Command/.distfiles	2 Apr 2001 12:43:15 -0000	1.1
+++ Completion/Redhat/Command/.distfiles	6 May 2002 07:13:49 -0000
@@ -1,4 +1,5 @@
 DISTFILES_SRC='
 .distfiles
 _rpm
+_service
 '
Index: Completion/Redhat/Command/_service
===================================================================
RCS file: Completion/Redhat/Command/_service
diff -N Completion/Redhat/Command/_service
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Completion/Redhat/Command/_service	6 May 2002 07:13:49 -0000
@@ -0,0 +1,22 @@
+#compdef service
+
+# *:: for last argument looks more like a hack but it is
+# the simplest way known to me to reset $words and keep
+# _sub_command happy
+
+# we are interested in init service only
+local ctx="${curcontext/%[^:]#:[^:]#/argument-1:}"
+zstyle -T  ":completion:$ctx" tag-order && \
+  zstyle ":completion:$ctx" tag-order init -
+
+
+_arguments -s \
+  '(-d --debug)'{-d,--debug}'[turn debugging on]' \
+  '(- :)'{-h,--help}'[print usage]' \
+  '(- :)'{-v,--version}'[print version]' \
+  '(-)'{-f,--full-restart}'[restart service]' \
+  '(- :)'{-R,--full-restart-all}'[restart all services]' \
+  '(- :)'{-s,--status-all}'[print status of all services]' \
+  ':service name:_services' \
+  '*::service argument: _init_d'
+
Index: Completion/Unix/Command/_chkconfig
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_chkconfig,v
retrieving revision 1.1
diff -u -r1.1 _chkconfig
--- Completion/Unix/Command/_chkconfig	14 Jan 2002 14:17:51 -0000	1.1
+++ Completion/Unix/Command/_chkconfig	6 May 2002 07:13:49 -0000
@@ -9,13 +9,8 @@
     '(-)--level[specify runlevels to apply to]:-:_values -s "" "run levels" 1 2 3 4 5 6 7' \
     '(- 2)--add[add new service]' \
     '(- 2)--del[remove service from chkconfig management]' \
-    '1:service name:->services' \
+    '1:service name:_services' \
     '2:state:(on off reset)' && ret=0
-
-  if [[ -n "$state" ]]; then
-    _wanted services expl 'system service' \
-	compadd ${${${(f)"$($words[1] --list)"}%%[ :]*}##$'\t'*} && ret=0
-  fi
 ;;
 irix*)
   _arguments -C \
Index: Completion/Unix/Command/_init_d
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Command/_init_d,v
retrieving revision 1.2
diff -u -r1.2 _init_d
--- Completion/Unix/Command/_init_d	30 Jan 2002 03:38:30 -0000	1.2
+++ Completion/Unix/Command/_init_d	6 May 2002 07:13:49 -0000
@@ -1,21 +1,24 @@
 #compdef -P */(init|rc[0-9S]#).d/*
 
-local magic cmds what
+local magic cmds what script
 
 # This should probably be system specific...
 
+script=$words[1]
+[[ $script = */* ]] || script=/etc/init.d/$script
+
 # 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)|(force-|)re(start|load)|debug_(up|down)|dump(|_stats)|add|delete|clean|list)'
 
-[[ -f $words[1] ]] && read -u0k 2 magic < $words[1] && [[ $magic = '#!' ]] &&
-    cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $words[1])"}:#[[:blank:]]#\'#${~what}(\|${~what})#\'#\)*}}//[^a-z_-]} )
+read -u0k 2 magic < $script && [[ $magic = '#!' ]] &&
+    cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[: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=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[:blank:]]#(\'|)[a-z_|]##\'|)\)}}//[^a-z_]} )
 
 (( $#cmds )) || zstyle -a ":completion:${curcontext}:commands" commands cmds ||
     cmds=(start stop)
Index: Completion/Unix/Type/.distfiles
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/.distfiles,v
retrieving revision 1.8
diff -u -r1.8 .distfiles
--- Completion/Unix/Type/.distfiles	10 Apr 2002 05:24:29 -0000	1.8
+++ Completion/Unix/Type/.distfiles	6 May 2002 07:13:49 -0000
@@ -9,5 +9,5 @@
 _groups              _perl_basepods       _signals             _users_on
 _hosts               _perl_builtin_funcs  _tar_archive         _time_zone
 _file_systems        _net_interfaces      _terminals           _locales
-_java_class
+_java_class          _services
 '
Index: Completion/Unix/Type/_services
===================================================================
RCS file: Completion/Unix/Type/_services
diff -N Completion/Unix/Type/_services
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Completion/Unix/Type/_services	6 May 2002 07:13:49 -0000
@@ -0,0 +1,23 @@
+#autoload
+
+local -a inits xinetds alls
+local expl ret=1
+
+if chkconfig --list > /dev/null 2>&1; then
+  alls=( ${(f)"$(LANGUAGE=C LANG=C LC_ALL=C chkconfig --list)"} )
+  inits=( ${${${alls[1,(r)xinetd based*]}[1,-2]}/%[[:space:]]*/} )
+  xinetds=( ${${${${alls[(r)xinetd based*,-1]}[2,-1]}/#[[:space:]]#}/%:*} )
+else
+  inits=( /etc/init.d/*(:t) )
+fi
+
+_tags init xinetd
+
+while _tags; do
+  _requested init expl 'init services' \
+    compadd  -a inits && ret=0
+  _requested xinetd expl 'xinetd services' \
+    compadd  -a xinetds && ret=0
+done
+
+return $ret

      reply	other threads:[~2002-05-06  7:15 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-19  8:23 Borsenkow Andrej
2002-04-19 16:22 ` Oliver Kiddle
2002-05-06  7:15   ` Borsenkow Andrej [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6134254DE87BD411908B00A0C99B044F02E89A36@mowd019a.mow.siemens.ru \
    --to=andrej.borsenkow@mow.siemens.ru \
    --cc=zsh-workers@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).