about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Shahaf <d.s@daniel.shahaf.name>2015-05-23 10:11:26 +0000
committerDaniel Shahaf <d.s@daniel.shahaf.name>2015-06-02 10:09:01 +0000
commit83ac36c14f3457f49b77bba9b806d2577a6128f3 (patch)
tree06b0b2861aa6ebada29de31ffc547dfb314afbf0
parent9dc173efc3b4ae1e64d93dc5a60c17203035e66c (diff)
downloadzsh-83ac36c14f3457f49b77bba9b806d2577a6128f3.tar.gz
zsh-83ac36c14f3457f49b77bba9b806d2577a6128f3.tar.xz
zsh-83ac36c14f3457f49b77bba9b806d2577a6128f3.zip
35271: New completion: beep.
The new completion is mostly boilerplate except for the handling of
$words/$CURRENT to support specifying the arguments multiple times
separated by -n.
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Unix/Command/_beep50
2 files changed, 53 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 25fdb31ed..3ef78201e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2015-06-02  Daniel Shahaf  <d.s@daniel.shahaf.name>
 
+	* 35271: Completion/Unix/Command/_beep: New completion:
+	beep.
+
 	* unposted: Doc/Zsh/options.yo: Typo fix
 
 2015-06-02  Peter Stephenson  <p.stephenson@samsung.com>
diff --git a/Completion/Unix/Command/_beep b/Completion/Unix/Command/_beep
new file mode 100644
index 000000000..c49c09726
--- /dev/null
+++ b/Completion/Unix/Command/_beep
@@ -0,0 +1,50 @@
+#compdef _beep
+
+# beep  [--verbose | --debug] [-e device | --device device] [-f N] [-l N]
+#       [-r N] [-d N] [-D N] [-s] [-c]
+# beep [ OPTIONS ] [-n] [--new] [ OPTIONS ]
+# beep [-h] [--help]
+# beep [-v] [-V] [--version]
+
+# We support the -n/--new restart flag, when it is in its own word, by
+# stripping all words from the command line that are after the first -n
+# following words[CURRENT] or before the first -n preceding it.  As far as
+# _arguments knows, the -n flag does not exist, and argv should specify
+# a single beeping specification.
+
+## Strip $words[2] through the first -n preceding $words[CURRENT].
+integer specstart
+while specstart=$words[(i)(-n|--new)]
+      (( specstart < CURRENT ))
+do
+  words[2,specstart]=()
+  (( CURRENT -= specstart - 1))
+done
+unset specstart
+
+## Strip everything in $words after the first -n following $words[CURRENT].
+integer specend
+while specend=$words[(I)(-n|--new)]
+      (( specend > CURRENT ))
+do
+  words[specend,$#words]=()
+done
+unset specend
+
+local -a args
+args=(
+  "(--verbose --debug)"{--verbose,--debug}"[enable debug output]"
+  "(-e --device)"{-e+,--device=}"[specify device to use]:device (default /dev/tty0, /dev/vc/0)"
+  "-f+:frequency (Hz) as integer or float"
+  "-l+:duration (ms)"
+  "-r+:number of repetitions"
+  "(-D)-d+[delay between beeps]:delay (ms)"
+  "(-d)-D+[delay after each beep]:delay (ms)"
+  "(-n --new)"{-n,--new}"[start a new beeping specification]"
+  "-s[cat, and beep after each line]"
+  "-c[cat, and beep after each character]"
+  "(-)"{-h,--help}"[display usage info]"
+  "(-)"{-v,-V,--version}"[display version info]"
+)
+
+_arguments -s -S -w : $args