From: Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
To: zsh-workers@sunsite.auc.dk (Zsh hackers list)
Subject: PATCH: completion for zstyle
Date: Thu, 23 Dec 1999 21:54:38 +0000 [thread overview]
Message-ID: <E121GAe-0007LP-00.1999-12-23-21-53-17@mail6.svr.pol.co.uk> (raw)
Here's some completion support for zstyle. In the first argument it will
complete only :completion: or :zftp:; for the second all the standard styles;
for the third, it knows about most completable values for the various
styles (and knows whether they are specific to :completion:* or :zftp:*).
Goodness knows if I've used contexts and tags in a consistent fashion
within _zstyle itself.
It's possible that styles and tags will need moving out to _styles and,
say, _complete_tags, but it's not yet necessary.
It also adds some .distfiles stuff I missed before.
Index: Completion/Builtins/.distfiles
===================================================================
RCS file: /home/pws/CVSROOT/projects/zsh/Completion/Builtins/.distfiles,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 .distfiles
--- Completion/Builtins/.distfiles 1999/11/28 17:42:27 1.1.1.1
+++ Completion/Builtins/.distfiles 1999/12/23 17:32:43
@@ -4,5 +4,5 @@
_compdef _disable _echotc _enable _fc _fg_jobs _functions _hash _kill
_limits _nothing _pids _popd _sched _set _setopt _source _stat _trap
_unhash _unsetopt _vars _vars_eq _wait _which _zftp _zle _zmodload
- _signals
+ _signals _zstyle
'
Index: Completion/Builtins/_zstyle
===================================================================
RCS file: _zstyle
diff -N _zstyle
--- /dev/null Tue May 5 21:32:27 1998
+++ _zstyle Thu Dec 23 17:28:31 1999
@@ -0,0 +1,177 @@
+#compdef zstyle
+
+local curcontext="$curcontext" state ostate line expl ctop
+local nm=$compstat[nmatches]
+
+typeset -A styles
+# Assoc array of styles; the values give the possible top-level
+# contexts (currently c for completion, z for zftp or cz for both),
+# followed by a colon, followed by a state to enter, empty if none.
+styles=(
+ accept-exact c:bool
+ arguments c:
+ auto-description c:
+ cache-path 'c:_path_files -/'
+ completer c:completer
+ completions c:
+ condition c:
+ cursor c:bool
+ disable-stat c:bool
+ expand c:
+ format c:
+ glob c:
+ group-name c:
+ group-order c:tag
+ groups c:_groups
+ hidden c:bool
+ hosts c:_hosts
+ hosts-ports c:host-port
+ hosts-ports-users c:host-port-user
+ ignored-suffixes c:
+ insert-unambiguous c:bool
+ last-prompt c:bool
+ list c:listwhen
+ list-arguments c:
+ list-colors c:
+ list-packed c:bool
+ list-rows-first c:bool
+ local c:
+ max-errors c:
+ menu c:boolauto
+ numbers c:bool
+ original c:bool
+ path 'c:_path_files -/'
+ ports c:_ports
+ prefix-hidden c:bool
+ prefix-needed c:bool
+ prompt c:
+ remove-all-dups c:bool
+ sort c:bool
+ tag-order c:tag
+ special-dirs c:sdirs
+ stop c:stop
+ substitute c:
+ users c:_users
+ users-hosts c:user-host
+ verbose c:bool
+ word c:bool
+
+ chpwd z:bool
+ progress z:progress
+ remote_glob z:bool
+ titlebar z:bool
+ update z:
+)
+
+local taglist
+taglist=(accounts all-files all-expansions arguments arrays
+association-keys bookmarks builtins characters colors commands corrections
+cursors cvs default descriptions devices directories directory-stack
+displays expansions extensions files fonts functions globbed-files groups
+history-words hosts indexes jobs keymaps keysyms local-directories
+libraries limits manuals maps messages modifiers modules my-accounts
+named-directories names nicknames options original other-accounts packages
+parameters path-directories paths pods ports prefixes processes ps regex
+sequences sessions signals strings tags targets types urls users values
+warnings widgets windows zsh-options)
+
+_arguments ':context:->contexts' ':style:->styles' '*:argument:->style-arg'
+
+while [[ -n $state ]]; do
+ ostate=$state
+ state=
+
+ case "$ostate" in
+ contexts)
+ if [[ $PREFIX != :*: ]]; then
+ _wanted contexts expl context &&
+ compadd -P : -S : "$expl[@]" completion zftp
+ fi
+ ;;
+
+ styles)
+ # Get the top-level context we're completing for, if any.
+ if [[ $words[2] = :(completion|zftp):* ]]; then
+ ctop=${words[2][2]}
+ else
+ ctop=cz
+ fi
+ _wanted styles expl style &&
+ compadd "$expl[@]" - ${(k)styles[(R)[^:]#[$ctop][^:]#:*]}
+ ;;
+
+ style-arg)
+ state="${styles[$words[3]]#*:}"
+ ;;
+
+ bool)
+ _wanted values expl boolean &&
+ compadd "$expl[@]" true false
+ ;;
+
+ boolauto)
+ _wanted values expl boolean &&
+ compadd "$expl[@]" true false auto select
+ ;;
+
+ completer)
+ _wanted values expl completer &&
+ compadd "$expl[@]" _complete _approximate _correct _match \
+ _expand _list _menu _oldlist
+ ;;
+
+ host-port*)
+ if [[ $PREFIX != *:* ]]; then
+ _hosts -S :
+ elif [[ $ostate != *user || $PREFIX != *:*:* ]]; then
+ compset -P 1 '*:'
+ _ports
+ else
+ compset -P 2 '*:'
+ _users
+ fi
+ ;;
+
+ listwhen)
+ _wanted values expl 'when to list completions' &&
+ compadd "$expl[@]" always never sometimes
+ ;;
+
+ progress)
+ _wanted values expl 'progress meter style' &&
+ compadd "$expl[@]" none bar percent
+ ;;
+
+ sdirs)
+ _wanted values expl 'whether to complete . or ..' &&
+ compadd "$expl[@]" true false ..
+ ;;
+
+ stop)
+ _wanted values expl 'when to insert matches' &&
+ compadd "$expl[@]" true false verbose
+ ;;
+
+ tag)
+ _wanted tags expl tag && compadd "$expl[@]" - $taglist
+ ;;
+
+ user-host)
+ if [[ $PREFIX = *:* ]]; then
+ compset -P '*:'
+ _hosts
+ else
+ _users
+ fi
+ ;;
+
+ _*)
+ ${=ostate}
+ ;;
+
+ *)
+ ;;
+ esac
+done
+
+[[ $compstate[nmatches] != $nm ]]
Index: Test/.distfiles
===================================================================
RCS file: /home/pws/CVSROOT/projects/zsh/Test/.distfiles,v
retrieving revision 1.2
diff -u -r1.2 .distfiles
--- Test/.distfiles 1999/12/13 20:03:25 1.2
+++ Test/.distfiles 1999/12/23 17:34:29
@@ -1,5 +1,6 @@
DISTFILES_SRC='
.cvsignore .distfiles Makefile.in
ztst.zsh
- 01grammar.ztst 02alias.ztst 03quoting.ztst 50cd.ztst
+ 01grammar.ztst 02alias.ztst 03quoting.ztst 04redirect.ztst
+ 05command.ztst 06arith.ztst 07cond.ztst 50cd.ztst
'
--
Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
next reply other threads:[~1999-12-23 21:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-12-23 21:54 Peter Stephenson [this message]
2000-01-04 9:20 Sven Wischnowsky
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=E121GAe-0007LP-00.1999-12-23-21-53-17@mail6.svr.pol.co.uk \
--to=pws@pwstephenson.fsnet.co.uk \
--cc=zsh-workers@sunsite.auc.dk \
/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).