zsh-workers
 help / color / mirror / code / Atom feed
03af2dc9ba59e22f0dd3e79aa00acc867baf5bda blob 3132 bytes (raw)

  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
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
 
#compdef -p */(init|rc[0-9S]#).d/*

local cmds script
local -a flags

_compskip=all

if [[ $OSTYPE = freebsd* ]]; then
  (( $+functions[_init_d_fullpath] )) ||
  _init_d_fullpath() {
    local -a scriptpath
    local name=$1 dir
    # Known locations of init scripts
    # C.f. Unix/Type/_services
    scriptpath=(/etc/rc.d $(/bin/sh -c '. /etc/rc.subr; load_rc_config XXX; echo $local_startup' 2>/dev/null))

    for dir in $scriptpath; do
      if [[ -f $dir/$name ]]; then
        echo $dir/$name
        return 0
      fi
    done
    return 1
  }

  (( $+functions[_init_d_get_cmds] )) ||
  _init_d_get_cmds() {
    local magic cmds cmd_prefix

    [[ -x $script ]] || return 1
    [[ $(read -u0 -k2 magic < $script && echo $magic) = '#!' ]] || return 0
    [[ -f /etc/rc.subr ]] && [[ -x /sbin/rcorder ]] || return 0
    grep -q '^ *\.  */etc/rc\.subr *$' $script || return 0
    cmds=(
      start stop restart rcvar status poll
      $(/bin/sh -c "set -- rcvar; . $script >/dev/null; echo \$extra_commands" 2>/dev/null)
    )

    for cmd_prefix in {,one,fast,force,quiet}; do
      echo ${cmds/#/$cmd_prefix}
    done

    return 0
  }
elif [[ $OSTYPE = openbsd* ]]; then
  (( $+functions[_init_d_fullpath] )) ||
  _init_d_fullpath() {
    echo /etc/rc.d/$1
    return 0
  }

  (( $+functions[_init_d_get_cmds] )) ||
  _init_d_get_cmds() {
    local -a cmds disabled

    cmds=(start stop reload restart check)
    disabled=(${${${(M)${(f)"$(< $script)"}:#rc_(${(~j:|:)cmds})=NO}#rc_}%=NO})
    echo ${cmds:|disabled}
  }

  flags=('-d[print debug information]' '-f[forcibly start the daemon]')
else
  (( $+functions[_init_d_fullpath] )) ||
  _init_d_fullpath() {
    local -a scriptpath
    local name=$1 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/$name ]]; then
        echo $dir/$name
        return 0
      fi
    done
    return 1
  }

  (( $+functions[_init_d_get_cmds] )) ||
  _init_d_get_cmds() {
    local what magic cmds

    # 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)'

    [[ -x $script ]] || return 1
    read -u0 -k2 magic < $script && [[ $magic = '#!' ]] &&
    cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[:blank:]]#(\'|)${~what}([[:blank:]]#\|[[:blank:]]#${~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_]} )

    echo $cmds
    return 0
  }
fi

script=$words[1]
[[ $script = */* ]] || script="$(_init_d_fullpath "$script")"

cmds=( $(_init_d_get_cmds) ) || return 1

(( $#cmds )) || zstyle -a ":completion:${curcontext}:commands" commands cmds ||
    cmds=(start stop)

_arguments -s -A "-*" $flags ':init.d command:_sub_commands $cmds'
debug log:

solving 03af2dc9b ...
found 03af2dc9b in https://git.vuxu.org/mirror/zsh/

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).