summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordana <dana@dana.is>2018-12-17 14:45:14 -0600
committerdana <dana@dana.is>2018-12-17 14:45:14 -0600
commitf8864ac0c8bf2bbe9af9ed70973d7f9fd37d38b2 (patch)
treeed2e7f3e7ac313fc2bb0bb2bce70b7eaf9158692
parent552ebe6082407b2cd3b9c9434394bad46fc59154 (diff)
downloadzsh-f8864ac0c8bf2bbe9af9ed70973d7f9fd37d38b2.tar.gz
zsh-f8864ac0c8bf2bbe9af9ed70973d7f9fd37d38b2.zip
43895: _watch: Complete for procps/-ng watch
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_watch43
2 files changed, 43 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 3c0aabc40..73168f290 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-12-17 dana <dana@dana.is>
+
+ * 43895: Completion/Unix/Command/_watch: Complete for
+ procps/-ng watch
+
2018-12-17 Joey Pabalinas <joeypabalinas@gmail.com>
* 43904 (plus tweak): Doc/Zsh/grammar.yo: zshmisc(1): document
diff --git a/Completion/Unix/Command/_watch b/Completion/Unix/Command/_watch
index a8d29403f..fff3d56f6 100644
--- a/Completion/Unix/Command/_watch
+++ b/Completion/Unix/Command/_watch
@@ -1,9 +1,42 @@
#compdef watch
-# watch(1) has completely different semantics on freebsd compared to linux, hence:
-case $OSTYPE in
- (freebsd*|dragonfly*) _watch-snoop "$@";;
- (*) _default;;
+local variant ret=1
+local -a context line state state_descr
+local -A opt_args
+
+_pick_variant -r variant procps=procps $OSTYPE --version
+
+case $variant in
+ (procps)
+ _arguments -s -S -A '-*' : \
+ '(: * -)'{-h,--help}'[display help information]' \
+ '(: * -)'{-v,--version}'[display version information]' \
+ '(-b --beep)'{-b,--beep}'[beep on non-zero command exit]' \
+ '(-c --color)'{-c,--color}'[interpret ANSI color/style sequences]' \
+ '(-d --differences)'{-d-,--differences=-}'[highlight changes between updates]::how to highlight:(permanent)' \
+ '(-e --errexit)'{-e,--errexit}'[freeze updates on non-zero command exit]' \
+ '(-g --chgexit)'{-g,--chgexit}'[exit on command output change]' \
+ '(-n --interval)'{-n+,--interval=}'[specify update interval]:update interval (seconds) [2]' \
+ '(-p --precise)'{-p,--precise}'[run command at precise intervals]' \
+ '(-t --no-title)'{-t,--no-title}'[disable header]' \
+ '(-x --exec)'{-x,--exec}'[pass command to exec(2) instead of `sh -c`]' \
+ '(-)*::: :->cmd' \
+ && ret=0
+
+ [[ $state == cmd ]] &&
+ if
+ (( CURRENT == 1 )) &&
+ [[ $words[1] == (\"|\'|\$\')* ]] &&
+ [[ -z $opt_args[(i)(-x|--exec)] ]]
+ then
+ _cmdstring && ret=0
+ else
+ _normal && ret=0
+ fi
+ ;;
+ # watch(1) has completely different semantics on freebsd compared to linux, hence:
+ (freebsd*|dragonfly*) _watch-snoop "$@" && ret=0 ;;
+ (*) _default && ret=0 ;;
esac
-# NOTREACHED
+return ret