* PATCH: _chkconfig, _service
@ 2002-04-19 8:23 Borsenkow Andrej
2002-04-19 16:22 ` Oliver Kiddle
0 siblings, 1 reply; 3+ messages in thread
From: Borsenkow Andrej @ 2002-04-19 8:23 UTC (permalink / raw)
To: 'Zsh hackers list'
[-- Attachment #1: Type: text/plain, Size: 446 bytes --]
This adds support for chkconfig and service. I put them in RedHat
because they originate there, but I have only Mandrake so actual usage
may differ. Would anybody with RedHat check if it is correct for him and
modify if needed (but please preserve current usage for Mandrake; you
can test for Mandrake with /etc/mandrake-release).
It adds a couple of helpers and modifies _init_d to use them. If there
are no objections I commit them.
-andrej
[-- Attachment #2: zsh-initscripts.diff --]
[-- Type: application/octet-stream, Size: 5337 bytes --]
Index: Completion/Redhat/Command/_chkconfig
===================================================================
RCS file: Completion/Redhat/Command/_chkconfig
diff -N Completion/Redhat/Command/_chkconfig
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ Completion/Redhat/Command/_chkconfig 19 Apr 2002 08:18:11 -0000
@@ -0,0 +1,9 @@
+#compdef chkconfig
+
+_arguments \
+ "(: --add --del --level)--list[list available services]:available services:_init_scripts" \
+ "(: --add --list --level)--del[remove service]:available services:_init_scripts" \
+ "(: --del --list --level)--add[add service]:available services:_init_scripts" \
+ "(--add --del --list)--level[specify runlevel]:run level:(0 1 2 3 4 5 6 s)" \
+ ":service name:_init_scripts" \
+ ":state:(on off reset)"
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 19 Apr 2002 08:18:11 -0000
@@ -0,0 +1,15 @@
+#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
+
+_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:_init_scripts' \
+ '*::service argument:{_initscript_argument $words[CURRENT]}'
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 19 Apr 2002 08:18:11 -0000
@@ -1,23 +1,3 @@
#compdef -P */(init|rc[0-9S]#).d/*
-local magic cmds what
-
-# This should probably be system specific...
-
-# 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_-]} )
-
-# 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 )) || zstyle -a ":completion:${curcontext}:commands" commands cmds ||
- cmds=(start stop)
-
-_sub_commands $cmds
+_initscript_argument $words[CURRENT]
Index: Completion/Unix/Type/_init_scripts
===================================================================
RCS file: Completion/Unix/Type/_init_scripts
diff -N Completion/Unix/Type/_init_scripts
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ Completion/Unix/Type/_init_scripts 19 Apr 2002 08:18:11 -0000
@@ -0,0 +1,16 @@
+#autoload
+
+local expl
+local -a services
+
+# exclude backup files and RPM leftovers
+services=(/etc/init.d/*~(*~|*.orig|*.rpmnew|*.rpmsave|*.rpmorig)(N:t))
+
+# remove those that are known to not be real initscripts
+if [[ -f /etc/mandrake-release ]]; then
+ services=(${services:#(functions|mandrake_firstime|mandrake_everytime|mandrake_consmap)})
+elif [[ -f /etc/redhat-release ]]; then
+ services=(${services:#functions})
+fi
+
+_wanted initscripts expl 'init scripts' compadd "$@" -a services
Index: Completion/Unix/Type/_initscript_argument
===================================================================
RCS file: Completion/Unix/Type/_initscript_argument
diff -N Completion/Unix/Type/_initscript_argument
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ Completion/Unix/Type/_initscript_argument 19 Apr 2002 08:18:11 -0000
@@ -0,0 +1,33 @@
+#autoload
+
+local magic cmds what script
+
+(( $# == 1 )) || return 1
+
+# This should probably be system specific...
+
+if [[ -f $1 ]]; then
+ script=$1
+elif [ -f /etc/init.d/$1 ]]; then
+ script=/etc/init.d/$1
+fi
+
+(( $#script )) || return 1
+
+# 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)'
+
+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)"$(< $script)"}:#[[:blank:]]#(\'|)[a-z_|]##(\'|)\)}}//[^a-z_]} )
+
+(( $#cmds )) || zstyle -a ":completion:${curcontext}:commands" commands cmds ||
+ cmds=(start stop)
+
+_sub_commands $cmds
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: PATCH: _chkconfig, _service
2002-04-19 8:23 PATCH: _chkconfig, _service Borsenkow Andrej
@ 2002-04-19 16:22 ` Oliver Kiddle
2002-05-06 7:15 ` Borsenkow Andrej
0 siblings, 1 reply; 3+ messages in thread
From: Oliver Kiddle @ 2002-04-19 16:22 UTC (permalink / raw)
To: Borsenkow Andrej; +Cc: 'Zsh hackers list'
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.
Oliver
This e-mail and any attachment is for authorised use by the intended recipient(s) only. It may contain proprietary material, confidential information and/or be subject to legal privilege. It should not be copied, disclosed to, retained or used by, any other party. If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender. Thank you.
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: PATCH: _chkconfig, _service
2002-04-19 16:22 ` Oliver Kiddle
@ 2002-05-06 7:15 ` Borsenkow Andrej
0 siblings, 0 replies; 3+ messages in thread
From: Borsenkow Andrej @ 2002-05-06 7:15 UTC (permalink / raw)
To: 'Zsh hackers list'
[-- 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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2002-05-06 7:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-19 8:23 PATCH: _chkconfig, _service Borsenkow Andrej
2002-04-19 16:22 ` Oliver Kiddle
2002-05-06 7:15 ` Borsenkow Andrej
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).