zsh-workers
 help / color / mirror / code / Atom feed
From: Daniel Shahaf <d.s@daniel.shahaf.name>
To: zsh-workers@zsh.org
Subject: [PATCH] New completion: beep.  (And a note on _mkdir)
Date: Sat, 23 May 2015 10:11:26 +0000	[thread overview]
Message-ID: <20150523101126.GC1889@tarsus.local2> (raw)

The new completion is appended.  It's mostly boilerplate except for the
handling of $words/$CURRENT to support specifying the arguments multiple
times separated by -n.

On another matter, someone left a question in _mkdir about how to detect
precommands:

    20	_pick_variant -r variant gnu=gnu zsh='\(eval\)' $OSTYPE --help
    21	# It can still happen that there is a precommand command or builtin in the line.
    22	# In such cases, the variant has to be modified suitably, after further checking
    23	# the variant of the _command_ mkdir.
    24	
    25	# I currently don't know of any way to find out what precommands are present on
    26	# the line. The variant should be modified like this once a way is found out:
    27	
    28	# if [[ $variant == zsh ]]; then
    29	#   if [[ $precommand = *command* ]]; then
    30	#     _mkdir_command () { command mkdir "$@" }
    31	#     _pick_variant -c _mkdir_command -r variant gnu=gnu unix --help
    32	#   fi
    33	# elif [[ $precommand = *builtin* ]]; then
    34	#   variant=zsh
    35	# fi

The answer is, use the $precommands array, like _calendar does.  The
array is populated by _precommand and used by _main_complete.

---

diff --git a/Completion/Unix/Command/_beep b/Completion/Unix/Command/_beep
new file mode 100644
index 0000000..c49c097
--- /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


                 reply	other threads:[~2015-05-23 10:11 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20150523101126.GC1889@tarsus.local2 \
    --to=d.s@daniel.shahaf.name \
    --cc=zsh-workers@zsh.org \
    /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).