summaryrefslogtreecommitdiff
path: root/assets/info/zsh.info-3
diff options
context:
space:
mode:
Diffstat (limited to 'assets/info/zsh.info-3')
-rw-r--r--assets/info/zsh.info-35810
1 files changed, 5810 insertions, 0 deletions
diff --git a/assets/info/zsh.info-3 b/assets/info/zsh.info-3
new file mode 100644
index 00000000..34127397
--- /dev/null
+++ b/assets/info/zsh.info-3
@@ -0,0 +1,5810 @@
+This is zsh.info, produced by makeinfo version 4.8 from ./zsh.texi.
+
+INFO-DIR-SECTION Utilities
+START-INFO-DIR-ENTRY
+* ZSH: (zsh). The Z Shell Manual.
+END-INFO-DIR-ENTRY
+
+
+File: zsh.info, Node: History Control, Next: Modifying Text, Prev: Movement, Up: Zle Widgets
+
+18.6.2 History Control
+----------------------
+
+
+beginning-of-buffer-or-history (ESC-<) (gg) (unbound)
+ Move to the beginning of the buffer, or if already there, move to
+ the first event in the history list.
+
+beginning-of-line-hist
+ Move to the beginning of the line. If already at the beginning of
+ the buffer, move to the previous history line.
+
+beginning-of-history
+ Move to the first event in the history list.
+
+down-line-or-history (^N ESC-[B) (j) (ESC-[B)
+ Move down a line in the buffer, or if already at the bottom line,
+ move to the next event in the history list.
+
+vi-down-line-or-history (unbound) (+) (unbound)
+ Move down a line in the buffer, or if already at the bottom line,
+ move to the next event in the history list. Then move to the
+ first non-blank character on the line.
+
+down-line-or-search
+ Move down a line in the buffer, or if already at the bottom line,
+ search forward in the history for a line beginning with the first
+ word in the buffer.
+
+ If called from a function by the zle command with arguments, the
+ first argument is taken as the string for which to search, rather
+ than the first word in the buffer.
+
+down-history (unbound) (^N) (unbound)
+ Move to the next event in the history list.
+
+history-beginning-search-backward
+ Search backward in the history for a line beginning with the
+ current line up to the cursor. This leaves the cursor in its
+ original position.
+
+end-of-buffer-or-history (ESC->) (unbound) (unbound)
+ Move to the end of the buffer, or if already there, move to the
+ last event in the history list.
+
+end-of-line-hist
+ Move to the end of the line. If already at the end of the buffer,
+ move to the next history line.
+
+end-of-history
+ Move to the last event in the history list.
+
+vi-fetch-history (unbound) (G) (unbound)
+ Fetch the history line specified by the numeric argument. This
+ defaults to the current history line (i.e. the one that isn't
+ history yet).
+
+history-incremental-search-backward (^R ^Xr) (unbound) (unbound)
+ Search backward incrementally for a specified string. The search
+ is case-insensitive if the search string does not have uppercase
+ letters and no numeric argument was given. The string may begin
+ with `^' to anchor the search to the beginning of the line. When
+ called from a user-defined function returns the following
+ statuses: 0, if the search succeeded; 1, if the search failed; 2,
+ if the search term was a bad pattern; 3, if the search was aborted
+ by the send-break command.
+
+ A restricted set of editing functions is available in the
+ mini-buffer. Keys are looked up in the special isearch keymap,
+ and if not found there in the main keymap (note that by default
+ the isearch keymap is empty). An interrupt signal, as defined by
+ the stty setting, will stop the search and go back to the original
+ line. An undefined key will have the same effect. Note that the
+ following always perform the same task within incremental searches
+ and cannot be replaced by user defined widgets, nor can the set of
+ functions be extended. The supported functions are:
+
+
+ accept-and-hold
+ accept-and-infer-next-history
+ accept-line
+ accept-line-and-down-history
+ Perform the usual function after exiting incremental search.
+ The command line displayed is executed.
+
+ backward-delete-char
+ vi-backward-delete-char
+ Back up one place in the search history. If the search has
+ been repeated this does not immediately erase a character in
+ the minibuffer.
+
+ accept-search
+ Exit incremental search, retaining the command line but
+ performing no further action. Note that this function is not
+ bound by default and has no effect outside incremental search.
+
+ backward-delete-word
+ backward-kill-word
+ vi-backward-kill-word
+ Back up one character in the minibuffer; if multiple searches
+ have been performed since the character was inserted the
+ search history is rewound to the point just before the
+ character was entered. Hence this has the effect of repeating
+ backward-delete-char.
+
+ clear-screen
+ Clear the screen, remaining in incremental search mode.
+
+ history-incremental-search-backward
+ Find the next occurrence of the contents of the mini-buffer.
+ If the mini-buffer is empty, the most recent previously used
+ search string is reinstated.
+
+ history-incremental-search-forward
+ Invert the sense of the search.
+
+ magic-space
+ Inserts a non-magical space.
+
+ quoted-insert
+ vi-quoted-insert
+ Quote the character to insert into the minibuffer.
+
+ redisplay
+ Redisplay the command line, remaining in incremental search
+ mode.
+
+ vi-cmd-mode
+ Select the `vicmd' keymap; the `main' keymap (insert mode)
+ will be selected initially.
+
+ In addition, the modifications that were made while in vi
+ insert mode are merged to form a single undo event.
+
+ vi-repeat-search
+ vi-rev-repeat-search
+ Repeat the search. The direction of the search is indicated
+ in the mini-buffer.
+
+
+ Any character that is not bound to one of the above functions, or
+ self-insert or self-insert-unmeta, will cause the mode to be
+ exited. The character is then looked up and executed in the
+ keymap in effect at that point.
+
+ When called from a widget function by the zle command, the
+ incremental search commands can take a string argument. This will
+ be treated as a string of keys, as for arguments to the bindkey
+ command, and used as initial input for the command. Any
+ characters in the string which are unused by the incremental
+ search will be silently ignored. For example,
+
+
+ zle history-incremental-search-backward forceps
+
+ will search backwards for forceps, leaving the minibuffer
+ containing the string `forceps'.
+
+history-incremental-search-forward (^S ^Xs) (unbound) (unbound)
+ Search forward incrementally for a specified string. The search is
+ case-insensitive if the search string does not have uppercase
+ letters and no numeric argument was given. The string may begin
+ with `^' to anchor the search to the beginning of the line. The
+ functions available in the mini-buffer are the same as for
+ history-incremental-search-backward.
+
+history-incremental-pattern-search-backward
+history-incremental-pattern-search-forward
+ These widgets behave similarly to the corresponding widgets with
+ no -pattern, but the search string typed by the user is treated as
+ a pattern, respecting the current settings of the various options
+ affecting pattern matching. See *Note Filename Generation:: for a
+ description of patterns. If no numeric argument was given
+ lowercase letters in the search string may match uppercase letters
+ in the history. The string may begin with `^' to anchor the
+ search to the beginning of the line.
+
+ The prompt changes to indicate an invalid pattern; this may simply
+ indicate the pattern is not yet complete.
+
+ Note that only non-overlapping matches are reported, so an
+ expression with wildcards may return fewer matches on a line than
+ are visible by inspection.
+
+history-search-backward (ESC-P ESC-p) (unbound) (unbound)
+ Search backward in the history for a line beginning with the first
+ word in the buffer.
+
+ If called from a function by the zle command with arguments, the
+ first argument is taken as the string for which to search, rather
+ than the first word in the buffer.
+
+vi-history-search-backward (unbound) (/) (unbound)
+ Search backward in the history for a specified string. The string
+ may begin with `^' to anchor the search to the beginning of the
+ line.
+
+ A restricted set of editing functions is available in the
+ mini-buffer. An interrupt signal, as defined by the stty setting,
+ will stop the search. The functions available in the mini-buffer
+ are: accept-line, backward-delete-char, vi-backward-delete-char,
+ backward-kill-word, vi-backward-kill-word, clear-screen, redisplay,
+ quoted-insert and vi-quoted-insert.
+
+ vi-cmd-mode is treated the same as accept-line, and magic-space is
+ treated as a space. Any other character that is not bound to
+ self-insert or self-insert-unmeta will beep and be ignored. If the
+ function is called from vi command mode, the bindings of the
+ current insert mode will be used.
+
+ If called from a function by the zle command with arguments, the
+ first argument is taken as the string for which to search, rather
+ than the first word in the buffer.
+
+history-search-forward (ESC-N ESC-n) (unbound) (unbound)
+ Search forward in the history for a line beginning with the first
+ word in the buffer.
+
+ If called from a function by the zle command with arguments, the
+ first argument is taken as the string for which to search, rather
+ than the first word in the buffer.
+
+vi-history-search-forward (unbound) (?) (unbound)
+ Search forward in the history for a specified string. The string
+ may begin with `^' to anchor the search to the beginning of the
+ line. The functions available in the mini-buffer are the same as
+ for vi-history-search-backward. Argument handling is also the same
+ as for that command.
+
+infer-next-history (^X^N) (unbound) (unbound)
+ Search in the history list for a line matching the current one and
+ fetch the event following it.
+
+insert-last-word (ESC-_ ESC-.) (unbound) (unbound)
+ Insert the last word from the previous history event at the cursor
+ position. If a positive numeric argument is given, insert that
+ word from the end of the previous history event. If the argument
+ is zero or negative insert that word from the left (zero inserts
+ the previous command word). Repeating this command replaces the
+ word just inserted with the last word from the history event prior
+ to the one just used; numeric arguments can be used in the same
+ way to pick a word from that event.
+
+ When called from a shell function invoked from a user-defined
+ widget, the command can take one to three arguments. The first
+ argument specifies a history offset which applies to successive
+ calls to this widget: if it is -1, the default behaviour is used,
+ while if it is 1, successive calls will move forwards through the
+ history. The value 0 can be used to indicate that the history
+ line examined by the previous execution of the command will be
+ reexamined. Note that negative numbers should be preceded by a
+ `--' argument to avoid confusing them with options.
+
+ If two arguments are given, the second specifies the word on the
+ command line in normal array index notation (as a more natural
+ alternative to the numeric argument). Hence 1 is the first word,
+ and -1 (the default) is the last word.
+
+ If a third argument is given, its value is ignored, but it is used
+ to signify that the history offset is relative to the current
+ history line, rather than the one remembered after the previous
+ invocations of insert-last-word.
+
+ For example, the default behaviour of the command corresponds to
+
+
+ zle insert-last-word -- -1 -1
+
+ while the command
+
+
+ zle insert-last-word -- -1 1 -
+
+ always copies the first word of the line in the history
+ immediately before the line being edited. This has the side
+ effect that later invocations of the widget will be relative to
+ that line.
+
+vi-repeat-search (unbound) (n) (unbound)
+ Repeat the last vi history search.
+
+vi-rev-repeat-search (unbound) (N) (unbound)
+ Repeat the last vi history search, but in reverse.
+
+up-line-or-history (^P ESC-[A) (k) (ESC-[A)
+ Move up a line in the buffer, or if already at the top line, move
+ to the previous event in the history list.
+
+vi-up-line-or-history (unbound) (-) (unbound)
+ Move up a line in the buffer, or if already at the top line, move
+ to the previous event in the history list. Then move to the first
+ non-blank character on the line.
+
+up-line-or-search
+ Move up a line in the buffer, or if already at the top line,
+ search backward in the history for a line beginning with the first
+ word in the buffer.
+
+ If called from a function by the zle command with arguments, the
+ first argument is taken as the string for which to search, rather
+ than the first word in the buffer.
+
+up-history (unbound) (^P) (unbound)
+ Move to the previous event in the history list.
+
+history-beginning-search-forward
+ Search forward in the history for a line beginning with the current
+ line up to the cursor. This leaves the cursor in its original
+ position.
+
+set-local-history
+ By default, history movement commands visit the imported lines as
+ well as the local lines. This widget lets you toggle this on and
+ off, or set it with the numeric argument. Zero for both local and
+ imported lines and nonzero for only local lines.
+
+
+
+File: zsh.info, Node: Modifying Text, Next: Arguments, Prev: History Control, Up: Zle Widgets
+
+18.6.3 Modifying Text
+---------------------
+
+
+vi-add-eol (unbound) (A) (unbound)
+ Move to the end of the line and enter insert mode.
+
+vi-add-next (unbound) (a) (unbound)
+ Enter insert mode after the current cursor position, without
+ changing lines.
+
+backward-delete-char (^H ^?) (unbound) (unbound)
+ Delete the character behind the cursor.
+
+vi-backward-delete-char (unbound) (X) (^H)
+ Delete the character behind the cursor, without changing lines.
+ If in insert mode, this won't delete past the point where insert
+ mode was last entered.
+
+backward-delete-word
+ Delete the word behind the cursor.
+
+backward-kill-line
+ Kill from the beginning of the line to the cursor position.
+
+backward-kill-word (^W ESC-^H ESC-^?) (unbound) (unbound)
+ Kill the word behind the cursor.
+
+vi-backward-kill-word (unbound) (unbound) (^W)
+ Kill the word behind the cursor, without going past the point
+ where insert mode was last entered.
+
+capitalize-word (ESC-C ESC-c) (unbound) (unbound)
+ Capitalize the current word and move past it.
+
+vi-change (unbound) (c) (unbound)
+ Read a movement command from the keyboard, and kill from the
+ cursor position to the endpoint of the movement. Then enter
+ insert mode. If the command is vi-change, change the current line.
+
+ For compatibility with vi, if the command is vi-forward-word or
+ vi-forward-blank-word, the whitespace after the word is not
+ included. If you prefer the more consistent behaviour with the
+ whitespace included use the following key binding:
+
+
+ bindkey -a -s cw dwi
+
+vi-change-eol (unbound) (C) (unbound)
+ Kill to the end of the line and enter insert mode.
+
+vi-change-whole-line (unbound) (S) (unbound)
+ Kill the current line and enter insert mode.
+
+copy-region-as-kill (ESC-W ESC-w) (unbound) (unbound)
+ Copy the area from the cursor to the mark to the kill buffer.
+
+ If called from a ZLE widget function in the form `zle
+ copy-region-as-kill STRING' then STRING will be taken as the text
+ to copy to the kill buffer. The cursor, the mark and the text on
+ the command line are not used in this case.
+
+copy-prev-word (ESC-^_) (unbound) (unbound)
+ Duplicate the word to the left of the cursor.
+
+copy-prev-shell-word
+ Like copy-prev-word, but the word is found by using shell parsing,
+ whereas copy-prev-word looks for blanks. This makes a difference
+ when the word is quoted and contains spaces.
+
+vi-delete (unbound) (d) (unbound)
+ Read a movement command from the keyboard, and kill from the
+ cursor position to the endpoint of the movement. If the command
+ is vi-delete, kill the current line.
+
+delete-char
+ Delete the character under the cursor.
+
+vi-delete-char (unbound) (x) (unbound)
+ Delete the character under the cursor, without going past the end
+ of the line.
+
+delete-word
+ Delete the current word.
+
+down-case-word (ESC-L ESC-l) (unbound) (unbound)
+ Convert the current word to all lowercase and move past it.
+
+vi-down-case (unbound) (gu) (unbound)
+ Read a movement command from the keyboard, and convert all
+ characters from the cursor position to the endpoint of the
+ movement to lowercase. If the movement command is vi-down-case,
+ swap the case of all characters on the current line.
+
+kill-word (ESC-D ESC-d) (unbound) (unbound)
+ Kill the current word.
+
+gosmacs-transpose-chars
+ Exchange the two characters behind the cursor.
+
+vi-indent (unbound) (>) (unbound)
+ Indent a number of lines.
+
+vi-insert (unbound) (i) (unbound)
+ Enter insert mode.
+
+vi-insert-bol (unbound) (I) (unbound)
+ Move to the first non-blank character on the line and enter insert
+ mode.
+
+vi-join (^X^J) (J) (unbound)
+ Join the current line with the next one.
+
+kill-line (^K) (unbound) (unbound)
+ Kill from the cursor to the end of the line. If already on the
+ end of the line, kill the newline character.
+
+vi-kill-line (unbound) (unbound) (^U)
+ Kill from the cursor back to wherever insert mode was last entered.
+
+vi-kill-eol (unbound) (D) (unbound)
+ Kill from the cursor to the end of the line.
+
+kill-region
+ Kill from the cursor to the mark.
+
+kill-buffer (^X^K) (unbound) (unbound)
+ Kill the entire buffer.
+
+kill-whole-line (^U) (unbound) (unbound)
+ Kill the current line.
+
+vi-match-bracket (^X^B) (%) (unbound)
+ Move to the bracket character (one of {}, () or []) that matches
+ the one under the cursor. If the cursor is not on a bracket
+ character, move forward without going past the end of the line to
+ find one, and then go to the matching bracket.
+
+vi-open-line-above (unbound) (O) (unbound)
+ Open a line above the cursor and enter insert mode.
+
+vi-open-line-below (unbound) (o) (unbound)
+ Open a line below the cursor and enter insert mode.
+
+vi-oper-swap-case (unbound) (g~) (unbound)
+ Read a movement command from the keyboard, and swap the case of
+ all characters from the cursor position to the endpoint of the
+ movement. If the movement command is vi-oper-swap-case, swap the
+ case of all characters on the current line.
+
+overwrite-mode (^X^O) (unbound) (unbound)
+ Toggle between overwrite mode and insert mode.
+
+vi-put-before (unbound) (P) (unbound)
+ Insert the contents of the kill buffer before the cursor. If the
+ kill buffer contains a sequence of lines (as opposed to
+ characters), paste it above the current line.
+
+vi-put-after (unbound) (p) (unbound)
+ Insert the contents of the kill buffer after the cursor. If the
+ kill buffer contains a sequence of lines (as opposed to
+ characters), paste it below the current line.
+
+put-replace-selection (unbound) (unbound) (unbound)
+ Replace the contents of the current region or selection with the
+ contents of the kill buffer. If the kill buffer contains a
+ sequence of lines (as opposed to characters), the current line
+ will be split by the pasted lines.
+
+quoted-insert (^V) (unbound) (unbound)
+ Insert the next character typed into the buffer literally. An
+ interrupt character will not be inserted.
+
+vi-quoted-insert (unbound) (unbound) (^Q ^V)
+ Display a `^' at the cursor position, and insert the next
+ character typed into the buffer literally. An interrupt character
+ will not be inserted.
+
+quote-line (ESC-') (unbound) (unbound)
+ Quote the current line; that is, put a `'' character at the
+ beginning and the end, and convert all `'' characters to `'\'''.
+
+quote-region (ESC-") (unbound) (unbound)
+ Quote the region from the cursor to the mark.
+
+vi-replace (unbound) (R) (unbound)
+ Enter overwrite mode.
+
+vi-repeat-change (unbound) (.) (unbound)
+ Repeat the last vi mode text modification. If a count was used
+ with the modification, it is remembered. If a count is given to
+ this command, it overrides the remembered count, and is remembered
+ for future uses of this command. The cut buffer specification is
+ similarly remembered.
+
+vi-replace-chars (unbound) (r) (unbound)
+ Replace the character under the cursor with a character read from
+ the keyboard.
+
+self-insert (printable characters) (unbound) (printable characters and some control characters)
+ Insert a character into the buffer at the cursor position.
+
+self-insert-unmeta (ESC-^I ESC-^J ESC-^M) (unbound) (unbound)
+ Insert a character into the buffer after stripping the meta bit
+ and converting ^M to ^J.
+
+vi-substitute (unbound) (s) (unbound)
+ Substitute the next character(s).
+
+vi-swap-case (unbound) (~) (unbound)
+ Swap the case of the character under the cursor and move past it.
+
+transpose-chars (^T) (unbound) (unbound)
+ Exchange the two characters to the left of the cursor if at end of
+ line, else exchange the character under the cursor with the
+ character to the left.
+
+transpose-words (ESC-T ESC-t) (unbound) (unbound)
+ Exchange the current word with the one before it.
+
+ With a positive numeric argument _N_, the word around the cursor,
+ or following it if the cursor is between words, is transposed with
+ the preceding _N_ words. The cursor is put at the end of the
+ resulting group of words.
+
+ With a negative numeric argument _-N_, the effect is the same as
+ using a positive argument _N_ except that the original cursor
+ position is retained, regardless of how the words are rearranged.
+
+vi-unindent (unbound) (<) (unbound)
+ Unindent a number of lines.
+
+vi-up-case (unbound) (gU) (unbound)
+ Read a movement command from the keyboard, and convert all
+ characters from the cursor position to the endpoint of the
+ movement to lowercase. If the movement command is vi-up-case,
+ swap the case of all characters on the current line.
+
+up-case-word (ESC-U ESC-u) (unbound) (unbound)
+ Convert the current word to all caps and move past it.
+
+yank (^Y) (unbound) (unbound)
+ Insert the contents of the kill buffer at the cursor position.
+
+yank-pop (ESC-y) (unbound) (unbound)
+ Remove the text just yanked, rotate the kill-ring (the history of
+ previously killed text) and yank the new top. Only works following
+ yank, vi-put-before, vi-put-after or yank-pop.
+
+vi-yank (unbound) (y) (unbound)
+ Read a movement command from the keyboard, and copy the region
+ from the cursor position to the endpoint of the movement into the
+ kill buffer. If the command is vi-yank, copy the current line.
+
+vi-yank-whole-line (unbound) (Y) (unbound)
+ Copy the current line into the kill buffer.
+
+vi-yank-eol
+ Copy the region from the cursor position to the end of the line
+ into the kill buffer. Arguably, this is what Y should do in vi,
+ but it isn't what it actually does.
+
+
+
+File: zsh.info, Node: Arguments, Next: Completion, Prev: Modifying Text, Up: Zle Widgets
+
+18.6.4 Arguments
+----------------
+
+
+digit-argument (ESC-0..ESC-9) (1-9) (unbound)
+ Start a new numeric argument, or add to the current one. See also
+ vi-digit-or-beginning-of-line. This only works if bound to a key
+ sequence ending in a decimal digit.
+
+ Inside a widget function, a call to this function treats the last
+ key of the key sequence which called the widget as the digit.
+
+neg-argument (ESC--) (unbound) (unbound)
+ Changes the sign of the following argument.
+
+universal-argument
+ Multiply the argument of the next command by 4. Alternatively, if
+ this command is followed by an integer (positive or negative), use
+ that as the argument for the next command. Thus digits cannot be
+ repeated using this command. For example, if this command occurs
+ twice, followed immediately by forward-char, move forward sixteen
+ spaces; if instead it is followed by -2, then forward-char, move
+ backward two spaces.
+
+ Inside a widget function, if passed an argument, i.e. `zle
+ universal-argument NUM', the numeric argument will be set to NUM;
+ this is equivalent to `NUMERIC=NUM'.
+
+argument-base
+ Use the existing numeric argument as a numeric base, which must be
+ in the range 2 to 36 inclusive. Subsequent use of digit-argument
+ and universal-argument will input a new numeric argument in the
+ given base. The usual hexadecimal convention is used: the letter
+ a or A corresponds to 10, and so on. Arguments in bases requiring
+ digits from 10 upwards are more conveniently input with
+ universal-argument, since ESC-a etc. are not usually bound to
+ digit-argument.
+
+ The function can be used with a command argument inside a
+ user-defined widget. The following code sets the base to 16 and
+ lets the user input a hexadecimal argument until a key out of the
+ digit range is typed:
+
+
+ zle argument-base 16
+ zle universal-argument
+
+
+
+File: zsh.info, Node: Completion, Next: Miscellaneous, Prev: Arguments, Up: Zle Widgets
+
+18.6.5 Completion
+-----------------
+
+
+accept-and-menu-complete
+ In a menu completion, insert the current completion into the
+ buffer, and advance to the next possible completion.
+
+complete-word
+ Attempt completion on the current word.
+
+delete-char-or-list (^D) (unbound) (unbound)
+ Delete the character under the cursor. If the cursor is at the
+ end of the line, list possible completions for the current word.
+
+expand-cmd-path
+ Expand the current command to its full pathname.
+
+expand-or-complete (TAB) (unbound) (TAB)
+ Attempt shell expansion on the current word. If that fails,
+ attempt completion.
+
+expand-or-complete-prefix
+ Attempt shell expansion on the current word up to cursor.
+
+expand-history (ESC-space ESC-!) (unbound) (unbound)
+ Perform history expansion on the edit buffer.
+
+expand-word (^X*) (unbound) (unbound)
+ Attempt shell expansion on the current word.
+
+list-choices (ESC-^D) (^D =) (^D)
+ List possible completions for the current word.
+
+list-expand (^Xg ^XG) (^G) (^G)
+ List the expansion of the current word.
+
+magic-space
+ Perform history expansion and insert a space into the buffer.
+ This is intended to be bound to space.
+
+menu-complete
+ Like complete-word, except that menu completion is used. See the
+ MENU_COMPLETE option.
+
+menu-expand-or-complete
+ Like expand-or-complete, except that menu completion is used.
+
+reverse-menu-complete
+ Perform menu completion, like menu-complete, except that if a menu
+ completion is already in progress, move to the _previous_
+ completion rather than the next.
+
+end-of-list
+ When a previous completion displayed a list below the prompt, this
+ widget can be used to move the prompt below the list.
+
+
+
+File: zsh.info, Node: Miscellaneous, Next: Text Objects, Prev: Completion, Up: Zle Widgets
+
+18.6.6 Miscellaneous
+--------------------
+
+
+accept-and-hold (ESC-A ESC-a) (unbound) (unbound)
+ Push the contents of the buffer on the buffer stack and execute it.
+
+accept-and-infer-next-history
+ Execute the contents of the buffer. Then search the history list
+ for a line matching the current one and push the event following
+ onto the buffer stack.
+
+accept-line (^J ^M) (^J ^M) (^J ^M)
+ Finish editing the buffer. Normally this causes the buffer to be
+ executed as a shell command.
+
+accept-line-and-down-history (^O) (unbound) (unbound)
+ Execute the current line, and push the next history event on the
+ buffer stack.
+
+auto-suffix-remove
+ If the previous action added a suffix (space, slash, etc.) to the
+ word on the command line, remove it. Otherwise do nothing.
+ Removing the suffix ends any active menu completion or menu
+ selection.
+
+ This widget is intended to be called from user-defined widgets to
+ enforce a desired suffix-removal behavior.
+
+auto-suffix-retain
+ If the previous action added a suffix (space, slash, etc.) to the
+ word on the command line, force it to be preserved. Otherwise do
+ nothing. Retaining the suffix ends any active menu completion or
+ menu selection.
+
+ This widget is intended to be called from user-defined widgets to
+ enforce a desired suffix-preservation behavior.
+
+beep
+ Beep, unless the BEEP option is unset.
+
+bracketed-paste
+ This widget is invoked when text is pasted to the terminal
+ emulator. It is not intended to be bound to actual keys but
+ instead to the special sequence generated by the terminal emulator
+ when text is pasted.
+
+ When invoked interactively, the pasted text is inserted to the
+ buffer and placed in the cutbuffer. If a numeric argument is
+ given, shell quoting will be applied to the pasted text before it
+ is inserted.
+
+ When a named buffer is specified with vi-set-buffer ("x), the
+ pasted text is stored in that named buffer but not inserted.
+
+ When called from a widget function as `bracketed-paste NAME`, the
+ pasted text is assigned to the variable NAME and no other
+ processing is done.
+
+ See also the zle_bracketed_paste parameter.
+
+vi-cmd-mode (^X^V) (unbound) (^[)
+ Enter command mode; that is, select the `vicmd' keymap. Yes, this
+ is bound by default in emacs mode.
+
+vi-caps-lock-panic
+ Hang until any lowercase key is pressed. This is for vi users
+ without the mental capacity to keep track of their caps lock key
+ (like the author).
+
+clear-screen (^L ESC-^L) (^L) (^L)
+ Clear the screen and redraw the prompt.
+
+deactivate-region
+ Make the current region inactive. This disables vim-style visual
+ selection mode if it is active.
+
+describe-key-briefly
+ Reads a key sequence, then prints the function bound to that
+ sequence.
+
+exchange-point-and-mark (^X^X) (unbound) (unbound)
+ Exchange the cursor position (point) with the position of the mark.
+ Unless a negative numeric argument is given, the region between
+ point and mark is activated so that it can be highlighted. If a
+ zero numeric argument is given, the region is activated but point
+ and mark are not swapped.
+
+execute-named-cmd (ESC-x) (:) (unbound)
+ Read the name of an editor command and execute it. Aliasing this
+ widget with `zle -A' or replacing it with `zle -N' has no effect
+ when interpreting key bindings, but `zle execute-named-cmd' will
+ invoke such an alias or replacement.
+
+ A restricted set of editing functions is available in the
+ mini-buffer. Keys are looked up in the special command keymap,
+ and if not found there in the main keymap. An interrupt signal,
+ as defined by the stty setting, will abort the function. Note
+ that the following always perform the same task within the
+ executed-named-cmd environment and cannot be replaced by user
+ defined widgets, nor can the set of functions be extended. The
+ allowed functions are: backward-delete-char,
+ vi-backward-delete-char, clear-screen, redisplay, quoted-insert,
+ vi-quoted-insert, backward-kill-word, vi-backward-kill-word,
+ kill-whole-line, vi-kill-line, backward-kill-line, list-choices,
+ delete-char-or-list, complete-word, accept-line,
+ expand-or-complete and expand-or-complete-prefix.
+
+ kill-region kills the last word, and vi-cmd-mode is treated the
+ same as accept-line. The space and tab characters, if not bound
+ to one of these functions, will complete the name and then list the
+ possibilities if the AUTO_LIST option is set. Any other character
+ that is not bound to self-insert or self-insert-unmeta will beep
+ and be ignored. The bindings of the current insert mode will be
+ used.
+
+ Currently this command may not be redefined or called by name.
+
+execute-last-named-cmd (ESC-z) (unbound) (unbound)
+ Redo the last function executed with execute-named-cmd.
+
+ Like execute-named-cmd, this command may not be redefined, but it
+ may be called by name.
+
+get-line (ESC-G ESC-g) (unbound) (unbound)
+ Pop the top line off the buffer stack and insert it at the cursor
+ position.
+
+pound-insert (unbound) (#) (unbound)
+ If there is no # character at the beginning of the buffer, add one
+ to the beginning of each line. If there is one, remove a # from
+ each line that has one. In either case, accept the current line.
+ The INTERACTIVE_COMMENTS option must be set for this to have any
+ usefulness.
+
+vi-pound-insert
+ If there is no # character at the beginning of the current line,
+ add one. If there is one, remove it. The INTERACTIVE_COMMENTS
+ option must be set for this to have any usefulness.
+
+push-input
+ Push the entire current multiline construct onto the buffer stack
+ and return to the top-level (PS1) prompt. If the current parser
+ construct is only a single line, this is exactly like push-line.
+ Next time the editor starts up or is popped with get-line, the
+ construct will be popped off the top of the buffer stack and loaded
+ into the editing buffer.
+
+push-line (^Q ESC-Q ESC-q) (unbound) (unbound)
+ Push the current buffer onto the buffer stack and clear the buffer.
+ Next time the editor starts up, the buffer will be popped off the
+ top of the buffer stack and loaded into the editing buffer.
+
+push-line-or-edit
+ At the top-level (PS1) prompt, equivalent to push-line. At a
+ secondary (PS2) prompt, move the entire current multiline
+ construct into the editor buffer. The latter is equivalent to
+ push-input followed by get-line.
+
+read-command
+ Only useful from a user-defined widget. A keystroke is read just
+ as in normal operation, but instead of the command being executed
+ the name of the command that would be executed is stored in the
+ shell parameter REPLY. This can be used as the argument of a
+ future zle command. If the key sequence is not bound, status 1 is
+ returned; typically, however, REPLY is set to undefined-key to
+ indicate a useless key sequence.
+
+recursive-edit
+ Only useful from a user-defined widget. At this point in the
+ function, the editor regains control until one of the standard
+ widgets which would normally cause zle to exit (typically an
+ accept-line caused by hitting the return key) is executed.
+ Instead, control returns to the user-defined widget. The status
+ returned is non-zero if the return was caused by an error, but the
+ function still continues executing and hence may tidy up. This
+ makes it safe for the user-defined widget to alter the command
+ line or key bindings temporarily.
+
+ The following widget, caps-lock, serves as an example.
+
+
+ self-insert-ucase() {
+ LBUFFER+=${(U)KEYS[-1]}
+ }
+
+ integer stat
+
+ zle -N self-insert self-insert-ucase
+ zle -A caps-lock save-caps-lock
+ zle -A accept-line caps-lock
+
+ zle recursive-edit
+ stat=$?
+
+ zle -A .self-insert self-insert
+ zle -A save-caps-lock caps-lock
+ zle -D save-caps-lock
+
+ (( stat )) && zle send-break
+
+ return $stat
+
+ This causes typed letters to be inserted capitalised until either
+ accept-line (i.e. typically the return key) is typed or the
+ caps-lock widget is invoked again; the later is handled by saving
+ the old definition of caps-lock as save-caps-lock and then
+ rebinding it to invoke accept-line. Note that an error from the
+ recursive edit is detected as a non-zero return status and
+ propagated by using the send-break widget.
+
+redisplay (unbound) (^R) (^R)
+ Redisplays the edit buffer.
+
+reset-prompt (unbound) (unbound) (unbound)
+ Force the prompts on both the left and right of the screen to be
+ re-expanded, then redisplay the edit buffer. This reflects
+ changes both to the prompt variables themselves and changes in the
+ expansion of the values (for example, changes in time or
+ directory, or changes to the value of variables referred to by the
+ prompt).
+
+ Otherwise, the prompt is only expanded each time zle starts, and
+ when the display has been interrupted by output from another part
+ of the shell (such as a job notification) which causes the command
+ line to be reprinted.
+
+ reset-prompt doesn't alter the special parameter LASTWIDGET.
+
+
+
+send-break (^G ESC-^G) (unbound) (unbound)
+ Abort the current editor function, e.g. execute-named-command, or
+ the editor itself, e.g. if you are in vared. Otherwise abort the
+ parsing of the current line; in this case the aborted line is
+ available in the shell variable ZLE_LINE_ABORTED. If the editor
+ is aborted from within vared, the variable ZLE_VARED_ABORTED is
+ set.
+
+run-help (ESC-H ESC-h) (unbound) (unbound)
+ Push the buffer onto the buffer stack, and execute the command
+ `run-help CMD', where CMD is the current command. run-help is
+ normally aliased to man.
+
+vi-set-buffer (unbound) (") (unbound)
+ Specify a buffer to be used in the following command. There are
+ 37 buffers that can be specified: the 26 `named' buffers "a to "z,
+ the `yank' buffer "0, the nine `queued' buffers "1 to "9 and the
+ `black hole' buffer "_. The named buffers can also be specified
+ as "A to "Z.
+
+ When a buffer is specified for a cut, change or yank command, the
+ text concerned replaces the previous contents of the specified
+ buffer. If a named buffer is specified using a capital, the newly
+ cut text is appended to the buffer instead of overwriting it. When
+ using the "_ buffer, nothing happens. This can be useful for
+ deleting text without affecting any buffers.
+
+ If no buffer is specified for a cut or change command, "1 is used,
+ and the contents of "1 to "8 are each shifted along one buffer;
+ the contents of "9 is lost. If no buffer is specified for a yank
+ command, "0 is used. Finally, a paste command without a specified
+ buffer will paste the text from the most recent command regardless
+ of any buffer that might have been used with that command.
+
+ When called from a widget function by the zle command, the buffer
+ can optionally be specified with an argument. For example,
+
+
+ zle vi-set-buffer A
+
+vi-set-mark (unbound) (m) (unbound)
+ Set the specified mark at the cursor position.
+
+set-mark-command (^@) (unbound) (unbound)
+ Set the mark at the cursor position. If called with a negative
+ numeric argument, do not set the mark but deactivate the region so
+ that it is no longer highlighted (it is still usable for other
+ purposes). Otherwise the region is marked as active.
+
+spell-word (ESC-$ ESC-S ESC-s) (unbound) (unbound)
+ Attempt spelling correction on the current word.
+
+split-undo
+ Breaks the undo sequence at the current change. This is useful in
+ vi mode as changes made in insert mode are coalesced on entering
+ command mode. Similarly, undo will normally revert as one all the
+ changes made by a user-defined widget.
+
+undefined-key
+ This command is executed when a key sequence that is not bound to
+ any command is typed. By default it beeps.
+
+undo (^_ ^Xu ^X^U) (u) (unbound)
+ Incrementally undo the last text modification. When called from a
+ user-defined widget, takes an optional argument indicating a
+ previous state of the undo history as returned by the
+ UNDO_CHANGE_NO variable; modifications are undone until that state
+ is reached, subject to any limit imposed by the UNDO_LIMIT_NO
+ variable.
+
+ Note that when invoked from vi command mode, the full prior change
+ made in insert mode is reverted, the changes having been merged
+ when command mode was selected.
+
+redo (unbound) (^R) (unbound)
+ Incrementally redo undone text modifications.
+
+vi-undo-change (unbound) (unbound) (unbound)
+ Undo the last text modification. If repeated, redo the
+ modification.
+
+visual-mode (unbound) (v) (unbound)
+ Toggle vim-style visual selection mode. If line-wise visual mode is
+ currently enabled then it is changed to being character-wise. If
+ used following an operator, it forces the subsequent movement
+ command to be treated as a character-wise movement.
+
+visual-line-mode (unbound) (V) (unbound)
+ Toggle vim-style line-wise visual selection mode. If character-wise
+ visual mode is currently enabled then it is changed to being
+ line-wise. If used following an operator, it forces the subsequent
+ movement command to be treated as a line-wise movement.
+
+what-cursor-position (^X=) (ga) (unbound)
+ Print the character under the cursor, its code as an octal,
+ decimal and hexadecimal number, the current cursor position within
+ the buffer and the column of the cursor in the current line.
+
+where-is
+ Read the name of an editor command and print the listing of key
+ sequences that invoke the specified command. A restricted set of
+ editing functions is available in the mini-buffer. Keys are
+ looked up in the special command keymap, and if not found there in
+ the main keymap.
+
+which-command (ESC-?) (unbound) (unbound)
+ Push the buffer onto the buffer stack, and execute the command
+ `which-command CMD'. where CMD is the current command.
+ which-command is normally aliased to whence.
+
+vi-digit-or-beginning-of-line (unbound) (0) (unbound)
+ If the last command executed was a digit as part of an argument,
+ continue the argument. Otherwise, execute vi-beginning-of-line.
+
+
+
+File: zsh.info, Node: Text Objects, Prev: Miscellaneous, Up: Zle Widgets
+
+18.6.7 Text Objects
+-------------------
+
+Text objects are commands that can be used to select a block of text
+according to some criteria. They are a feature of the vim text editor
+and so are primarily intended for use with vi operators or from visual
+selection mode. However, they can also be used from vi-insert or emacs
+mode. Key bindings listed below apply to the viopp and visual keymaps.
+
+
+select-a-blank-word (aW)
+ Select a word including adjacent blanks, where a word is defined
+ as a series of non-blank characters. With a numeric argument,
+ multiple words will be selected.
+
+select-a-shell-word (aa)
+ Select the current command argument applying the normal rules for
+ quoting.
+
+select-a-word (aw)
+ Select a word including adjacent blanks, using the normal vi-style
+ word definition. With a numeric argument, multiple words will be
+ selected.
+
+select-in-blank-word (iW)
+ Select a word, where a word is defined as a series of non-blank
+ characters. With a numeric argument, multiple words will be
+ selected.
+
+select-in-shell-word (ia)
+ Select the current command argument applying the normal rules for
+ quoting. If the argument begins and ends with matching quote
+ characters, these are not included in the selection.
+
+select-in-word (iw)
+ Select a word, using the normal vi-style word definition. With a
+ numeric argument, multiple words will be selected.
+
+
+
+
+File: zsh.info, Node: Character Highlighting, Prev: Zle Widgets, Up: Zsh Line Editor
+
+18.7 Character Highlighting
+===========================
+
+The line editor has the ability to highlight characters or regions of
+the line that have a particular significance. This is controlled by
+the array parameter zle_highlight, if it has been set by the user.
+
+If the parameter contains the single entry none all highlighting is
+turned off. Note the parameter is still expected to be an array.
+
+Otherwise each entry of the array should consist of a word indicating a
+context for highlighting, then a colon, then a comma-separated list of
+the types of highlighting to apply in that context.
+
+The contexts available for highlighting are the following:
+
+
+default
+ Any text within the command line not affected by any other
+ highlighting. Text outside the editable area of the command line
+ is not affected.
+
+isearch
+ When one of the incremental history search widgets is active, the
+ area of the command line matched by the search string or pattern.
+
+region
+ The currently selected text. In emacs terminology, this is
+ referred to as the region and is bounded by the cursor (point) and
+ the mark. The region is only highlighted if it is active, which is
+ the case after the mark is modified with set-mark-command or
+ exchange-point-and-mark. Note that whether or not the region is
+ active has no effect on its use within emacs style widgets, it
+ simply determines whether it is highlighted. In vi mode, the
+ region corresponds to selected text in visual mode.
+
+special
+ Individual characters that have no direct printable representation
+ but are shown in a special manner by the line editor. These
+ characters are described below.
+
+suffix
+ This context is used in completion for characters that are marked
+ as suffixes that will be removed if the completion ends at that
+ point, the most obvious example being a slash (/) after a
+ directory name. Note that suffix removal is configurable; the
+ circumstances under which the suffix will be removed may differ
+ for different completions.
+
+paste
+ Following a command to paste text, the characters that were
+ inserted.
+
+
+When region_highlight is set, the contexts that describe a region --
+isearch, region, suffix, and paste -- are applied first, then
+region_highlight is applied, then the remaining zle_highlight contexts
+are applied. If a particular character is affected by multiple
+specifications, the last specification wins.
+
+zle_highlight may contain additional fields for controlling how
+terminal sequences to change colours are output. Each of the following
+is followed by a colon and a string in the same form as for key
+bindings. This will not be necessary for the vast majority of
+terminals as the defaults shown in parentheses are widely used.
+
+
+fg_start_code (\e[3)
+ The start of the escape sequence for the foreground colour. This
+ is followed by one to three ASCII digits representing the colour.
+ Only used for palette colors, i.e. not 24-bit colors specified via
+ a color triplet.
+
+fg_default_code (9)
+ The number to use instead of the colour to reset the default
+ foreground colour.
+
+fg_end_code (m)
+ The end of the escape sequence for the foreground colour.
+
+bg_start_code (\e[4)
+ The start of the escape sequence for the background colour. See
+ fg_start_code above.
+
+bg_default_code (9)
+ The number to use instead of the colour to reset the default
+ background colour.
+
+bg_end_code (m)
+ The end of the escape sequence for the background colour.
+
+
+The available types of highlighting are the following. Note that not
+all types of highlighting are available on all terminals:
+
+
+none
+ No highlighting is applied to the given context. It is not useful
+ for this to appear with other types of highlighting; it is used to
+ override a default.
+
+fg=COLOUR
+ The foreground colour should be set to COLOUR, a decimal integer,
+ the name of one of the eight most widely-supported colours or as a
+ `#' followed by an RGB triplet in hexadecimal format.
+
+ Not all terminals support this and, of those that do, not all
+ provide facilities to test the support, hence the user should
+ decide based on the terminal type. Most terminals support the
+ colours black, red, green, yellow, blue, magenta, cyan and white,
+ which can be set by name. In addition. default may be used to set
+ the terminal's default foreground colour. Abbreviations are
+ allowed; b or bl selects black. Some terminals may generate
+ additional colours if the bold attribute is also present.
+
+ On recent terminals and on systems with an up-to-date terminal
+ database the number of colours supported may be tested by the
+ command `echotc Co'; if this succeeds, it indicates a limit on the
+ number of colours which will be enforced by the line editor. The
+ number of colours is in any case limited to 256 (i.e. the range 0
+ to 255).
+
+ Some modern terminal emulators have support for 24-bit true colour
+ (16 million colours). In this case, the hex triplet format can be
+ used. This consists of a `#' followed by either a three or six
+ digit hexadecimal number describing the red, green and blue
+ components of the colour. Hex triplets can also be used with 88
+ and 256 colour terminals via the zsh/nearcolor module (see *Note
+ The zsh/nearcolor Module::).
+
+ Colour is also known as color.
+
+bg=COLOUR
+ The background colour should be set to COLOUR. This works
+ similarly to the foreground colour, except the background is not
+ usually affected by the bold attribute.
+
+bold
+ The characters in the given context are shown in a bold font. Not
+ all terminals distinguish bold fonts.
+
+standout
+ The characters in the given context are shown in the terminal's
+ standout mode. The actual effect is specific to the terminal; on
+ many terminals it is inverse video. On some such terminals, where
+ the cursor does not blink it appears with standout mode negated,
+ making it less than clear where the cursor actually is. On such
+ terminals one of the other effects may be preferable for
+ highlighting the region and matched search string.
+
+underline
+ The characters in the given context are shown underlined. Some
+ terminals show the foreground in a different colour instead; in
+ this case whitespace will not be highlighted.
+
+
+The characters described above as `special' are as follows. The
+formatting described here is used irrespective of whether the characters
+are highlighted:
+
+
+ASCII control characters
+ Control characters in the ASCII range are shown as `^' followed by
+ the base character.
+
+Unprintable multibyte characters
+ This item applies to control characters not in the ASCII range,
+ plus other characters as follows. If the MULTIBYTE option is in
+ effect, multibyte characters not in the ASCII character set that
+ are reported as having zero width are treated as combining
+ characters when the option COMBINING_CHARS is on. If the option
+ is off, or if a character appears where a combining character is
+ not valid, the character is treated as unprintable.
+
+ Unprintable multibyte characters are shown as a hexadecimal number
+ between angle brackets. The number is the code point of the
+ character in the wide character set; this may or may not be
+ Unicode, depending on the operating system.
+
+Invalid multibyte characters
+ If the MULTIBYTE option is in effect, any sequence of one or more
+ bytes that does not form a valid character in the current character
+ set is treated as a series of bytes each shown as a special
+ character. This case can be distinguished from other unprintable
+ characters as the bytes are represented as two hexadecimal digits
+ between angle brackets, as distinct from the four or eight digits
+ that are used for unprintable characters that are nonetheless
+ valid in the current character set.
+
+ Not all systems support this: for it to work, the system's
+ representation of wide characters must be code values from the
+ Universal Character Set, as defined by IS0 10646 (also known as
+ Unicode).
+
+Wrapped double-width characters
+ When a double-width character appears in the final column of a
+ line, it is instead shown on the next line. The empty space left
+ in the original position is highlighted as a special character.
+
+
+If zle_highlight is not set or no value applies to a particular
+context, the defaults applied are equivalent to
+
+
+ zle_highlight=(region:standout special:standout
+ suffix:bold isearch:underline paste:standout)
+
+i.e. both the region and special characters are shown in standout mode.
+
+Within widgets, arbitrary regions may be highlighted by setting the
+special array parameter region_highlight; see *Note Zle Widgets::.
+
+
+
+
+File: zsh.info, Node: Completion Widgets, Next: Completion System, Prev: Zsh Line Editor, Up: Top
+
+19 Completion Widgets
+*********************
+
+
+
+19.1 Description
+================
+
+The shell's programmable completion mechanism can be manipulated in two
+ways; here the low-level features supporting the newer, function-based
+mechanism are defined. A complete set of shell functions based on these
+features is described in the next chapter, *Note Completion System::,
+and users with no interest in adding to that system (or, potentially,
+writing their own -- see dictionary entry for `hubris') should skip the
+current section. The older system based on the compctl builtin command
+is described in *Note Completion Using compctl::.
+
+Completion widgets are defined by the -C option to the zle builtin
+command provided by the zsh/zle module (see *Note The zsh/zle
+Module::). For example,
+
+
+ zle -C complete expand-or-complete completer
+
+defines a widget named `complete'. The second argument is the name of
+any of the builtin widgets that handle completions: complete-word,
+expand-or-complete, expand-or-complete-prefix, menu-complete,
+menu-expand-or-complete, reverse-menu-complete, list-choices, or
+delete-char-or-list. Note that this will still work even if the widget
+in question has been re-bound.
+
+When this newly defined widget is bound to a key using the bindkey
+builtin command defined in the zsh/zle module (*Note Zsh Line
+Editor::), typing that key will call the shell function `completer'.
+This function is responsible for generating the possible matches using
+the builtins described below. As with other ZLE widgets, the function
+is called with its standard input closed.
+
+Once the function returns, the completion code takes over control again
+and treats the matches in the same manner as the specified builtin
+widget, in this case expand-or-complete.
+
+
+
+* Menu:
+
+* Completion Special Parameters::
+* Completion Builtin Commands::
+* Completion Condition Codes::
+* Completion Matching Control::
+* Completion Widget Example::
+
+
+
+File: zsh.info, Node: Completion Special Parameters, Next: Completion Builtin Commands, Up: Completion Widgets
+
+19.2 Completion Special Parameters
+==================================
+
+The parameters ZLE_REMOVE_SUFFIX_CHARS and ZLE_SPACE_SUFFIX_CHARS are
+used by the completion mechanism, but are not special. See *Note
+Parameters Used By The Shell::.
+
+Inside completion widgets, and any functions called from them, some
+parameters have special meaning; outside these functions they are not
+special to the shell in any way. These parameters are used to pass
+information between the completion code and the completion widget. Some
+of the builtin commands and the condition codes use or change the
+current values of these parameters. Any existing values will be hidden
+during execution of completion widgets; except for compstate, the
+parameters are reset on each function exit (including nested function
+calls from within the completion widget) to the values they had when
+the function was entered.
+
+
+CURRENT
+ This is the number of the current word, i.e. the word the cursor is
+ currently on in the words array. Note that this value is only
+ correct if the ksharrays option is not set.
+
+IPREFIX
+ Initially this will be set to the empty string. This parameter
+ functions like PREFIX; it contains a string which precedes the one
+ in PREFIX and is not considered part of the list of matches.
+ Typically, a string is transferred from the beginning of PREFIX to
+ the end of IPREFIX, for example:
+
+
+ IPREFIX=${PREFIX%%\=*}=
+ PREFIX=${PREFIX#*=}
+
+ causes the part of the prefix up to and including the first equal
+ sign not to be treated as part of a matched string. This can be
+ done automatically by the compset builtin, see below.
+
+ISUFFIX
+ As IPREFIX, but for a suffix that should not be considered part of
+ the matches; note that the ISUFFIX string follows the SUFFIX
+ string.
+
+PREFIX
+ Initially this will be set to the part of the current word from the
+ beginning of the word up to the position of the cursor; it may be
+ altered to give a common prefix for all matches.
+
+QIPREFIX
+ This parameter is read-only and contains the quoted string up to
+ the word being completed. E.g. when completing `"foo', this
+ parameter contains the double quote. If the -q option of compset
+ is used (see below), and the original string was `"foo bar' with
+ the cursor on the `bar', this parameter contains `"foo '.
+
+QISUFFIX
+ Like QIPREFIX, but containing the suffix.
+
+SUFFIX
+ Initially this will be set to the part of the current word from the
+ cursor position to the end; it may be altered to give a common
+ suffix for all matches. It is most useful when the option
+ COMPLETE_IN_WORD is set, as otherwise the whole word on the
+ command line is treated as a prefix.
+
+compstate
+ This is an associative array with various keys and values that the
+ completion code uses to exchange information with the completion
+ widget. The keys are:
+
+
+ all_quotes
+ The -q option of the compset builtin command (see below)
+ allows a quoted string to be broken into separate words; if
+ the cursor is on one of those words, that word will be
+ completed, possibly invoking `compset -q' recursively. With
+ this key it is possible to test the types of quoted strings
+ which are currently broken into parts in this fashion. Its
+ value contains one character for each quoting level. The
+ characters are a single quote or a double quote for strings
+ quoted with these characters, a dollars sign for strings
+ quoted with $'...' and a backslash for strings not starting
+ with a quote character. The first character in the value
+ always corresponds to the innermost quoting level.
+
+ context
+ This will be set by the completion code to the overall context
+ in which completion is attempted. Possible values are:
+
+
+ array_value
+ when completing inside the value of an array parameter
+ assignment; in this case the words array contains the
+ words inside the parentheses.
+
+ brace_parameter
+ when completing the name of a parameter in a parameter
+ expansion beginning with ${. This context will also be
+ set when completing parameter flags following ${(; the
+ full command line argument is presented and the handler
+ must test the value to be completed to ascertain that
+ this is the case.
+
+ assign_parameter
+ when completing the name of a parameter in a parameter
+ assignment.
+
+ command
+ when completing for a normal command (either in command
+ position or for an argument of the command).
+
+ condition
+ when completing inside a `[[...]]' conditional
+ expression; in this case the words array contains only
+ the words inside the conditional expression.
+
+ math
+ when completing in a mathematical environment such as a
+ `((...))' construct.
+
+ parameter
+ when completing the name of a parameter in a parameter
+ expansion beginning with $ but not ${.
+
+ redirect
+ when completing after a redirection operator.
+
+ subscript
+ when completing inside a parameter subscript.
+
+ value
+ when completing the value of a parameter assignment.
+
+
+ exact
+ Controls the behaviour when the REC_EXACT option is set. It
+ will be set to accept if an exact match would be accepted,
+ and will be unset otherwise.
+
+ If it was set when at least one match equal to the string on
+ the line was generated, the match is accepted.
+
+ exact_string
+ The string of an exact match if one was found, otherwise
+ unset.
+
+ ignored
+ The number of words that were ignored because they matched
+ one of the patterns given with the -F option to the compadd
+ builtin command.
+
+ insert
+ This controls the manner in which a match is inserted into
+ the command line. On entry to the widget function, if it is
+ unset the command line is not to be changed; if set to
+ unambiguous, any prefix common to all matches is to be
+ inserted; if set to automenu-unambiguous, the common prefix
+ is to be inserted and the next invocation of the completion
+ code may start menu completion (due to the AUTO_MENU option
+ being set); if set to menu or automenu menu completion will
+ be started for the matches currently generated (in the latter
+ case this will happen because the AUTO_MENU is set). The
+ value may also contain the string `tab' when the completion
+ code would normally not really do completion, but only insert
+ the TAB character.
+
+ On exit it may be set to any of the values above (where
+ setting it to the empty string is the same as unsetting it),
+ or to a number, in which case the match whose number is given
+ will be inserted into the command line. Negative numbers
+ count backward from the last match (with `-1' selecting the
+ last match) and out-of-range values are wrapped around, so
+ that a value of zero selects the last match and a value one
+ more than the maximum selects the first. Unless the value of
+ this key ends in a space, the match is inserted as in a menu
+ completion, i.e. without automatically appending a space.
+
+ Both menu and automenu may also specify the number of the
+ match to insert, given after a colon. For example, `menu:2'
+ says to start menu completion, beginning with the second
+ match.
+
+ Note that a value containing the substring `tab' makes the
+ matches generated be ignored and only the TAB be inserted.
+
+ Finally, it may also be set to all, which makes all matches
+ generated be inserted into the line.
+
+ insert_positions
+ When the completion system inserts an unambiguous string into
+ the line, there may be multiple places where characters are
+ missing or where the character inserted differs from at least
+ one match. The value of this key contains a colon separated
+ list of all these positions, as indexes into the command line.
+
+ last_prompt
+ If this is set to a non-empty string for every match added,
+ the completion code will move the cursor back to the previous
+ prompt after the list of completions has been displayed.
+ Initially this is set or unset according to the
+ ALWAYS_LAST_PROMPT option.
+
+ list
+ This controls whether or how the list of matches will be
+ displayed. If it is unset or empty they will never be
+ listed; if its value begins with list, they will always be
+ listed; if it begins with autolist or ambiguous, they will be
+ listed when the AUTO_LIST or LIST_AMBIGUOUS options
+ respectively would normally cause them to be.
+
+ If the substring force appears in the value, this makes the
+ list be shown even if there is only one match. Normally, the
+ list would be shown only if there are at least two matches.
+
+ The value contains the substring packed if the LIST_PACKED
+ option is set. If this substring is given for all matches
+ added to a group, this group will show the LIST_PACKED
+ behavior. The same is done for the LIST_ROWS_FIRST option
+ with the substring rows.
+
+ Finally, if the value contains the string explanations, only
+ the explanation strings, if any, will be listed and if it
+ contains messages, only the messages (added with the -x
+ option of compadd) will be listed. If it contains both
+ explanations and messages both kinds of explanation strings
+ will be listed. It will be set appropriately on entry to a
+ completion widget and may be changed there.
+
+ list_lines
+ This gives the number of lines that are needed to display the
+ full list of completions. Note that to calculate the total
+ number of lines to display you need to add the number of
+ lines needed for the command line to this value, this is
+ available as the value of the BUFFERLINES special parameter.
+
+ list_max
+ Initially this is set to the value of the LISTMAX parameter.
+ It may be set to any other value; when the widget exits this
+ value will be used in the same way as the value of LISTMAX.
+
+ nmatches
+ The number of matches generated and accepted by the
+ completion code so far.
+
+ old_insert
+ On entry to the widget this will be set to the number of the
+ match of an old list of completions that is currently
+ inserted into the command line. If no match has been
+ inserted, this is unset.
+
+ As with old_list, the value of this key will only be used if
+ it is the string keep. If it was set to this value by the
+ widget and there was an old match inserted into the command
+ line, this match will be kept and if the value of the insert
+ key specifies that another match should be inserted, this
+ will be inserted after the old one.
+
+ old_list
+ This is set to yes if there is still a valid list of
+ completions from a previous completion at the time the widget
+ is invoked. This will usually be the case if and only if the
+ previous editing operation was a completion widget or one of
+ the builtin completion functions. If there is a valid list
+ and it is also currently shown on the screen, the value of
+ this key is shown.
+
+ After the widget has exited the value of this key is only
+ used if it was set to keep. In this case the completion code
+ will continue to use this old list. If the widget generated
+ new matches, they will not be used.
+
+ parameter
+ The name of the parameter when completing in a subscript or
+ in the value of a parameter assignment.
+
+ pattern_insert
+ Normally this is set to menu, which specifies that menu
+ completion will be used whenever a set of matches was
+ generated using pattern matching. If it is set to any other
+ non-empty string by the user and menu completion is not
+ selected by other option settings, the code will instead
+ insert any common prefix for the generated matches as with
+ normal completion.
+
+ pattern_match
+ Locally controls the behaviour given by the GLOB_COMPLETE
+ option. Initially it is set to `*' if and only if the option
+ is set. The completion widget may set it to this value, to
+ an empty string (which has the same effect as unsetting it),
+ or to any other non-empty string. If it is non-empty,
+ unquoted metacharacters on the command line will be treated
+ as patterns; if it is `*', then additionally a wildcard `*'
+ is assumed at the cursor position; if it is empty or unset,
+ metacharacters will be treated literally.
+
+ Note that the matcher specifications given to the compadd
+ builtin command are not used if this is set to a non-empty
+ string.
+
+ quote
+ When completing inside quotes, this contains the quotation
+ character (i.e. either a single quote, a double quote, or a
+ backtick). Otherwise it is unset.
+
+ quoting
+ When completing inside single quotes, this is set to the
+ string single; inside double quotes, the string double;
+ inside backticks, the string backtick. Otherwise it is unset.
+
+ redirect
+ The redirection operator when completing in a redirection
+ position, i.e. one of <, >, etc.
+
+ restore
+ This is set to auto before a function is entered, which
+ forces the special parameters mentioned above (words,
+ CURRENT, PREFIX, IPREFIX, SUFFIX, and ISUFFIX) to be restored
+ to their previous values when the function exits. If a
+ function unsets it or sets it to any other string, they will
+ not be restored.
+
+ to_end
+ Specifies the occasions on which the cursor is moved to the
+ end of a string when a match is inserted. On entry to a
+ widget function, it may be single if this will happen when a
+ single unambiguous match was inserted or match if it will
+ happen any time a match is inserted (for example, by menu
+ completion; this is likely to be the effect of the
+ ALWAYS_TO_END option).
+
+ On exit, it may be set to single as above. It may also be
+ set to always, or to the empty string or unset; in those
+ cases the cursor will be moved to the end of the string
+ always or never respectively. Any other string is treated as
+ match.
+
+ unambiguous
+ This key is read-only and will always be set to the common
+ (unambiguous) prefix the completion code has generated for
+ all matches added so far.
+
+ unambiguous_cursor
+ This gives the position the cursor would be placed at if the
+ common prefix in the unambiguous key were inserted, relative
+ to the value of that key. The cursor would be placed before
+ the character whose index is given by this key.
+
+ unambiguous_positions
+ This contains all positions where characters in the
+ unambiguous string are missing or where the character
+ inserted differs from at least one of the matches. The
+ positions are given as indexes into the string given by the
+ value of the unambiguous key.
+
+ vared
+ If completion is called while editing a line using the vared
+ builtin, the value of this key is set to the name of the
+ parameter given as an argument to vared. This key is only
+ set while a vared command is active.
+
+
+words
+ This array contains the words present on the command line
+ currently being edited.
+
+
+
+
+File: zsh.info, Node: Completion Builtin Commands, Next: Completion Condition Codes, Prev: Completion Special Parameters, Up: Completion Widgets
+
+19.3 Completion Builtin Commands
+================================
+
+
+compadd [ -akqQfenUl12C ] [ -F ARRAY ]
+ [-P PREFIX ] [ -S SUFFIX ]
+ [-p HIDDEN-PREFIX ] [ -s HIDDEN-SUFFIX ]
+ [-i IGNORED-PREFIX ] [ -I IGNORED-SUFFIX ]
+ [-W FILE-PREFIX ] [ -d ARRAY ]
+ [-J GROUP-NAME ] [ -X EXPLANATION ] [ -x MESSAGE ]
+ [-V GROUP-NAME ] [ -o [ ORDER ] ]
+ [-r REMOVE-CHARS ] [ -R REMOVE-FUNC ]
+ [-D ARRAY ] [ -O ARRAY ] [ -A ARRAY ]
+ [-E NUMBER ]
+ [-M MATCH-SPEC ] [ -- ] [ WORDS ... ]
+ This builtin command can be used to add matches directly and
+ control all the information the completion code stores with each
+ possible match. The return status is zero if at least one match
+ was added and non-zero if no matches were added.
+
+ The completion code breaks the string to complete into seven
+ fields in the order:
+
+
+
+ <IPRE><APRE><HPRE><WORD><HSUF><ASUF><ISUF>
+
+ The first field is an ignored prefix taken from the command line,
+ the contents of the IPREFIX parameter plus the string given with
+ the -i option. With the -U option, only the string from the -i
+ option is used. The field <APRE> is an optional prefix string
+ given with the -P option. The <HPRE> field is a string that is
+ considered part of the match but that should not be shown when
+ listing completions, given with the -p option; for example,
+ functions that do filename generation might specify a common path
+ prefix this way. <WORD> is the part of the match that should
+ appear in the list of completions, i.e. one of the WORDS given at
+ the end of the compadd command line. The suffixes <HSUF>, <ASUF>
+ and <ISUF> correspond to the prefixes <HPRE>, <APRE> and <IPRE>
+ and are given by the options -s, -S and -I, respectively.
+
+ The supported flags are:
+
+
+ -P PREFIX
+ This gives a string to be inserted before the given WORDS.
+ The string given is not considered as part of the match and
+ any shell metacharacters in it will not be quoted when the
+ string is inserted.
+
+ -S SUFFIX
+ Like -P, but gives a string to be inserted after the match.
+
+ -p HIDDEN-PREFIX
+ This gives a string that should be inserted into the command
+ line before the match but that should not appear in the list
+ of matches. Unless the -U option is given, this string must
+ be matched as part of the string on the command line.
+
+ -s HIDDEN-SUFFIX
+ Like `-p', but gives a string to insert after the match.
+
+ -i IGNORED-PREFIX
+ This gives a string to insert into the command line just
+ before any string given with the `-P' option. Without `-P'
+ the string is inserted before the string given with `-p' or
+ directly before the match.
+
+ -I IGNORED-SUFFIX
+ Like -i, but gives an ignored suffix.
+
+ -a
+ With this flag the WORDS are taken as names of arrays and the
+ possible matches are their values. If only some elements of
+ the arrays are needed, the WORDS may also contain subscripts,
+ as in `foo[2,-1]'.
+
+ -k
+ With this flag the WORDS are taken as names of associative
+ arrays and the possible matches are their keys. As for -a,
+ the WORDS may also contain subscripts, as in `foo[(R)*bar*]'.
+
+ -d ARRAY
+ This adds per-match display strings. The ARRAY should contain
+ one element per WORD given. The completion code will then
+ display the first element instead of the first WORD, and so
+ on. The ARRAY may be given as the name of an array parameter
+ or directly as a space-separated list of words in parentheses.
+
+ If there are fewer display strings than WORDS, the leftover
+ WORDS will be displayed unchanged and if there are more
+ display strings than WORDS, the leftover display strings will
+ be silently ignored.
+
+ -l
+ This option only has an effect if used together with the -d
+ option. If it is given, the display strings are listed one
+ per line, not arrayed in columns.
+
+ -o [ ORDER ]
+ This controls the order in which matches are sorted. ORDER is
+ a comma-separated list comprising the following possible
+ values. These values can be abbreviated to their initial two
+ or three characters. Note that the order forms part of the
+ group name space so matches with different orderings will not
+ be in the same group.
+
+
+ match
+ If given, the order of the output is determined by the
+ match strings; otherwise it is determined by the display
+ strings (i.e. the strings given by the -d option). This
+ is the default if `-o' is specified but the ORDER
+ argument is omitted.
+
+ nosort
+ This specifies that the matches are pre-sorted and their
+ order should be preserved. This value only makes sense
+ alone and cannot be combined with any others.
+
+ numeric
+ If the matches include numbers, sort them numerically
+ rather than lexicographically.
+
+ reverse
+ Arrange the matches backwards by reversing the sort
+ ordering.
+
+
+ -J GROUP-NAME
+ Gives the name of the group of matches the words should be
+ stored in.
+
+ -V GROUP-NAME
+ Like -J but naming an unsorted group. This option is
+ identical to the combination of -J and -o nosort.
+
+ -1
+ If given together with the -V option, makes only consecutive
+ duplicates in the group be removed. If combined with the -J
+ option, this has no visible effect. Note that groups with and
+ without this flag are in different name spaces.
+
+ -2
+ If given together with the -J or -V option, makes all
+ duplicates be kept. Again, groups with and without this flag
+ are in different name spaces.
+
+ -X EXPLANATION
+ The EXPLANATION string will be printed with the list of
+ matches, above the group currently selected.
+
+ Within the EXPLANATION, the following sequences may be used to
+ specify output attributes (see *Note Prompt Expansion::):
+ `%B', `%S', `%U', `%F', `%K' and their lower case
+ counterparts, as well as `%{...%}'. `%F', `%K' and `%{...%}'
+ take arguments in the same form as prompt expansion. (Note
+ that the sequence `%G' is not available; an argument to `%{'
+ should be used instead.) The sequence `%%' produces a
+ literal `%'.
+
+ These sequences are most often employed by users when
+ customising the format style (see *Note Completion System::),
+ but they must also be taken into account when writing
+ completion functions, as passing descriptions with unescaped
+ `%' characters to utility functions such as _arguments and
+ _message may produce unexpected results. If arbitrary text is
+ to be passed in a description, it can be escaped using e.g.
+ ${my_str//\%/%%}.
+
+ -x MESSAGE
+ Like -X, but the MESSAGE will be printed even if there are no
+ matches in the group.
+
+ -q
+ The suffix given with -S will be automatically removed if the
+ next character typed is a blank or does not insert anything,
+ or if the suffix consists of only one character and the next
+ character typed is the same character.
+
+ -r REMOVE-CHARS
+ This is a more versatile form of the -q option. The suffix
+ given with -S or the slash automatically added after
+ completing directories will be automatically removed if the
+ next character typed inserts one of the characters given in
+ the REMOVE-CHARS. This string is parsed as a characters
+ class and understands the backslash sequences used by the
+ print command. For example, `-r "a-z\t"' removes the suffix
+ if the next character typed inserts a lower case character or
+ a TAB, and `-r "^0-9"' removes the suffix if the next
+ character typed inserts anything but a digit. One extra
+ backslash sequence is understood in this string: `\-' stands
+ for all characters that insert nothing. Thus `-S "=" -q' is
+ the same as `-S "=" -r "= \t\n\-"'.
+
+ This option may also be used without the -S option; then any
+ automatically added space will be removed when one of the
+ characters in the list is typed.
+
+ -R REMOVE-FUNC
+ This is another form of the -r option. When a suffix has been
+ inserted and the completion accepted, the function
+ REMOVE-FUNC will be called after the next character typed.
+ It is passed the length of the suffix as an argument and can
+ use the special parameters available in ordinary
+ (non-completion) zle widgets (see *Note Zsh Line Editor::) to
+ analyse and modify the command line.
+
+ -f
+ If this flag is given, all of the matches built from WORDS are
+ marked as being the names of files. They are not required to
+ be actual filenames, but if they are, and the option
+ LIST_TYPES is set, the characters describing the types of the
+ files in the completion lists will be shown. This also forces
+ a slash to be added when the name of a directory is completed.
+
+ -e
+ This flag can be used to tell the completion code that the
+ matches added are parameter names for a parameter expansion.
+ This will make the AUTO_PARAM_SLASH and AUTO_PARAM_KEYS
+ options be used for the matches.
+
+ -W FILE-PREFIX
+ This string is a pathname that will be prepended to each of
+ the matches formed by the given WORDS together with any
+ prefix specified by the -p option to form a complete filename
+ for testing. Hence it is only useful if combined with the -f
+ flag, as the tests will not otherwise be performed.
+
+ -F ARRAY
+ Specifies an array containing patterns. Words matching one of
+ these patterns are ignored, i.e. not considered to be
+ possible matches.
+
+ The ARRAY may be the name of an array parameter or a list of
+ literal patterns enclosed in parentheses and quoted, as in
+ `-F "(*?.o *?.h)"'. If the name of an array is given, the
+ elements of the array are taken as the patterns.
+
+ -Q
+ This flag instructs the completion code not to quote any
+ metacharacters in the words when inserting them into the
+ command line.
+
+ -M MATCH-SPEC
+ This gives local match specifications as described below in
+ *Note Completion Matching Control::. This option may be given
+ more than once. In this case all MATCH-SPECs given are
+ concatenated with spaces between them to form the
+ specification string to use. Note that they will only be
+ used if the -U option is not given.
+
+ -n
+ Specifies that the words added are to be used as possible
+ matches, but are not to appear in the completion listing.
+
+ -U
+ If this flag is given, all words given will be accepted and
+ no matching will be done by the completion code. Normally
+ this is used in functions that do the matching themselves.
+
+ -O ARRAY
+ If this option is given, the WORDS are _not_ added to the set
+ of possible completions. Instead, matching is done as usual
+ and all of the WORDS given as arguments that match the string
+ on the command line will be stored in the array parameter
+ whose name is given as ARRAY.
+
+ -A ARRAY
+ As the -O option, except that instead of those of the WORDS
+ which match being stored in ARRAY, the strings generated
+ internally by the completion code are stored. For example,
+ with a matching specification of `-M "L:|no="', the string
+ `nof' on the command line and the string `foo' as one of the
+ WORDS, this option stores the string `nofoo' in the array,
+ whereas the -O option stores the `foo' originally given.
+
+ -D ARRAY
+ As with -O, the WORDS are not added to the set of possible
+ completions. Instead, the completion code tests whether each
+ WORD in turn matches what is on the line. If the Nth WORD
+ does not match, the Nth element of the ARRAY is removed.
+ Elements for which the corresponding WORD is matched are
+ retained.
+
+ -C
+ This option adds a special match which expands to all other
+ matches when inserted into the line, even those that are
+ added after this option is used. Together with the -d option
+ it is possible to specify a string that should be displayed
+ in the list for this special match. If no string is given,
+ it will be shown as a string containing the strings that
+ would be inserted for the other matches, truncated to the
+ width of the screen.
+
+ -E NUMBER
+ This option adds NUMBER empty matches after the WORDS have
+ been added. An empty match takes up space in completion
+ listings but will never be inserted in the line and can't be
+ selected with menu completion or menu selection. This makes
+ empty matches only useful to format completion lists and to
+ make explanatory string be shown in completion lists (since
+ empty matches can be given display strings with the -d
+ option). And because all but one empty string would
+ otherwise be removed, this option implies the -V and -2
+ options (even if an explicit -J option is given). This can be
+ important to note as it affects the name space into which
+ matches are added.
+
+ -
+ --
+ This flag ends the list of flags and options. All arguments
+ after it will be taken as the words to use as matches even if
+ they begin with hyphens.
+
+
+ Except for the -M flag, if any of these flags is given more than
+ once, the first one (and its argument) will be used.
+
+compset -p NUMBER
+compset -P [ NUMBER ] PATTERN
+compset -s NUMBER
+compset -S [ NUMBER ] PATTERN
+compset -n BEGIN [ END ]
+compset -N BEG-PAT [ END-PAT ]
+compset -q
+ This command simplifies modification of the special parameters,
+ while its return status allows tests on them to be carried out.
+
+ The options are:
+
+
+ -p NUMBER
+ If the value of the PREFIX parameter is at least NUMBER
+ characters long, the first NUMBER characters are removed from
+ it and appended to the contents of the IPREFIX parameter.
+
+ -P [ NUMBER ] PATTERN
+ If the value of the PREFIX parameter begins with anything that
+ matches the PATTERN, the matched portion is removed from
+ PREFIX and appended to IPREFIX.
+
+ Without the optional NUMBER, the longest match is taken, but
+ if NUMBER is given, anything up to the NUMBERth match is
+ moved. If the NUMBER is negative, the NUMBERth longest match
+ is moved. For example, if PREFIX contains the string `a=b=c',
+ then compset -P '*\=' will move the string `a=b=' into the
+ IPREFIX parameter, but compset -P 1 '*\=' will move only the
+ string `a='.
+
+ -s NUMBER
+ As -p, but transfer the last NUMBER characters from the value
+ of SUFFIX to the front of the value of ISUFFIX.
+
+ -S [ NUMBER ] PATTERN
+ As -P, but match the last portion of SUFFIX and transfer the
+ matched portion to the front of the value of ISUFFIX.
+
+ -n BEGIN [ END ]
+ If the current word position as specified by the parameter
+ CURRENT is greater than or equal to BEGIN, anything up to the
+ BEGINth word is removed from the words array and the value of
+ the parameter CURRENT is decremented by BEGIN.
+
+ If the optional END is given, the modification is done only if
+ the current word position is also less than or equal to END.
+ In this case, the words from position END onwards are also
+ removed from the words array.
+
+ Both BEGIN and END may be negative to count backwards from
+ the last element of the words array.
+
+ -N BEG-PAT [ END-PAT ]
+ If one of the elements of the words array before the one at
+ the index given by the value of the parameter CURRENT matches
+ the pattern BEG-PAT, all elements up to and including the
+ matching one are removed from the words array and the value
+ of CURRENT is changed to point to the same word in the
+ changed array.
+
+ If the optional pattern END-PAT is also given, and there is an
+ element in the words array matching this pattern, the
+ parameters are modified only if the index of this word is
+ higher than the one given by the CURRENT parameter (so that
+ the matching word has to be after the cursor). In this case,
+ the words starting with the one matching end-pat are also
+ removed from the words array. If words contains no word
+ matching END-PAT, the testing and modification is performed
+ as if it were not given.
+
+ -q
+ The word currently being completed is split on spaces into
+ separate words, respecting the usual shell quoting
+ conventions. The resulting words are stored in the words
+ array, and CURRENT, PREFIX, SUFFIX, QIPREFIX, and QISUFFIX
+ are modified to reflect the word part that is completed.
+
+
+ In all the above cases the return status is zero if the test
+ succeeded and the parameters were modified and non-zero otherwise.
+ This allows one to use this builtin in tests such as:
+
+
+ if compset -P '*\='; then ...
+
+ This forces anything up to and including the last equal sign to be
+ ignored by the completion code.
+
+compcall [ -TD ]
+ This allows the use of completions defined with the compctl builtin
+ from within completion widgets. The list of matches will be
+ generated as if one of the non-widget completion functions
+ (complete-word, etc.) had been called, except that only compctls
+ given for specific commands are used. To force the code to try
+ completions defined with the -T option of compctl and/or the
+ default completion (whether defined by compctl -D or the builtin
+ default) in the appropriate places, the -T and/or -D flags can be
+ passed to compcall.
+
+ The return status can be used to test if a matching compctl
+ definition was found. It is non-zero if a compctl was found and
+ zero otherwise.
+
+ Note that this builtin is defined by the zsh/compctl module.
+
+
+
+
+File: zsh.info, Node: Completion Condition Codes, Next: Completion Matching Control, Prev: Completion Builtin Commands, Up: Completion Widgets
+
+19.4 Completion Condition Codes
+===============================
+
+
+
+The following additional condition codes for use within the [[ ... ]]
+construct are available in completion widgets. These work on the
+special parameters. All of these tests can also be performed by the
+compset builtin, but in the case of the condition codes the contents of
+the special parameters are not modified.
+
+
+-prefix [ NUMBER ] PATTERN
+ true if the test for the -P option of compset would succeed.
+
+-suffix [ NUMBER ] PATTERN
+ true if the test for the -S option of compset would succeed.
+
+-after BEG-PAT
+ true if the test of the -N option with only the BEG-PAT given
+ would succeed.
+
+-between BEG-PAT END-PAT
+ true if the test for the -N option with both patterns would
+ succeed.
+
+
+
+
+File: zsh.info, Node: Completion Matching Control, Next: Completion Widget Example, Prev: Completion Condition Codes, Up: Completion Widgets
+
+19.5 Completion Matching Control
+================================
+
+It is possible by use of the -M option of the compadd builtin command
+to specify how the characters in the string to be completed (referred
+to here as the command line) map onto the characters in the list of
+matches produced by the completion code (referred to here as the trial
+completions). Note that this is not used if the command line contains a
+glob pattern and the GLOB_COMPLETE option is set or the pattern_match
+of the compstate special association is set to a non-empty string.
+
+The MATCH-SPEC given as the argument to the -M option (see *Note
+Completion Builtin Commands::) consists of one or more matching
+descriptions separated by whitespace. Each description consists of a
+letter followed by a colon and then the patterns describing which
+character sequences on the line match which character sequences in the
+trial completion. Any sequence of characters not handled in this
+fashion must match exactly, as usual.
+
+The forms of MATCH-SPEC understood are as follows. In each case, the
+form with an upper case initial character retains the string already
+typed on the command line as the final result of completion, while with
+a lower case initial character the string on the command line is changed
+into the corresponding part of the trial completion.
+
+
+m:LPAT=TPAT
+M:LPAT=TPAT
+ Here, LPAT is a pattern that matches on the command line,
+ corresponding to TPAT which matches in the trial completion.
+
+l:LANCHOR|LPAT=TPAT
+L:LANCHOR|LPAT=TPAT
+l:LANCHOR||RANCHOR=TPAT
+L:LANCHOR||RANCHOR=TPAT
+b:LPAT=TPAT
+B:LPAT=TPAT
+ These letters are for patterns that are anchored by another
+ pattern on the left side. Matching for LPAT and TPAT is as for m
+ and M, but the pattern LPAT matched on the command line must be
+ preceded by the pattern LANCHOR. The LANCHOR can be blank to
+ anchor the match to the start of the command line string;
+ otherwise the anchor can occur anywhere, but must match in both
+ the command line and trial completion strings.
+
+ If no LPAT is given but a RANCHOR is, this matches the gap between
+ substrings matched by LANCHOR and RANCHOR. Unlike LANCHOR, the
+ RANCHOR only needs to match the trial completion string.
+
+ The b and B forms are similar to l and L with an empty anchor, but
+ need to match only the beginning of the word on the command line
+ or trial completion, respectively.
+
+r:LPAT|RANCHOR=TPAT
+R:LPAT|RANCHOR=TPAT
+r:LANCHOR||RANCHOR=TPAT
+R:LANCHOR||RANCHOR=TPAT
+e:LPAT=TPAT
+E:LPAT=TPAT
+ As l, L, b and B, with the difference that the command line and
+ trial completion patterns are anchored on the right side. Here an
+ empty RANCHOR and the e and E forms force the match to the end of
+ the command line or trial completion string.
+
+x:
+ This form is used to mark the end of matching specifications:
+ subsequent specifications are ignored. In a single standalone list
+ of specifications this has no use but where matching specifications
+ are accumulated, such as from nested function calls, it can allow
+ one function to override another.
+
+
+Each LPAT, TPAT or ANCHOR is either an empty string or consists of a
+sequence of literal characters (which may be quoted with a backslash),
+question marks, character classes, and correspondence classes; ordinary
+shell patterns are not used. Literal characters match only themselves,
+question marks match any character, and character classes are formed as
+for globbing and match any character in the given set.
+
+Correspondence classes are defined like character classes, but with two
+differences: they are delimited by a pair of braces, and negated classes
+are not allowed, so the characters ! and ^ have no special meaning
+directly after the opening brace. They indicate that a range of
+characters on the line match a range of characters in the trial
+completion, but (unlike ordinary character classes) paired according to
+the corresponding position in the sequence. For example, to make any
+ASCII lower case letter on the line match the corresponding upper case
+letter in the trial completion, you can use `m:{a-z}={A-Z}' (however,
+see below for the recommended form for this). More than one pair of
+classes can occur, in which case the first class before the =
+corresponds to the first after it, and so on. If one side has more
+such classes than the other side, the superfluous classes behave like
+normal character classes. In anchor patterns correspondence classes
+also behave like normal character classes.
+
+The standard `[:NAME:]' forms described for standard shell patterns (see
+*Note Filename Generation::) may appear in correspondence classes as
+well as normal character classes. The only special behaviour in
+correspondence classes is if the form on the left and the form on the
+right are each one of [:upper:], [:lower:]. In these cases the
+character in the word and the character on the line must be the same up
+to a difference in case. Hence to make any lower case character on the
+line match the corresponding upper case character in the trial
+completion you can use `m:{[:lower:]}={[:upper:]}'. Although the
+matching system does not yet handle multibyte characters, this is likely
+to be a future extension, at which point this syntax will handle
+arbitrary alphabets; hence this form, rather than the use of explicit
+ranges, is the recommended form. In other cases `[:NAME:]' forms are
+allowed. If the two forms on the left and right are the same, the
+characters must match exactly. In remaining cases, the corresponding
+tests are applied to both characters, but they are not otherwise
+constrained; any matching character in one set goes with any matching
+character in the other set: this is equivalent to the behaviour of
+ordinary character classes.
+
+The pattern TPAT may also be one or two stars, `*' or `**'. This means
+that the pattern on the command line can match any number of characters
+in the trial completion. In this case the pattern must be anchored (on
+either side); in the case of a single star, the ANCHOR then determines
+how much of the trial completion is to be included -- only the
+characters up to the next appearance of the anchor will be matched.
+With two stars, substrings matched by the anchor can be matched, too.
+
+Examples:
+
+The keys of the options association defined by the parameter module are
+the option names in all-lower-case form, without underscores, and
+without the optional no at the beginning even though the builtins
+setopt and unsetopt understand option names with upper case letters,
+underscores, and the optional no. The following alters the matching
+rules so that the prefix no and any underscore are ignored when trying
+to match the trial completions generated and upper case letters on the
+line match the corresponding lower case letters in the words:
+
+
+ compadd -M 'L:|[nN][oO]= M:_= M:{[:upper:]}={[:lower:]}' - \
+ ${(k)options}
+
+The first part says that the pattern `[nN][oO]' at the beginning (the
+empty anchor before the pipe symbol) of the string on the line matches
+the empty string in the list of words generated by completion, so it
+will be ignored if present. The second part does the same for an
+underscore anywhere in the command line string, and the third part uses
+correspondence classes so that any upper case letter on the line
+matches the corresponding lower case letter in the word. The use of the
+upper case forms of the specification characters (L and M) guarantees
+that what has already been typed on the command line (in particular the
+prefix no) will not be deleted.
+
+Note that the use of L in the first part means that it matches only
+when at the beginning of both the command line string and the trial
+completion. I.e., the string `_NO_f' would not be completed to
+`_NO_foo', nor would `NONO_f' be completed to `NONO_foo' because of the
+leading underscore or the second `NO' on the line which makes the
+pattern fail even though they are otherwise ignored. To fix this, one
+would use `B:[nN][oO]=' instead of the first part. As described above,
+this matches at the beginning of the trial completion, independent of
+other characters or substrings at the beginning of the command line
+word which are ignored by the same or other MATCH-SPECs.
+
+The second example makes completion case insensitive. This is just the
+same as in the option example, except here we wish to retain the
+characters in the list of completions:
+
+
+ compadd -M 'm:{[:lower:]}={[:upper:]}' ...
+
+This makes lower case letters match their upper case counterparts. To
+make upper case letters match the lower case forms as well:
+
+
+ compadd -M 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' ...
+
+A nice example for the use of * patterns is partial word completion.
+Sometimes you would like to make strings like `c.s.u' complete to
+strings like `comp.source.unix', i.e. the word on the command line
+consists of multiple parts, separated by a dot in this example, where
+each part should be completed separately -- note, however, that the
+case where each part of the word, i.e. `comp', `source' and `unix' in
+this example, is to be completed from separate sets of matches is a
+different problem to be solved by the implementation of the completion
+widget. The example can be handled by:
+
+
+ compadd -M 'r:|.=* r:|=*' \
+ - comp.sources.unix comp.sources.misc ...
+
+The first specification says that LPAT is the empty string, while
+ANCHOR is a dot; TPAT is *, so this can match anything except for the
+`.' from the anchor in the trial completion word. So in `c.s.u', the
+matcher sees `c', followed by the empty string, followed by the anchor
+`.', and likewise for the second dot, and replaces the empty strings
+before the anchors, giving `c[omp].s[ources].u[nix]', where the last
+part of the completion is just as normal.
+
+With the pattern shown above, the string `c.u' could not be completed
+to `comp.sources.unix' because the single star means that no dot
+(matched by the anchor) can be skipped. By using two stars as in
+`r:|.=**', however, `c.u' could be completed to `comp.sources.unix'.
+This also shows that in some cases, especially if the anchor is a real
+pattern, like a character class, the form with two stars may result in
+more matches than one would like.
+
+The second specification is needed to make this work when the cursor is
+in the middle of the string on the command line and the option
+COMPLETE_IN_WORD is set. In this case the completion code would
+normally try to match trial completions that end with the string as
+typed so far, i.e. it will only insert new characters at the cursor
+position rather than at the end. However in our example we would like
+the code to recognise matches which contain extra characters after the
+string on the line (the `nix' in the example). Hence we say that the
+empty string at the end of the string on the line matches any characters
+at the end of the trial completion.
+
+More generally, the specification
+
+
+ compadd -M 'r:|[.,_-]=* r:|=*' ...
+
+allows one to complete words with abbreviations before any of the
+characters in the square brackets. For example, to complete
+veryverylongfile.c rather than veryverylongheader.h with the above in
+effect, you can just type very.c before attempting completion.
+
+The specifications with both a left and a right anchor are useful to
+complete partial words whose parts are not separated by some special
+character. For example, in some places strings have to be completed
+that are formed `LikeThis' (i.e. the separate parts are determined by a
+leading upper case letter) or maybe one has to complete strings with
+trailing numbers. Here one could use the simple form with only one
+anchor as in:
+
+
+ compadd -M 'r:|[[:upper:]0-9]=* r:|=*' LikeTHIS FooHoo 5foo123 5bar234
+
+But with this, the string `H' would neither complete to `FooHoo' nor to
+`LikeTHIS' because in each case there is an upper case letter before
+the `H' and that is matched by the anchor. Likewise, a `2' would not be
+completed. In both cases this could be changed by using
+`r:|[[:upper:]0-9]=**', but then `H' completes to both `LikeTHIS' and
+`FooHoo' and a `2' matches the other strings because characters can be
+inserted before every upper case letter and digit. To avoid this one
+would use:
+
+
+ compadd -M 'r:[^[:upper:]0-9]||[[:upper:]0-9]=** r:|=*' \
+ LikeTHIS FooHoo foo123 bar234
+
+By using these two anchors, a `H' matches only upper case `H's that are
+immediately preceded by something matching the left anchor
+`[^[:upper:]0-9]'. The effect is, of course, that `H' matches only the
+string `FooHoo', a `2' matches only `bar234' and so on.
+
+When using the completion system (see *Note Completion System::), users
+can define match specifications that are to be used for specific
+contexts by using the matcher and matcher-list styles. The values for
+the latter will be used everywhere.
+
+
+
+
+File: zsh.info, Node: Completion Widget Example, Prev: Completion Matching Control, Up: Completion Widgets
+
+19.6 Completion Widget Example
+==============================
+
+
+
+The first step is to define the widget:
+
+
+ zle -C complete complete-word complete-files
+
+Then the widget can be bound to a key using the bindkey builtin command:
+
+
+ bindkey '^X\t' complete
+
+After that the shell function complete-files will be invoked after
+typing control-X and TAB. The function should then generate the
+matches, e.g.:
+
+
+ complete-files () { compadd - * }
+
+This function will complete files in the current directory matching the
+current word.
+
+
+File: zsh.info, Node: Completion System, Next: Completion Using compctl, Prev: Completion Widgets, Up: Top
+
+20 Completion System
+********************
+
+
+
+20.1 Description
+================
+
+This describes the shell code for the `new' completion system, referred
+to as compsys. It is written in shell functions based on the features
+described in the previous chapter, *Note Completion Widgets::.
+
+The features are contextual, sensitive to the point at which completion
+is started. Many completions are already provided. For this reason, a
+user can perform a great many tasks without knowing any details beyond
+how to initialize the system, which is described in *Note
+Initialization::.
+
+The context that decides what completion is to be performed may be
+ * an argument or option position: these describe the position on the
+ command line at which completion is requested. For example `first
+ argument to rmdir, the word being completed names a directory';
+
+ * a special context, denoting an element in the shell's syntax. For
+ example `a word in command position' or `an array subscript'.
+
+
+A full context specification contains other elements, as we shall
+describe.
+
+Besides commands names and contexts, the system employs two more
+concepts, _styles_ and _tags_. These provide ways for the user to
+configure the system's behaviour.
+
+Tags play a dual role. They serve as a classification system for the
+matches, typically indicating a class of object that the user may need
+to distinguish. For example, when completing arguments of the ls
+command the user may prefer to try files before directories, so both of
+these are tags. They also appear as the rightmost element in a context
+specification.
+
+Styles modify various operations of the completion system, such as
+output formatting, but also what kinds of completers are used (and in
+what order), or which tags are examined. Styles may accept arguments
+and are manipulated using the zstyle command described in *Note The
+zsh/zutil Module::.
+
+In summary, tags describe _what_ the completion objects are, and style
+how they are to be completed. At various points of execution, the
+completion system checks what styles and/or tags are defined for the
+current context, and uses that to modify its behavior. The full
+description of context handling, which determines how tags and other
+elements of the context influence the behaviour of styles, is described
+in *Note Completion System Configuration::.
+
+When a completion is requested, a dispatcher function is called; see
+the description of _main_complete in the list of control functions
+below. This dispatcher decides which function should be called to
+produce the completions, and calls it. The result is passed to one or
+more _completers_, functions that implement individual completion
+strategies: simple completion, error correction, completion with error
+correction, menu selection, etc.
+
+More generally, the shell functions contained in the completion system
+are of two types:
+ * those beginning `comp' are to be called directly; there are only a
+ few of these;
+
+ * those beginning `_' are called by the completion code. The shell
+ functions of this set, which implement completion behaviour and
+ may be bound to keystrokes, are referred to as `widgets'. These
+ proliferate as new completions are required.
+
+
+
+* Menu:
+
+* Initialization::
+* Completion System Configuration::
+* Control Functions::
+* Bindable Commands::
+* Completion Functions::
+* Completion Directories::
+* Completion System Variables::
+
+
+
+File: zsh.info, Node: Initialization, Next: Completion System Configuration, Up: Completion System
+
+20.2 Initialization
+===================
+
+
+
+If the system was installed completely, it should be enough to call the
+shell function compinit from your initialization file; see the next
+section. However, the function compinstall can be run by a user to
+configure various aspects of the completion system.
+
+Usually, compinstall will insert code into .zshrc, although if that is
+not writable it will save it in another file and tell you that file's
+location. Note that it is up to you to make sure that the lines added
+to .zshrc are actually run; you may, for example, need to move them to
+an earlier place in the file if .zshrc usually returns early. So long
+as you keep them all together (including the comment lines at the start
+and finish), you can rerun compinstall and it will correctly locate and
+modify these lines. Note, however, that any code you add to this
+section by hand is likely to be lost if you rerun compinstall, although
+lines using the command `zstyle' should be gracefully handled.
+
+The new code will take effect next time you start the shell, or run
+.zshrc by hand; there is also an option to make them take effect
+immediately. However, if compinstall has removed definitions, you will
+need to restart the shell to see the changes.
+
+To run compinstall you will need to make sure it is in a directory
+mentioned in your fpath parameter, which should already be the case if
+zsh was properly configured as long as your startup files do not remove
+the appropriate directories from fpath. Then it must be autoloaded
+(`autoload -U compinstall' is recommended). You can abort the
+installation any time you are being prompted for information, and your
+.zshrc will not be altered at all; changes only take place right at the
+end, where you are specifically asked for confirmation.
+
+
+
+20.2.1 Use of compinit
+----------------------
+
+
+
+This section describes the use of compinit to initialize completion for
+the current session when called directly; if you have run compinstall
+it will be called automatically from your .zshrc.
+
+To initialize the system, the function compinit should be in a
+directory mentioned in the fpath parameter, and should be autoloaded
+(`autoload -U compinit' is recommended), and then run simply as
+`compinit'. This will define a few utility functions, arrange for all
+the necessary shell functions to be autoloaded, and will then re-define
+all widgets that do completion to use the new system. If you use the
+menu-select widget, which is part of the zsh/complist module, you
+should make sure that that module is loaded before the call to compinit
+so that that widget is also re-defined. If completion styles (see
+below) are set up to perform expansion as well as completion by
+default, and the TAB key is bound to expand-or-complete, compinit will
+rebind it to complete-word; this is necessary to use the correct form
+of expansion.
+
+Should you need to use the original completion commands, you can still
+bind keys to the old widgets by putting a `.' in front of the widget
+name, e.g. `.expand-or-complete'.
+
+To speed up the running of compinit, it can be made to produce a dumped
+configuration that will be read in on future invocations; this is the
+default, but can be turned off by calling compinit with the option -D.
+The dumped file is .zcompdump in the same directory as the startup
+files (i.e. $ZDOTDIR or $HOME); alternatively, an explicit file name
+can be given by `compinit -d DUMPFILE'. The next invocation of
+compinit will read the dumped file instead of performing a full
+initialization.
+
+If the number of completion files changes, compinit will recognise this
+and produce a new dump file. However, if the name of a function or the
+arguments in the first line of a #compdef function (as described below)
+change, it is easiest to delete the dump file by hand so that compinit
+will re-create it the next time it is run. The check performed to see
+if there are new functions can be omitted by giving the option -C. In
+this case the dump file will only be created if there isn't one already.
+
+The dumping is actually done by another function, compdump, but you
+will only need to run this yourself if you change the configuration
+(e.g. using compdef) and then want to dump the new one. The name of
+the old dumped file will be remembered for this purpose.
+
+If the parameter _compdir is set, compinit uses it as a directory where
+completion functions can be found; this is only necessary if they are
+not already in the function search path.
+
+For security reasons compinit also checks if the completion system
+would use files not owned by root or by the current user, or files in
+directories that are world- or group-writable or that are not owned by
+root or by the current user. If such files or directories are found,
+compinit will ask if the completion system should really be used. To
+avoid these tests and make all files found be used without asking, use
+the option -u, and to make compinit silently ignore all insecure files
+and directories use the option -i. This security check is skipped
+entirely when the -C option is given.
+
+The security check can be retried at any time by running the function
+compaudit. This is the same check used by compinit, but when it is
+executed directly any changes to fpath are made local to the function
+so they do not persist. The directories to be checked may be passed as
+arguments; if none are given, compaudit uses fpath and _compdir to find
+completion system directories, adding missing ones to fpath as
+necessary. To force a check of exactly the directories currently named
+in fpath, set _compdir to an empty string before calling compaudit or
+compinit.
+
+The function bashcompinit provides compatibility with bash's
+programmable completion system. When run it will define the functions,
+compgen and complete which correspond to the bash builtins with the
+same names. It will then be possible to use completion specifications
+and functions written for bash.
+
+
+
+20.2.2 Autoloaded files
+-----------------------
+
+
+
+The convention for autoloaded functions used in completion is that they
+start with an underscore; as already mentioned, the fpath/FPATH
+parameter must contain the directory in which they are stored. If zsh
+was properly installed on your system, then fpath/FPATH automatically
+contains the required directories for the standard functions.
+
+For incomplete installations, if compinit does not find enough files
+beginning with an underscore (fewer than twenty) in the search path, it
+will try to find more by adding the directory _compdir to the search
+path. If that directory has a subdirectory named Base, all
+subdirectories will be added to the path. Furthermore, if the
+subdirectory Base has a subdirectory named Core, compinit will add all
+subdirectories of the subdirectories to the path: this allows the
+functions to be in the same format as in the zsh source distribution.
+
+When compinit is run, it searches all such files accessible via
+fpath/FPATH and reads the first line of each of them. This line should
+contain one of the tags described below. Files whose first line does
+not start with one of these tags are not considered to be part of the
+completion system and will not be treated specially.
+
+The tags are:
+
+
+#compdef NAME ... [ -{p|P} PATTERN ... [ -N NAME ... ] ]
+ The file will be made autoloadable and the function defined in it
+ will be called when completing NAMEs, each of which is either the
+ name of a command whose arguments are to be completed or one of a
+ number of special contexts in the form -CONTEXT- described below.
+
+ Each NAME may also be of the form `CMD=SERVICE'. When completing
+ the command CMD, the function typically behaves as if the command
+ (or special context) SERVICE was being completed instead. This
+ provides a way of altering the behaviour of functions that can
+ perform many different completions. It is implemented by setting
+ the parameter $service when calling the function; the function may
+ choose to interpret this how it wishes, and simpler functions will
+ probably ignore it.
+
+ If the #compdef line contains one of the options -p or -P, the
+ words following are taken to be patterns. The function will be
+ called when completion is attempted for a command or context that
+ matches one of the patterns. The options -p and -P are used to
+ specify patterns to be tried before or after other completions
+ respectively. Hence -P may be used to specify default actions.
+
+ The option -N is used after a list following -p or -P; it
+ specifies that remaining words no longer define patterns. It is
+ possible to toggle between the three options as many times as
+ necessary.
+
+#compdef -k STYLE KEY-SEQUENCE ...
+ This option creates a widget behaving like the builtin widget
+ STYLE and binds it to the given KEY-SEQUENCEs, if any. The STYLE
+ must be one of the builtin widgets that perform completion, namely
+ complete-word, delete-char-or-list, expand-or-complete,
+ expand-or-complete-prefix, list-choices, menu-complete,
+ menu-expand-or-complete, or reverse-menu-complete. If the
+ zsh/complist module is loaded (see *Note The zsh/complist
+ Module::) the widget menu-select is also available.
+
+ When one of the KEY-SEQUENCEs is typed, the function in the file
+ will be invoked to generate the matches. Note that a key will not
+ be re-bound if it already was (that is, was bound to something
+ other than undefined-key). The widget created has the same name
+ as the file and can be bound to any other keys using bindkey as
+ usual.
+
+#compdef -K WIDGET-NAME STYLE KEY-SEQUENCE [ NAME STYLE SEQ ... ]
+ This is similar to -k except that only one KEY-SEQUENCE argument
+ may be given for each WIDGET-NAME STYLE pair. However, the entire
+ set of three arguments may be repeated with a different set of
+ arguments. Note in particular that the WIDGET-NAME must be
+ distinct in each set. If it does not begin with `_' this will be
+ added. The WIDGET-NAME should not clash with the name of any
+ existing widget: names based on the name of the function are most
+ useful. For example,
+
+
+ #compdef -K _foo_complete complete-word "^X^C" \
+ _foo_list list-choices "^X^D"
+
+ (all on one line) defines a widget _foo_complete for completion,
+ bound to `^X^C', and a widget _foo_list for listing, bound to
+ `^X^D'.
+
+#autoload [ OPTIONS ]
+ Functions with the #autoload tag are marked for autoloading but
+ are not otherwise treated specially. Typically they are to be
+ called from within one of the completion functions. Any OPTIONS
+ supplied will be passed to the autoload builtin; a typical use is
+ +X to force the function to be loaded immediately. Note that the
+ -U and -z flags are always added implicitly.
+
+
+The # is part of the tag name and no white space is allowed after it.
+The #compdef tags use the compdef function described below; the main
+difference is that the name of the function is supplied implicitly.
+
+The special contexts for which completion functions can be defined are:
+
+
+-array-value-
+ The right hand side of an array-assignment (`NAME=(...)')
+
+-brace-parameter-
+ The name of a parameter expansion within braces (`${...}')
+
+-assign-parameter-
+ The name of a parameter in an assignment, i.e. on the left hand
+ side of an `='
+
+-command-
+ A word in command position
+
+-condition-
+ A word inside a condition (`[[...]]')
+
+-default-
+ Any word for which no other completion is defined
+
+-equal-
+ A word beginning with an equals sign
+
+-first-
+ This is tried before any other completion function. The function
+ called may set the _compskip parameter to one of various values:
+ all: no further completion is attempted; a string containing the
+ substring patterns: no pattern completion functions will be
+ called; a string containing default: the function for the
+ `-default-' context will not be called, but functions defined for
+ commands will be.
+
+-math-
+ Inside mathematical contexts, such as `((...))'
+
+-parameter-
+ The name of a parameter expansion (`$...')
+
+-redirect-
+ The word after a redirection operator.
+
+-subscript-
+ The contents of a parameter subscript.
+
+-tilde-
+ After an initial tilde (`~'), but before the first slash in the
+ word.
+
+-value-
+ On the right hand side of an assignment.
+
+
+Default implementations are supplied for each of these contexts. In
+most cases the context -CONTEXT- is implemented by a corresponding
+function _CONTEXT, for example the context `-tilde-' and the function
+`_tilde').
+
+The contexts -redirect- and -value- allow extra context-specific
+information. (Internally, this is handled by the functions for each
+context calling the function _dispatch.) The extra information is
+added separated by commas.
+
+For the -redirect- context, the extra information is in the form
+`-redirect-,OP,COMMAND', where OP is the redirection operator and
+COMMAND is the name of the command on the line. If there is no command
+on the line yet, the COMMAND field will be empty.
+
+For the -value- context, the form is `-value-,NAME,COMMAND', where NAME
+is the name of the parameter on the left hand side of the assignment.
+In the case of elements of an associative array, for example
+`assoc=(key <TAB>', NAME is expanded to `NAME-KEY'. In certain special
+contexts, such as completing after `make CFLAGS=', the COMMAND part
+gives the name of the command, here make; otherwise it is empty.
+
+It is not necessary to define fully specific completions as the
+functions provided will try to generate completions by progressively
+replacing the elements with `-default-'. For example, when completing
+after `foo=<TAB>', _value will try the names `-value-,foo,' (note the
+empty COMMAND part), `-value-,foo,-default-'
+and`-value-,-default-,-default-', in that order, until it finds a
+function to handle the context.
+
+As an example:
+
+
+ compdef '_files -g "*.log"' '-redirect-,2>,-default-'
+
+completes files matching `*.log' after `2> <TAB>' for any command with
+no more specific handler defined.
+
+Also:
+
+
+ compdef _foo -value-,-default-,-default-
+
+specifies that _foo provides completions for the values of parameters
+for which no special function has been defined. This is usually
+handled by the function _value itself.
+
+The same lookup rules are used when looking up styles (as described
+below); for example
+
+
+ zstyle ':completion:*:*:-redirect-,2>,*:*' file-patterns '*.log'
+
+is another way to make completion after `2> <TAB>' complete files
+matching `*.log'.
+
+
+
+20.2.3 Functions
+----------------
+
+The following function is defined by compinit and may be called
+directly.
+
+
+compdef [ -ane ] FUNCTION NAME ... [ -{p|P} PATTERN ... [ -N NAME ...]]
+compdef -d NAME ...
+compdef -k [ -an ] FUNCTION STYLE KEY-SEQUENCE [ KEY-SEQUENCE ... ]
+compdef -K [ -an ] FUNCTION NAME STYLE KEY-SEQ [ NAME STYLE SEQ ... ]
+ The first form defines the FUNCTION to call for completion in the
+ given contexts as described for the #compdef tag above.
+
+ Alternatively, all the arguments may have the form `CMD=SERVICE'.
+ Here SERVICE should already have been defined by `CMD1=SERVICE'
+ lines in #compdef files, as described above. The argument for CMD
+ will be completed in the same way as SERVICE.
+
+ The FUNCTION argument may alternatively be a string containing
+ almost any shell code. If the string contains an equal sign, the
+ above will take precedence. The option -e may be used to specify
+ the first argument is to be evaluated as shell code even if it
+ contains an equal sign. The string will be executed using the
+ eval builtin command to generate completions. This provides a way
+ of avoiding having to define a new completion function. For
+ example, to complete files ending in `.h' as arguments to the
+ command foo:
+
+
+ compdef '_files -g "*.h"' foo
+
+ The option -n prevents any completions already defined for the
+ command or context from being overwritten.
+
+ The option -d deletes any completion defined for the command or
+ contexts listed.
+
+ The NAMEs may also contain -p, -P and -N options as described for
+ the #compdef tag. The effect on the argument list is identical,
+ switching between definitions of patterns tried initially,
+ patterns tried finally, and normal commands and contexts.
+
+ The parameter $_compskip may be set by any function defined for a
+ pattern context. If it is set to a value containing the substring
+ `patterns' none of the pattern-functions will be called; if it is
+ set to a value containing the substring `all', no other function
+ will be called. Setting $_compskip in this manner is of particular
+ utility when using the -p option, as otherwise the dispatcher will
+ move on to additional functions (likely the default one) after
+ calling the pattern-context one, which can mangle the display of
+ completion possibilities if not handled properly.
+
+ The form with -k defines a widget with the same name as the
+ FUNCTION that will be called for each of the KEY-SEQUENCEs; this
+ is like the #compdef -k tag. The function should generate the
+ completions needed and will otherwise behave like the builtin
+ widget whose name is given as the STYLE argument. The widgets
+ usable for this are: complete-word, delete-char-or-list,
+ expand-or-complete, expand-or-complete-prefix, list-choices,
+ menu-complete, menu-expand-or-complete, and reverse-menu-complete,
+ as well as menu-select if the zsh/complist module is loaded. The
+ option -n prevents the key being bound if it is already to bound
+ to something other than undefined-key.
+
+ The form with -K is similar and defines multiple widgets based on
+ the same FUNCTION, each of which requires the set of three
+ arguments NAME, STYLE and KEY-SEQuence, where the latter two are as
+ for -k and the first must be a unique widget name beginning with an
+ underscore.
+
+ Wherever applicable, the -a option makes the FUNCTION
+ autoloadable, equivalent to autoload -U FUNCTION.
+
+
+The function compdef can be used to associate existing completion
+functions with new commands. For example,
+
+
+ compdef _pids foo
+
+uses the function _pids to complete process IDs for the command foo.
+
+Note also the _gnu_generic function described below, which can be used
+to complete options for commands that understand the `--help' option.
+
+
+
+
+File: zsh.info, Node: Completion System Configuration, Next: Control Functions, Prev: Initialization, Up: Completion System
+
+20.3 Completion System Configuration
+====================================
+
+
+
+This section gives a short overview of how the completion system works,
+and then more detail on how users can configure how and when matches are
+generated.
+
+
+
+20.3.1 Overview
+---------------
+
+When completion is attempted somewhere on the command line the
+completion system begins building the context. The context represents
+everything that the shell knows about the meaning of the command line
+and the significance of the cursor position. This takes account of a
+number of things including the command word (such as `grep' or `zsh')
+and options to which the current word may be an argument (such as the
+`-o' option to zsh which takes a shell option as an argument).
+
+The context starts out very generic ("we are beginning a completion")
+and becomes more specific as more is learned ("the current word is in a
+position that is usually a command name" or "the current word might be a
+variable name" and so on). Therefore the context will vary during the
+same call to the completion system.
+
+This context information is condensed into a string consisting of
+multiple fields separated by colons, referred to simply as `the
+context' in the remainder of the documentation. Note that a user of
+the completion system rarely needs to compose a context string, unless
+for example a new function is being written to perform completion for a
+new command. What a user may need to do is compose a _style_ pattern,
+which is matched against a context when needed to look up
+context-sensitive options that configure the completion system.
+
+The next few paragraphs explain how a context is composed within the
+completion function suite. Following that is discussion of how _styles_
+are defined. Styles determine such things as how the matches are
+generated, similarly to shell options but with much more control. They
+are defined with the zstyle builtin command (*Note The zsh/zutil
+Module::).
+
+The context string always consists of a fixed set of fields, separated
+by colons and with a leading colon before the first. Fields which are
+not yet known are left empty, but the surrounding colons appear anyway.
+The fields are always in the order
+:completion:FUNCTION:COMPLETER:COMMAND:ARGUMENT:TAG. These have the
+following meaning:
+
+
+ * The literal string completion, saying that this style is used by
+ the completion system. This distinguishes the context from those
+ used by, for example, zle widgets and ZFTP functions.
+
+ * The FUNCTION, if completion is called from a named widget rather
+ than through the normal completion system. Typically this is
+ blank, but it is set by special widgets such as predict-on and the
+ various functions in the Widget directory of the distribution to
+ the name of that function, often in an abbreviated form.
+
+ * The COMPLETER currently active, the name of the function without
+ the leading underscore and with other underscores converted to
+ hyphens. A `completer' is in overall control of how completion is
+ to be performed; `complete' is the simplest, but other completers
+ exist to perform related tasks such as correction, or to modify
+ the behaviour of a later completer. See *Note Control Functions::
+ for more information.
+
+ * The COMMAND or a special -CONTEXT-, just at it appears following
+ the #compdef tag or the compdef function. Completion functions
+ for commands that have sub-commands usually modify this field to
+ contain the name of the command followed by a minus sign and the
+ sub-command. For example, the completion function for the cvs
+ command sets this field to cvs-add when completing arguments to
+ the add subcommand.
+
+ * The ARGUMENT; this indicates which command line or option argument
+ we are completing. For command arguments this generally takes the
+ form argument-N, where N is the number of the argument, and for
+ arguments to options the form option-OPT-N where N is the number
+ of the argument to option OPT. However, this is only the case if
+ the command line is parsed with standard UNIX-style options and
+ arguments, so many completions do not set this.
+
+ * The TAG. As described previously, tags are used to discriminate
+ between the types of matches a completion function can generate in
+ a certain context. Any completion function may use any tag name
+ it likes, but a list of the more common ones is given below.
+
+
+The context is gradually put together as the functions are executed,
+starting with the main entry point, which adds :completion: and the
+FUNCTION element if necessary. The completer then adds the COMPLETER
+element. The contextual completion adds the COMMAND and ARGUMENT
+options. Finally, the TAG is added when the types of completion are
+known. For example, the context name
+
+
+ :completion::complete:dvips:option-o-1:files
+
+says that normal completion was attempted as the first argument to the
+option -o of the command dvips:
+
+
+ dvips -o ...
+
+and the completion function will generate filenames.
+
+Usually completion will be tried for all possible tags in an order given
+by the completion function. However, this can be altered by using the
+tag-order style. Completion is then restricted to the list of given
+tags in the given order.
+
+The _complete_help bindable command shows all the contexts and tags
+available for completion at a particular point. This provides an easy
+way of finding information for tag-order and other styles. It is
+described in *Note Bindable Commands::.
+
+When looking up styles the completion system uses full context names,
+including the tag. Looking up the value of a style therefore consists
+of two things: the context, which is matched to the most specific (best
+fitting) style pattern, and the name of the style itself, which must be
+matched exactly. The following examples demonstrate that style patterns
+may be loosely defined for styles that apply broadly, or as tightly
+defined as desired for styles that apply in narrower circumstances.
+
+For example, many completion functions can generate matches in a simple
+and a verbose form and use the verbose style to decide which form
+should be used. To make all such functions use the verbose form, put
+
+
+ zstyle ':completion:*' verbose yes
+
+in a startup file (probably .zshrc). This gives the verbose style the
+value yes in every context inside the completion system, unless that
+context has a more specific definition. It is best to avoid giving the
+context as `*' in case the style has some meaning outside the
+completion system.
+
+Many such general purpose styles can be configured simply by using the
+compinstall function.
+
+A more specific example of the use of the verbose style is by the
+completion for the kill builtin. If the style is set, the builtin
+lists full job texts and process command lines; otherwise it shows the
+bare job numbers and PIDs. To turn the style off for this use only:
+
+
+ zstyle ':completion:*:*:kill:*:*' verbose no
+
+For even more control, the style can use one of the tags `jobs' or
+`processes'. To turn off verbose display only for jobs:
+
+
+ zstyle ':completion:*:*:kill:*:jobs' verbose no
+
+The -e option to zstyle even allows completion function code to appear
+as the argument to a style; this requires some understanding of the
+internals of completion functions (see *Note Completion Widgets::)).
+For example,
+
+
+ zstyle -e ':completion:*' hosts 'reply=($myhosts)'
+
+This forces the value of the hosts style to be read from the variable
+myhosts each time a host name is needed; this is useful if the value of
+myhosts can change dynamically. For another useful example, see the
+example in the description of the file-list style below. This form can
+be slow and should be avoided for commonly examined styles such as menu
+and list-rows-first.
+
+Note that the order in which styles are _defined_ does not matter; the
+style mechanism uses the most specific possible match for a particular
+style to determine the set of values. More precisely, strings are
+preferred over patterns (for example, `:completion::complete:::foo' is
+more specific than `:completion::complete:::*'), and longer patterns are
+preferred over shorter patterns.
+
+A good rule of thumb is that any completion style pattern that needs to
+include more than one wildcard (*) and that does not end in a tag name,
+should include all six colons (:), possibly surrounding additional
+wildcards.
+
+Style names like those of tags are arbitrary and depend on the
+completion function. However, the following two sections list some of
+the most common tags and styles.
+
+
+
+20.3.2 Standard Tags
+--------------------
+
+
+
+Some of the following are only used when looking up particular styles
+and do not refer to a type of match.
+
+
+accounts
+ used to look up the users-hosts style
+
+all-expansions
+ used by the _expand completer when adding the single string
+ containing all possible expansions
+
+all-files
+ for the names of all files (as distinct from a particular subset,
+ see the globbed-files tag).
+
+arguments
+ for arguments to a command
+
+arrays
+ for names of array parameters
+
+association-keys
+ for keys of associative arrays; used when completing inside a
+ subscript to a parameter of this type
+
+bookmarks
+ when completing bookmarks (e.g. for URLs and the zftp function
+ suite)
+
+builtins
+ for names of builtin commands
+
+characters
+ for single characters in arguments of commands such as stty.
+ Also used when completing character classes after an opening
+ bracket
+
+colormapids
+ for X colormap ids
+
+colors
+ for color names
+
+commands
+ for names of external commands. Also used by complex commands
+ such as cvs when completing names subcommands.
+
+contexts
+ for contexts in arguments to the zstyle builtin command
+
+corrections
+ used by the _approximate and _correct completers for possible
+ corrections
+
+cursors
+ for cursor names used by X programs
+
+default
+ used in some contexts to provide a way of supplying a default when
+ more specific tags are also valid. Note that this tag is used
+ when only the FUNCTION field of the context name is set
+
+descriptions
+ used when looking up the value of the format style to generate
+ descriptions for types of matches
+
+devices
+ for names of device special files
+
+directories
+ for names of directories -- local-directories is used instead when
+ completing arguments of cd and related builtin commands when the
+ cdpath array is set
+
+directory-stack
+ for entries in the directory stack
+
+displays
+ for X display names
+
+domains
+ for network domains
+
+email-PLUGIN
+ for email addresses from the `_email-PLUGIN' backend of
+ _email_addresses
+
+expansions
+ used by the _expand completer for individual words (as opposed to
+ the complete set of expansions) resulting from the expansion of a
+ word on the command line
+
+extensions
+ for X server extensions
+
+file-descriptors
+ for numbers of open file descriptors
+
+files
+ the generic file-matching tag used by functions completing
+ filenames
+
+fonts
+ for X font names
+
+fstypes
+ for file system types (e.g. for the mount command)
+
+functions
+ names of functions -- normally shell functions, although certain
+ commands may understand other kinds of function
+
+globbed-files
+ for filenames when the name has been generated by pattern matching
+
+groups
+ for names of user groups
+
+history-words
+ for words from the history
+
+hosts
+ for hostnames
+
+indexes
+ for array indexes
+
+jobs
+ for jobs (as listed by the `jobs' builtin)
+
+interfaces
+ for network interfaces
+
+keymaps
+ for names of zsh keymaps
+
+keysyms
+ for names of X keysyms
+
+libraries
+ for names of system libraries
+
+limits
+ for system limits
+
+local-directories
+ for names of directories that are subdirectories of the current
+ working directory when completing arguments of cd and related
+ builtin commands (compare path-directories) -- when the cdpath
+ array is unset, directories is used instead
+
+manuals
+ for names of manual pages
+
+mailboxes
+ for e-mail folders
+
+maps
+ for map names (e.g. NIS maps)
+
+messages
+ used to look up the format style for messages
+
+modifiers
+ for names of X modifiers
+
+modules
+ for modules (e.g. zsh modules)
+
+my-accounts
+ used to look up the users-hosts style
+
+named-directories
+ for named directories (you wouldn't have guessed that, would you?)
+
+names
+ for all kinds of names
+
+newsgroups
+ for USENET groups
+
+nicknames
+ for nicknames of NIS maps
+
+options
+ for command options
+
+original
+ used by the _approximate, _correct and _expand completers when
+ offering the original string as a match
+
+other-accounts
+ used to look up the users-hosts style
+
+other-files
+ for the names of any non-directory files. This is used instead of
+ all-files when the list-dirs-first style is in effect.
+
+packages
+ for packages (e.g. rpm or installed Debian packages)
+
+parameters
+ for names of parameters
+
+path-directories
+ for names of directories found by searching the cdpath array when
+ completing arguments of cd and related builtin commands (compare
+ local-directories)
+
+paths
+ used to look up the values of the expand, ambiguous and
+ special-dirs styles
+
+pods
+ for perl pods (documentation files)
+
+ports
+ for communication ports
+
+prefixes
+ for prefixes (like those of a URL)
+
+printers
+ for print queue names
+
+processes
+ for process identifiers
+
+processes-names
+ used to look up the command style when generating the names of
+ processes for killall
+
+sequences
+ for sequences (e.g. mh sequences)
+
+sessions
+ for sessions in the zftp function suite
+
+signals
+ for signal names
+
+strings
+ for strings (e.g. the replacement strings for the cd builtin
+ command)
+
+styles
+ for styles used by the zstyle builtin command
+
+suffixes
+ for filename extensions
+
+tags
+ for tags (e.g. rpm tags)
+
+targets
+ for makefile targets
+
+time-zones
+ for time zones (e.g. when setting the TZ parameter)
+
+types
+ for types of whatever (e.g. address types for the xhost command)
+
+urls
+ used to look up the urls and local styles when completing URLs
+
+users
+ for usernames
+
+values
+ for one of a set of values in certain lists
+
+variant
+ used by _pick_variant to look up the command to run when
+ determining what program is installed for a particular command
+ name.
+
+visuals
+ for X visuals
+
+warnings
+ used to look up the format style for warnings
+
+widgets
+ for zsh widget names
+
+windows
+ for IDs of X windows
+
+zsh-options
+ for shell options
+
+
+
+20.3.3 Standard Styles
+----------------------
+
+
+
+Note that the values of several of these styles represent boolean
+values. Any of the strings `true', `on', `yes', and `1' can be used
+for the value `true' and any of the strings `false', `off', `no', and
+`0' for the value `false'. The behavior for any other value is
+undefined except where explicitly mentioned. The default value may be
+either `true' or `false' if the style is not set.
+
+Some of these styles are tested first for every possible tag
+corresponding to a type of match, and if no style was found, for the
+default tag. The most notable styles of this type are menu,
+list-colors and styles controlling completion listing such as
+list-packed and last-prompt. When tested for the default tag, only the
+FUNCTION field of the context will be set so that a style using the
+default tag will normally be defined along the lines of:
+
+
+ zstyle ':completion:*:default' menu ...
+
+
+accept-exact
+ This is tested for the default tag in addition to the tags valid
+ for the current context. If it is set to `true' and any of the
+ trial matches is the same as the string on the command line, this
+ match will immediately be accepted (even if it would otherwise be
+ considered ambiguous).
+
+ When completing pathnames (where the tag used is `paths') this
+ style accepts any number of patterns as the value in addition to
+ the boolean values. Pathnames matching one of these patterns will
+ be accepted immediately even if the command line contains some
+ more partially typed pathname components and these match no file
+ under the directory accepted.
+
+ This style is also used by the _expand completer to decide if
+ words beginning with a tilde or parameter expansion should be
+ expanded. For example, if there are parameters foo and foobar,
+ the string `$foo' will only be expanded if accept-exact is set to
+ `true'; otherwise the completion system will be allowed to
+ complete $foo to $foobar. If the style is set to `continue',
+ _expand will add the expansion as a match and the completion
+ system will also be allowed to continue.
+
+accept-exact-dirs
+ This is used by filename completion. Unlike accept-exact it is a
+ boolean. By default, filename completion examines all components
+ of a path to see if there are completions of that component, even
+ if the component matches an existing directory. For example, when
+ completion after /usr/bin/, the function examines possible
+ completions to /usr.
+
+ When this style is `true', any prefix of a path that matches an
+ existing directory is accepted without any attempt to complete it
+ further. Hence, in the given example, the path /usr/bin/ is
+ accepted immediately and completion tried in that directory.
+
+ This style is also useful when completing after directories that
+ magically appear when referenced, such as ZFS .zfs directories or
+ NetApp .snapshot directories. When the style is set the shell
+ does not check for the existence of the directory within the
+ parent directory.
+
+ If you wish to inhibit this behaviour entirely, set the
+ path-completion style (see below) to `false'.
+
+add-space
+ This style is used by the _expand completer. If it is `true' (the
+ default), a space will be inserted after all words resulting from
+ the expansion, or a slash in the case of directory names. If the
+ value is `file', the completer will only add a space to names of
+ existing files. Either a boolean `true' or the value `file' may
+ be combined with `subst', in which case the completer will not add
+ a space to words generated from the expansion of a substitution of
+ the form `$(...)' or `${...}'.
+
+ The _prefix completer uses this style as a simple boolean value to
+ decide if a space should be inserted before the suffix.
+
+ambiguous
+ This applies when completing non-final components of filename
+ paths, in other words those with a trailing slash. If it is set,
+ the cursor is left after the first ambiguous component, even if
+ menu completion is in use. The style is always tested with the
+ paths tag.
+
+assign-list
+ When completing after an equals sign that is being treated as an
+ assignment, the completion system normally completes only one
+ filename. In some cases the value may be a list of filenames
+ separated by colons, as with PATH and similar parameters. This
+ style can be set to a list of patterns matching the names of such
+ parameters.
+
+ The default is to complete lists when the word on the line already
+ contains a colon.
+
+auto-description
+ If set, this style's value will be used as the description for
+ options that are not described by the completion functions, but
+ that have exactly one argument. The sequence `%d' in the value
+ will be replaced by the description for this argument. Depending
+ on personal preferences, it may be useful to set this style to
+ something like `specify: %d'. Note that this may not work for
+ some commands.
+
+avoid-completer
+ This is used by the _all_matches completer to decide if the string
+ consisting of all matches should be added to the list currently
+ being generated. Its value is a list of names of completers. If
+ any of these is the name of the completer that generated the
+ matches in this completion, the string will not be added.
+
+ The default value for this style is `_expand _old_list _correct
+ _approximate', i.e. it contains the completers for which a string
+ with all matches will almost never be wanted.
+
+cache-path
+ This style defines the path where any cache files containing dumped
+ completion data are stored. It defaults to
+ `$ZDOTDIR/.zcompcache', or `$HOME/.zcompcache' if $ZDOTDIR is not
+ defined. The completion cache will not be used unless the
+ use-cache style is set.
+
+cache-policy
+ This style defines the function that will be used to determine
+ whether a cache needs rebuilding. See the section on the
+ _cache_invalid function below.
+
+call-command
+ This style is used in the function for commands such as make and
+ ant where calling the command directly to generate matches suffers
+ problems such as being slow or, as in the case of make can
+ potentially cause actions in the makefile to be executed. If it is
+ set to `true' the command is called to generate matches. The
+ default value of this style is `false'.
+
+command
+ In many places, completion functions need to call external
+ commands to generate the list of completions. This style can be
+ used to override the command that is called in some such cases.
+ The elements of the value are joined with spaces to form a command
+ line to execute. The value can also start with a hyphen, in which
+ case the usual command will be added to the end; this is most
+ useful for putting `builtin' or `command' in front to make sure
+ the appropriate version of a command is called, for example to
+ avoid calling a shell function with the same name as an external
+ command.
+
+ As an example, the completion function for process IDs uses this
+ style with the processes tag to generate the IDs to complete and
+ the list of processes to display (if the verbose style is `true').
+ The list produced by the command should look like the output of the
+ ps command. The first line is not displayed, but is searched for
+ the string `PID' (or `pid') to find the position of the process
+ IDs in the following lines. If the line does not contain `PID',
+ the first numbers in each of the other lines are taken as the
+ process IDs to complete.
+
+ Note that the completion function generally has to call the
+ specified command for each attempt to generate the completion
+ list. Hence care should be taken to specify only commands that
+ take a short time to run, and in particular to avoid any that may
+ never terminate.
+
+command-path
+ This is a list of directories to search for commands to complete.
+ The default for this style is the value of the special parameter
+ path.
+
+commands
+ This is used by the function completing sub-commands for the system
+ initialisation scripts (residing in /etc/init.d or somewhere not
+ too far away from that). Its values give the default commands to
+ complete for those commands for which the completion function isn't
+ able to find them out automatically. The default for this style
+ are the two strings `start' and `stop'.
+
+complete
+ This is used by the _expand_alias function when invoked as a
+ bindable command. If set to `true' and the word on the command
+ line is not the name of an alias, matching alias names will be
+ completed.
+
+complete-options
+ This is used by the completer for cd, chdir and pushd. For these
+ commands a - is used to introduce a directory stack entry and
+ completion of these is far more common than completing options.
+ Hence unless the value of this style is `true' options will not be
+ completed, even after an initial -. If it is `true', options will
+ be completed after an initial - unless there is a preceding -- on
+ the command line.
+
+completer
+ The strings given as the value of this style provide the names of
+ the completer functions to use. The available completer functions
+ are described in *Note Control Functions::.
+
+ Each string may be either the name of a completer function or a
+ string of the form `FUNCTION:NAME'. In the first case the
+ COMPLETER field of the context will contain the name of the
+ completer without the leading underscore and with all other
+ underscores replaced by hyphens. In the second case the FUNCTION
+ is the name of the completer to call, but the context will contain
+ the user-defined NAME in the COMPLETER field of the context. If
+ the NAME starts with a hyphen, the string for the context will be
+ build from the name of the completer function as in the first case
+ with the NAME appended to it. For example:
+
+
+ zstyle ':completion:*' completer _complete _complete:-foo
+
+ Here, completion will call the _complete completer twice, once
+ using `complete' and once using `complete-foo' in the COMPLETER
+ field of the context. Normally, using the same completer more
+ than once only makes sense when used with the `FUNCTIONS:NAME'
+ form, because otherwise the context name will be the same in all
+ calls to the completer; possible exceptions to this rule are the
+ _ignored and _prefix completers.
+
+ The default value for this style is `_complete _ignored': only
+ completion will be done, first using the ignored-patterns style
+ and the $fignore array and then without ignoring matches.
+
+condition
+ This style is used by the _list completer function to decide if
+ insertion of matches should be delayed unconditionally. The
+ default is `true'.
+
+delimiters
+ This style is used when adding a delimiter for use with history
+ modifiers or glob qualifiers that have delimited arguments. It is
+ an array of preferred delimiters to add. Non-special characters
+ are preferred as the completion system may otherwise become
+ confused. The default list is :, +, /, -, %. The list may be
+ empty to force a delimiter to be typed.
+
+disabled
+ If this is set to `true', the _expand_alias completer and bindable
+ command will try to expand disabled aliases, too. The default is
+ `false'.
+
+domains
+ A list of names of network domains for completion. If this is not
+ set, domain names will be taken from the file /etc/resolv.conf.
+
+environ
+ The environ style is used when completing for `sudo'. It is set
+ to an array of `VAR=VALUE' assignments to be exported into the
+ local environment before the completion for the target command is
+ invoked.
+ zstyle ':completion:*:sudo::' environ \
+ PATH="/sbin:/usr/sbin:$PATH" HOME="/root"
+
+expand
+ This style is used when completing strings consisting of multiple
+ parts, such as path names.
+
+ If one of its values is the string `prefix', the partially typed
+ word from the line will be expanded as far as possible even if
+ trailing parts cannot be completed.
+
+ If one of its values is the string `suffix', matching names for
+ components after the first ambiguous one will also be added. This
+ means that the resulting string is the longest unambiguous string
+ possible. However, menu completion can be used to cycle through
+ all matches.
+
+fake
+ This style may be set for any completion context. It specifies
+ additional strings that will always be completed in that context.
+ The form of each string is `VALUE:DESCRIPTION'; the colon and
+ description may be omitted, but any literal colons in VALUE must
+ be quoted with a backslash. Any DESCRIPTION provided is shown
+ alongside the value in completion listings.
+
+ It is important to use a sufficiently restrictive context when
+ specifying fake strings. Note that the styles fake-files and
+ fake-parameters provide additional features when completing files
+ or parameters.
+
+fake-always
+ This works identically to the fake style except that the
+ ignored-patterns style is not applied to it. This makes it
+ possible to override a set of matches completely by setting the
+ ignored patterns to `*'.
+
+ The following shows a way of supplementing any tag with arbitrary
+ data, but having it behave for display purposes like a separate
+ tag. In this example we use the features of the tag-order style
+ to divide the named-directories tag into two when performing
+ completion with the standard completer complete for arguments of
+ cd. The tag named-directories-normal behaves as normal, but the
+ tag named-directories-mine contains a fixed set of directories.
+ This has the effect of adding the match group `extra directories'
+ with the given completions.
+
+
+ zstyle ':completion::complete:cd:*' tag-order \
+ 'named-directories:-mine:extra\ directories
+ named-directories:-normal:named\ directories *'
+ zstyle ':completion::complete:cd:*:named-directories-mine' \
+ fake-always mydir1 mydir2
+ zstyle ':completion::complete:cd:*:named-directories-mine' \
+ ignored-patterns '*'
+
+fake-files
+ This style is used when completing files and looked up without a
+ tag. Its values are of the form `DIR:NAMES...'. This will add
+ the NAMES (strings separated by spaces) as possible matches when
+ completing in the directory DIR, even if no such files really
+ exist. The dir may be a pattern; pattern characters or colons in
+ DIR should be quoted with a backslash to be treated literally.
+
+ This can be useful on systems that support special file systems
+ whose top-level pathnames can not be listed or generated with glob
+ patterns (but see accept-exact-dirs for a more general way of
+ dealing with this problem). It can also be used for directories
+ for which one does not have read permission.
+
+ The pattern form can be used to add a certain `magic' entry to all
+ directories on a particular file system.
+
+fake-parameters
+ This is used by the completion function for parameter names. Its
+ values are names of parameters that might not yet be set but
+ should be completed nonetheless. Each name may also be followed
+ by a colon and a string specifying the type of the parameter (like
+ `scalar', `array' or `integer'). If the type is given, the name
+ will only be completed if parameters of that type are required in
+ the particular context. Names for which no type is specified will
+ always be completed.
+
+file-list
+ This style controls whether files completed using the standard
+ builtin mechanism are to be listed with a long list similar to ls
+ -l. Note that this feature uses the shell module zsh/stat for
+ file information; this loads the builtin stat which will replace
+ any external stat executable. To avoid this the following code
+ can be included in an initialization file:
+
+
+ zmodload -i zsh/stat
+ disable stat
+
+ The style may either be set to a `true' value (or `all'), or one
+ of the values `insert' or `list', indicating that files are to be
+ listed in long format in all circumstances, or when attempting to
+ insert a file name, or when listing file names without attempting
+ to insert one.
+
+ More generally, the value may be an array of any of the above
+ values, optionally followed by =NUM. If NUM is present it gives
+ the maximum number of matches for which long listing style will be
+ used. For example,
+
+
+ zstyle ':completion:*' file-list list=20 insert=10
+
+ specifies that long format will be used when listing up to 20 files
+ or inserting a file with up to 10 matches (assuming a listing is
+ to be shown at all, for example on an ambiguous completion), else
+ short format will be used.
+
+
+ zstyle -e ':completion:*' file-list \
+ '(( ${+NUMERIC} )) && reply=(true)'
+
+ specifies that long format will be used any time a numeric
+ argument is supplied, else short format.
+
+file-patterns
+ This is used by the standard function for completing filenames,
+ _files. If the style is unset up to three tags are offered,
+ `globbed-files',`directories' and `all-files', depending on the
+ types of files expected by the caller of _files. The first two
+ (`globbed-files' and `directories') are normally offered together
+ to make it easier to complete files in sub-directories.
+
+ The file-patterns style provides alternatives to the default tags,
+ which are not used. Its value consists of elements of the form
+ `PATTERN:TAG'; each string may contain any number of such
+ specifications separated by spaces.
+
+ The PATTERN is a pattern that is to be used to generate filenames.
+ Any occurrence of the sequence `%p' is replaced by any pattern(s)
+ passed by the function calling _files. Colons in the pattern must
+ be preceded by a backslash to make them distinguishable from the
+ colon before the TAG. If more than one pattern is needed, the
+ patterns can be given inside braces, separated by commas.
+
+ The TAGs of all strings in the value will be offered by _files and
+ used when looking up other styles. Any TAGs in the same word will
+ be offered at the same time and before later words. If no `:TAG'
+ is given the `files' tag will be used.
+
+ The TAG may also be followed by an optional second colon and a
+ description, which will be used for the `%d' in the value of the
+ format style (if that is set) instead of the default description
+ supplied by the completion function. If the description given
+ here contains itself a `%d', that is replaced with the description
+ supplied by the completion function.
+
+ For example, to make the rm command first complete only names of
+ object files and then the names of all files if there is no
+ matching object file:
+
+
+ zstyle ':completion:*:*:rm:*:*' file-patterns \
+ '*.o:object-files' '%p:all-files'
+
+ To alter the default behaviour of file completion -- offer files
+ matching a pattern and directories on the first attempt, then all
+ files -- to offer only matching files on the first attempt, then
+ directories, and finally all files:
+
+
+ zstyle ':completion:*' file-patterns \
+ '%p:globbed-files' '*(-/):directories' '*:all-files'
+
+ This works even where there is no special pattern: _files matches
+ all files using the pattern `*' at the first step and stops when it
+ sees this pattern. Note also it will never try a pattern more
+ than once for a single completion attempt.
+
+ During the execution of completion functions, the EXTENDED_GLOB
+ option is in effect, so the characters `#', `~' and `^' have
+ special meanings in the patterns.
+
+file-sort
+ The standard filename completion function uses this style without
+ a tag to determine in which order the names should be listed; menu
+ completion will cycle through them in the same order. The possible
+ values are: `size' to sort by the size of the file; `links' to
+ sort by the number of links to the file; `modification' (or `time'
+ or `date') to sort by the last modification time; `access' to sort
+ by the last access time; and `inode' (or `change') to sort by the
+ last inode change time. If the style is set to any other value,
+ or is unset, files will be sorted alphabetically by name. If the
+ value contains the string `reverse', sorting is done in the
+ opposite order. If the value contains the string `follow',
+ timestamps are associated with the targets of symbolic links; the
+ default is to use the timestamps of the links themselves.
+
+file-split-chars
+ A set of characters that will cause _all_ file completions for the
+ given context to be split at the point where any of the characters
+ occurs. A typical use is to set the style to :; then everything
+ up to and including the last : in the string so far is ignored when
+ completing files. As this is quite heavy-handed, it is usually
+ preferable to update completion functions for contexts where this
+ behaviour is useful.
+
+filter
+ The ldap plugin of email address completion (see _email_addresses)
+ uses this style to specify the attributes to match against when
+ filtering entries. So for example, if the style is set to `sn',
+ matching is done against surnames. Standard LDAP filtering is
+ used so normal completion matching is bypassed. If this style is
+ not set, the LDAP plugin is skipped. You may also need to set the
+ command style to specify how to connect to your LDAP server.
+
+force-list
+ This forces a list of completions to be shown at any point where
+ listing is done, even in cases where the list would usually be
+ suppressed. For example, normally the list is only shown if there
+ are at least two different matches. By setting this style to
+ `always', the list will always be shown, even if there is only a
+ single match that will immediately be accepted. The style may also
+ be set to a number. In this case the list will be shown if there
+ are at least that many matches, even if they would all insert the
+ same string.
+
+ This style is tested for the default tag as well as for each tag
+ valid for the current completion. Hence the listing can be forced
+ only for certain types of match.
+
+format
+ If this is set for the descriptions tag, its value is used as a
+ string to display above matches in completion lists. The sequence
+ `%d' in this string will be replaced with a short description of
+ what these matches are. This string may also contain the output
+ attribute sequences understood by compadd -X (see *Note Completion
+ Widgets::).
+
+ The style is tested with each tag valid for the current completion
+ before it is tested for the descriptions tag. Hence different
+ format strings can be defined for different types of match.
+
+ Note also that some completer functions define additional
+ `%'-sequences. These are described for the completer functions
+ that make use of them.
+
+ Some completion functions display messages that may be customised
+ by setting this style for the messages tag. Here, the `%d' is
+ replaced with a message given by the completion function.
+
+ Finally, the format string is looked up with the warnings tag, for
+ use when no matches could be generated at all. In this case the
+ `%d' is replaced with the descriptions for the matches that were
+ expected separated by spaces. The sequence `%D' is replaced with
+ the same descriptions separated by newlines.
+
+ It is possible to use printf-style field width specifiers with `%d'
+ and similar escape sequences. This is handled by the zformat
+ builtin command from the zsh/zutil module, see *Note The zsh/zutil
+ Module::.
+
+glob
+ This is used by the _expand completer. If it is set to `true'
+ (the default), globbing will be attempted on the words resulting
+ from a previous substitution (see the substitute style) or else
+ the original string from the line.
+
+global
+ If this is set to `true' (the default), the _expand_alias
+ completer and bindable command will try to expand global aliases.
+
+group-name
+ The completion system can group different types of matches, which
+ appear in separate lists. This style can be used to give the
+ names of groups for particular tags. For example, in command
+ position the completion system generates names of builtin and
+ external commands, names of aliases, shell functions and
+ parameters and reserved words as possible completions. To have
+ the external commands and shell functions listed separately:
+
+
+ zstyle ':completion:*:*:-command-:*:commands' \
+ group-name commands
+ zstyle ':completion:*:*:-command-:*:functions' \
+ group-name functions
+
+ As a consequence, any match with the same tag will be displayed in
+ the same group.
+
+ If the name given is the empty string the name of the tag for the
+ matches will be used as the name of the group. So, to have all
+ different types of matches displayed separately, one can just set:
+
+
+ zstyle ':completion:*' group-name ''
+
+ All matches for which no group name is defined will be put in a
+ group named -default-.
+
+group-order
+ This style is additional to the group-name style to specify the
+ order for display of the groups defined by that style (compare
+ tag-order, which determines which completions appear at all). The
+ groups named are shown in the given order; any other groups are
+ shown in the order defined by the completion function.
+
+ For example, to have names of builtin commands, shell functions and
+ external commands appear in that order when completing in command
+ position:
+
+
+ zstyle ':completion:*:*:-command-:*:*' group-order \
+ builtins functions commands
+
+groups
+ A list of names of UNIX groups. If this is not set, group names
+ are taken from the YP database or the file `/etc/group'.
+
+hidden
+ If this is set to `true', matches for the given context will not
+ be listed, although any description for the matches set with the
+ format style will be shown. If it is set to `all', not even the
+ description will be displayed.
+
+ Note that the matches will still be completed; they are just not
+ shown in the list. To avoid having matches considered as possible
+ completions at all, the tag-order style can be modified as
+ described below.
+
+hosts
+ A list of names of hosts that should be completed. If this is not
+ set, hostnames are taken from the file `/etc/hosts'.
+
+hosts-ports
+ This style is used by commands that need or accept hostnames and
+ network ports. The strings in the value should be of the form
+ `HOST:PORT'. Valid ports are determined by the presence of
+ hostnames; multiple ports for the same host may appear.
+
+ignore-line
+ This is tested for each tag valid for the current completion. If
+ it is set to `true', none of the words that are already on the line
+ will be considered as possible completions. If it is set to
+ `current', the word the cursor is on will not be considered as a
+ possible completion. The value `current-shown' is similar but only
+ applies if the list of completions is currently shown on the
+ screen. Finally, if the style is set to `other', all words on the
+ line except for the current one will be excluded from the possible
+ completions.
+
+ The values `current' and `current-shown' are a bit like the
+ opposite of the accept-exact style: only strings with missing
+ characters will be completed.
+
+ Note that you almost certainly don't want to set this to `true' or
+ `other' for a general context such as `:completion:*'. This is
+ because it would disallow completion of, for example, options
+ multiple times even if the command in question accepts the option
+ more than once.
+
+ignore-parents
+ The style is tested without a tag by the function completing
+ pathnames in order to determine whether to ignore the names of
+ directories already mentioned in the current word, or the name of
+ the current working directory. The value must include one or both
+ of the following strings:
+
+
+ parent
+ The name of any directory whose path is already contained in
+ the word on the line is ignored. For example, when
+ completing after foo/../, the directory foo will not be
+ considered a valid completion.
+
+ pwd
+ The name of the current working directory will not be
+ completed; hence, for example, completion after ../ will not
+ use the name of the current directory.
+
+
+ In addition, the value may include one or both of:
+
+
+ ..
+ Ignore the specified directories only when the word on the
+ line contains the substring `../'.
+
+ directory
+ Ignore the specified directories only when names of
+ directories are completed, not when completing names of files.
+
+
+ Excluded values act in a similar fashion to values of the
+ ignored-patterns style, so they can be restored to consideration by
+ the _ignored completer.
+
+extra-verbose
+ If set, the completion listing is more verbose at the cost of a
+ probable decrease in completion speed. Completion performance
+ will suffer if this style is set to `true'.
+
+ignored-patterns
+ A list of patterns; any trial completion matching one of the
+ patterns will be excluded from consideration. The _ignored
+ completer can appear in the list of completers to restore the
+ ignored matches. This is a more configurable version of the shell
+ parameter $fignore.
+
+ Note that the EXTENDED_GLOB option is set during the execution of
+ completion functions, so the characters `#', `~' and `^' have
+ special meanings in the patterns.
+
+insert
+ This style is used by the _all_matches completer to decide whether
+ to insert the list of all matches unconditionally instead of
+ adding the list as another match.
+
+insert-ids
+ When completing process IDs, for example as arguments to the kill
+ and wait builtins the name of a command may be converted to the
+ appropriate process ID. A problem arises when the process name
+ typed is not unique. By default (or if this style is set
+ explicitly to `menu') the name will be converted immediately to a
+ set of possible IDs, and menu completion will be started to cycle
+ through them.
+
+ If the value of the style is `single', the shell will wait until
+ the user has typed enough to make the command unique before
+ converting the name to an ID; attempts at completion will be
+ unsuccessful until that point. If the value is any other string,
+ menu completion will be started when the string typed by the user
+ is longer than the common prefix to the corresponding IDs.
+
+insert-tab
+ If this is set to `true', the completion system will insert a TAB
+ character (assuming that was used to start completion) instead of
+ performing completion when there is no non-blank character to the
+ left of the cursor. If it is set to `false', completion will be
+ done even there.
+
+ The value may also contain the substrings `pending' or
+ `pending=VAL'. In this case, the typed character will be inserted
+ instead of starting completion when there is unprocessed input
+ pending. If a VAL is given, completion will not be done if there
+ are at least that many characters of unprocessed input. This is
+ often useful when pasting characters into a terminal. Note
+ however, that it relies on the $PENDING special parameter from the
+ zsh/zle module being set properly which is not guaranteed on all
+ platforms.
+
+ The default value of this style is `true' except for completion
+ within vared builtin command where it is `false'.
+
+insert-unambiguous
+ This is used by the _match and _approximate completers. These
+ completers are often used with menu completion since the word typed
+ may bear little resemblance to the final completion. However, if
+ this style is `true', the completer will start menu completion
+ only if it could find no unambiguous initial string at least as
+ long as the original string typed by the user.
+
+ In the case of the _approximate completer, the completer field in
+ the context will already have been set to one of correct-NUM or
+ approximate-NUM, where NUM is the number of errors that were
+ accepted.
+
+ In the case of the _match completer, the style may also be set to
+ the string `pattern'. Then the pattern on the line is left
+ unchanged if it does not match unambiguously.
+
+gain-privileges
+ If set to true, this style enables the use of commands like sudo
+ or doas to gain extra privileges when retrieving information for
+ completion. This is only done when a command such as sudo appears
+ on the command-line. To force the use of, e.g. sudo or to override
+ any prefix that might be added due to gain-privileges, the command
+ style can be used with a value that begins with a hyphen.
+
+keep-prefix
+ This style is used by the _expand completer. If it is `true', the
+ completer will try to keep a prefix containing a tilde or parameter
+ expansion. Hence, for example, the string `~/f*' would be
+ expanded to `~/foo' instead of `/home/user/foo'. If the style is
+ set to `changed' (the default), the prefix will only be left
+ unchanged if there were other changes between the expanded words
+ and the original word from the command line. Any other value
+ forces the prefix to be expanded unconditionally.
+
+ The behaviour of _expand when this style is `true' is to cause
+ _expand to give up when a single expansion with the restored
+ prefix is the same as the original; hence any remaining completers
+ may be called.
+
+last-prompt
+ This is a more flexible form of the ALWAYS_LAST_PROMPT option. If
+ it is `true', the completion system will try to return the cursor
+ to the previous command line after displaying a completion list.
+ It is tested for all tags valid for the current completion, then
+ the default tag. The cursor will be moved back to the previous
+ line if this style is `true' for all types of match. Note that
+ unlike the ALWAYS_LAST_PROMPT option this is independent of the
+ numeric argument.
+
+known-hosts-files
+ This style should contain a list of files to search for host names
+ and (if the use-ip style is set) IP addresses in a format
+ compatible with ssh known_hosts files. If it is not set, the files
+ /etc/ssh/ssh_known_hosts and ~/.ssh/known_hosts are used.
+
+list
+ This style is used by the _history_complete_word bindable command.
+ If it is set to `true' it has no effect. If it is set to `false'
+ matches will not be listed. This overrides the setting of the
+ options controlling listing behaviour, in particular AUTO_LIST.
+ The context always starts with `:completion:history-words'.
+
+list-colors
+ If the zsh/complist module is loaded, this style can be used to set
+ color specifications. This mechanism replaces the use of the
+ ZLS_COLORS and ZLS_COLOURS parameters described in *Note The
+ zsh/complist Module::, but the syntax is the same.
+
+ If this style is set for the default tag, the strings in the value
+ are taken as specifications that are to be used everywhere. If it
+ is set for other tags, the specifications are used only for
+ matches of the type described by the tag. For this to work best,
+ the group-name style must be set to an empty string.
+
+ In addition to setting styles for specific tags, it is also
+ possible to use group names specified explicitly by the group-name
+ tag together with the `(group)' syntax allowed by the ZLS_COLORS
+ and ZLS_COLOURS parameters and simply using the default tag.
+
+ It is possible to use any color specifications already set up for
+ the GNU version of the ls command:
+
+
+ zstyle ':completion:*:default' list-colors \
+ ${(s.:.)LS_COLORS}
+
+ The default colors are the same as for the GNU ls command and can
+ be obtained by setting the style to an empty string (i.e. '').
+
+list-dirs-first
+ This is used by file completion. If set, directories to be
+ completed are listed separately from and before completion for
+ other files, regardless of tag ordering. In addition, the tag
+ other-files is used in place of all-files for the remaining files,
+ to indicate that no directories are presented with that tag.
+
+list-grouped
+ If this style is `true' (the default), the completion system will
+ try to make certain completion listings more compact by grouping
+ matches. For example, options for commands that have the same
+ description (shown when the verbose style is set to `true') will
+ appear as a single entry. However, menu selection can be used to
+ cycle through all the matches.
+
+list-packed
+ This is tested for each tag valid in the current context as well
+ as the default tag. If it is set to `true', the corresponding
+ matches appear in listings as if the LIST_PACKED option were set.
+ If it is set to `false', they are listed normally.
+
+list-prompt
+ If this style is set for the default tag, completion lists that
+ don't fit on the screen can be scrolled (see *Note The
+ zsh/complist Module::). The value, if not the empty string, will
+ be displayed after every screenful and the shell will prompt for a
+ key press; if the style is set to the empty string, a default
+ prompt will be used.
+
+ The value may contain the escape sequences: `%l' or `%L', which
+ will be replaced by the number of the last line displayed and the
+ total number of lines; `%m' or `%M', the number of the last match
+ shown and the total number of matches; and `%p' and `%P', `Top'
+ when at the beginning of the list, `Bottom' when at the end and the
+ position shown as a percentage of the total length otherwise. In
+ each case the form with the uppercase letter will be replaced by a
+ string of fixed width, padded to the right with spaces, while the
+ lowercase form will be replaced by a variable width string. As in
+ other prompt strings, the escape sequences `%S', `%s', `%B', `%b',
+ `%U', `%u' for entering and leaving the display modes standout,
+ bold and underline, and `%F', `%f', `%K', `%k' for changing the
+ foreground background colour, are also available, as is the form
+ `%{...%}' for enclosing escape sequences which display with zero
+ (or, with a numeric argument, some other) width.
+
+ After deleting this prompt the variable LISTPROMPT should be unset
+ for the removal to take effect.
+
+list-rows-first
+ This style is tested in the same way as the list-packed style and
+ determines whether matches are to be listed in a rows-first
+ fashion as if the LIST_ROWS_FIRST option were set.
+
+list-suffixes
+ This style is used by the function that completes filenames. If
+ it is `true', and completion is attempted on a string containing
+ multiple partially typed pathname components, all ambiguous
+ components will be shown. Otherwise, completion stops at the
+ first ambiguous component.
+
+list-separator
+ The value of this style is used in completion listing to separate
+ the string to complete from a description when possible (e.g. when
+ completing options). It defaults to `--' (two hyphens).
+
+local
+ This is for use with functions that complete URLs for which the
+ corresponding files are available directly from the file system.
+ Its value should consist of three strings: a hostname, the path to
+ the default web pages for the server, and the directory name used
+ by a user placing web pages within their home area.
+
+ For example:
+
+
+ zstyle ':completion:*' local toast \
+ /var/http/public/toast public_html
+
+ Completion after `http://toast/stuff/' will look for files in the
+ directory /var/http/public/toast/stuff, while completion after
+ `http://toast/~yousir/' will look for files in the directory
+ ~yousir/public_html.
+
+mail-directory
+ If set, zsh will assume that mailbox files can be found in the
+ directory specified. It defaults to `~/Mail'.
+
+match-original
+ This is used by the _match completer. If it is set to only,
+ _match will try to generate matches without inserting a `*' at the
+ cursor position. If set to any other non-empty value, it will
+ first try to generate matches without inserting the `*' and if
+ that yields no matches, it will try again with the `*' inserted.
+ If it is unset or set to the empty string, matching will only be
+ performed with the `*' inserted.
+
+matcher
+ This style is tested separately for each tag valid in the current
+ context. Its value is placed before any match specifications
+ given by the matcher-list style so can override them via the use
+ of an x: specification. The value should be in the form described
+ in *Note Completion Matching Control::. For examples of this, see
+ the description of the tag-order style.
+
+ For notes comparing the use of this and the matcher-list style, see
+ under the description of the tag-order style.
+
+matcher-list
+ This style can be set to a list of match specifications that are to
+ be applied everywhere. Match specifications are described in *Note
+ Completion Matching Control::. The completion system will try
+ them one after another for each completer selected. For example,
+ to try first simple completion and, if that generates no matches,
+ case-insensitive completion:
+
+
+ zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'
+
+ By default each specification replaces the previous one; however,
+ if a specification is prefixed with +, it is added to the existing
+ list. Hence it is possible to create increasingly general
+ specifications without repetition:
+
+
+ zstyle ':completion:*' matcher-list \
+ '' '+m:{a-z}={A-Z}' '+m:{A-Z}={a-z}'
+
+ It is possible to create match specifications valid for particular
+ completers by using the third field of the context. This applies
+ only to completers that override the global matcher-list, which as
+ of this writing includes only _prefix and _ignored. For example,
+ to use the completers _complete and _prefix but allow
+ case-insensitive completion only with _complete:
+
+
+ zstyle ':completion:*' completer _complete _prefix
+ zstyle ':completion:*:complete:*:*:*' matcher-list \
+ '' 'm:{a-zA-Z}={A-Za-z}'
+
+ User-defined names, as explained for the completer style, are
+ available. This makes it possible to try the same completer more
+ than once with different match specifications each time. For
+ example, to try normal completion without a match specification,
+ then normal completion with case-insensitive matching, then
+ correction, and finally partial-word completion:
+
+
+ zstyle ':completion:*' completer \
+ _complete _correct _complete:foo
+ zstyle ':completion:*:complete:*:*:*' matcher-list \
+ '' 'm:{a-zA-Z}={A-Za-z}'
+ zstyle ':completion:*:foo:*:*:*' matcher-list \
+ 'm:{a-zA-Z}={A-Za-z} r:|[-_./]=* r:|=*'
+
+ If the style is unset in any context no match specification is
+ applied. Note also that some completers such as _correct and
+ _approximate do not use the match specifications at all, though
+ these completers will only ever be called once even if the
+ matcher-list contains more than one element.
+
+ Where multiple specifications are useful, note that the _entire_
+ completion is done for each element of matcher-list, which can
+ quickly reduce the shell's performance. As a rough rule of thumb,
+ one to three strings will give acceptable performance. On the
+ other hand, putting multiple space-separated values into the same
+ string does not have an appreciable impact on performance.
+
+ If there is no current matcher or it is empty, and the option
+ NO_CASE_GLOB is in effect, the matching for files is performed
+ case-insensitively in any case. However, any matcher must
+ explicitly specify case-insensitive matching if that is required.
+
+ For notes comparing the use of this and the matcher style, see
+ under the description of the tag-order style.
+
+max-errors
+ This is used by the _approximate and _correct completer functions
+ to determine the maximum number of errors to allow. The completer
+ will try to generate completions by first allowing one error, then
+ two errors, and so on, until either a match or matches were found
+ or the maximum number of errors given by this style has been
+ reached.
+
+ If the value for this style contains the string `numeric', the
+ completer function will take any numeric argument as the maximum
+ number of errors allowed. For example, with
+
+
+ zstyle ':completion:*:approximate:::' max-errors 2 numeric
+
+ two errors are allowed if no numeric argument is given, but with a
+ numeric argument of six (as in `ESC-6 TAB'), up to six errors are
+ accepted. Hence with a value of `0 numeric', no correcting
+ completion will be attempted unless a numeric argument is given.
+
+ If the value contains the string `not-numeric', the completer will
+ _not_ try to generate corrected completions when given a numeric
+ argument, so in this case the number given should be greater than
+ zero. For example, `2 not-numeric' specifies that correcting
+ completion with two errors will usually be performed, but if a
+ numeric argument is given, correcting completion will not be
+ performed.
+
+ The default value for this style is `2 numeric'.
+
+max-matches-width
+ This style is used to determine the trade off between the width of
+ the display used for matches and the width used for their
+ descriptions when the verbose style is in effect. The value gives
+ the number of display columns to reserve for the matches. The
+ default is half the width of the screen.
+
+ This has the most impact when several matches have the same
+ description and so will be grouped together. Increasing the style
+ will allow more matches to be grouped together; decreasing it will
+ allow more of the description to be visible.
+
+menu
+ If this is `true' in the context of any of the tags defined for
+ the current completion menu completion will be used. The value for
+ a specific tag will take precedence over that for the `default'
+ tag.
+
+ If none of the values found in this way is `true' but at least one
+ is set to `auto', the shell behaves as if the AUTO_MENU option is
+ set.
+
+ If one of the values is explicitly set to `false', menu completion
+ will be explicitly turned off, overriding the MENU_COMPLETE option
+ and other settings.
+
+ In the form `yes=NUM', where `yes' may be any of the `true' values
+ (`yes', `true', `on' and `1'), menu completion will be turned on
+ if there are at least NUM matches. In the form `yes=long', menu
+ completion will be turned on if the list does not fit on the
+ screen. This does not activate menu completion if the widget
+ normally only lists completions, but menu completion can be
+ activated in that case with the value `yes=long-list' (Typically,
+ the value `select=long-list' described later is more useful as it
+ provides control over scrolling.)
+
+ Similarly, with any of the `false' values (as in `no=10'), menu
+ completion will _not_ be used if there are NUM or more matches.
+
+ The value of this widget also controls menu selection, as
+ implemented by the zsh/complist module. The following values may
+ appear either alongside or instead of the values above.
+
+ If the value contains the string `select', menu selection will be
+ started unconditionally.
+
+ In the form `select=NUM', menu selection will only be started if
+ there are at least NUM matches. If the values for more than one
+ tag provide a number, the smallest number is taken.
+
+ Menu selection can be turned off explicitly by defining a value
+ containing the string`no-select'.
+
+ It is also possible to start menu selection only if the list of
+ matches does not fit on the screen by using the value
+ `select=long'. To start menu selection even if the current widget
+ only performs listing, use the value `select=long-list'.
+
+ To turn on menu completion or menu selection when there are a
+ certain number of matches _or_ the list of matches does not fit on
+ the screen, both of `yes=' and `select=' may be given twice, once
+ with a number and once with `long' or `long-list'.
+
+ Finally, it is possible to activate two special modes of menu
+ selection. The word `interactive' in the value causes interactive
+ mode to be entered immediately when menu selection is started; see
+ *Note The zsh/complist Module:: for a description of interactive
+ mode. Including the string `search' does the same for incremental
+ search mode. To select backward incremental search, include the
+ string `search-backward'.
+
+muttrc
+ If set, gives the location of the mutt configuration file. It
+ defaults to `~/.muttrc'.
+
+numbers
+ This is used with the jobs tag. If it is `true', the shell will
+ complete job numbers instead of the shortest unambiguous prefix of
+ the job command text. If the value is a number, job numbers will
+ only be used if that many words from the job descriptions are
+ required to resolve ambiguities. For example, if the value is
+ `1', strings will only be used if all jobs differ in the first
+ word on their command lines.
+
+old-list
+ This is used by the _oldlist completer. If it is set to `always',
+ then standard widgets which perform listing will retain the
+ current list of matches, however they were generated; this can be
+ turned off explicitly with the value `never', giving the behaviour
+ without the _oldlist completer. If the style is unset, or any
+ other value, then the existing list of completions is displayed if
+ it is not already; otherwise, the standard completion list is
+ generated; this is the default behaviour of _oldlist. However, if
+ there is an old list and this style contains the name of the
+ completer function that generated the list, then the old list will
+ be used even if it was generated by a widget which does not do
+ listing.
+
+ For example, suppose you type ^Xc to use the _correct_word widget,
+ which generates a list of corrections for the word under the
+ cursor. Usually, typing ^D would generate a standard list of
+ completions for the word on the command line, and show that. With
+ _oldlist, it will instead show the list of corrections already
+ generated.
+
+ As another example consider the _match completer: with the
+ insert-unambiguous style set to `true' it inserts only a common
+ prefix string, if there is any. However, this may remove parts of
+ the original pattern, so that further completion could produce
+ more matches than on the first attempt. By using the _oldlist
+ completer and setting this style to _match, the list of matches
+ generated on the first attempt will be used again.
+
+old-matches
+ This is used by the _all_matches completer to decide if an old
+ list of matches should be used if one exists. This is selected by
+ one of the `true' values or by the string `only'. If the value is
+ `only', _all_matches will only use an old list and won't have any
+ effect on the list of matches currently being generated.
+
+ If this style is set it is generally unwise to call the
+ _all_matches completer unconditionally. One possible use is for
+ either this style or the completer style to be defined with the -e
+ option to zstyle to make the style conditional.
+
+old-menu
+ This is used by the _oldlist completer. It controls how menu
+ completion behaves when a completion has already been inserted and
+ the user types a standard completion key such as TAB. The default
+ behaviour of _oldlist is that menu completion always continues
+ with the existing list of completions. If this style is set to
+ `false', however, a new completion is started if the old list was
+ generated by a different completion command; this is the behaviour
+ without the _oldlist completer.
+
+ For example, suppose you type ^Xc to generate a list of
+ corrections, and menu completion is started in one of the usual
+ ways. Usually, or with this style set to `false', typing TAB at
+ this point would start trying to complete the line as it now
+ appears. With _oldlist, it instead continues to cycle through the
+ list of corrections.
+
+original
+ This is used by the _approximate and _correct completers to decide
+ if the original string should be added as a possible completion.
+ Normally, this is done only if there are at least two possible
+ corrections, but if this style is set to `true', it is always
+ added. Note that the style will be examined with the completer
+ field in the context name set to correct-NUM or approximate-NUM,
+ where NUM is the number of errors that were accepted.
+
+packageset
+ This style is used when completing arguments of the Debian `dpkg'
+ program. It contains an override for the default package set for
+ a given context. For example,
+
+
+ zstyle ':completion:*:complete:dpkg:option--status-1:*' \
+ packageset avail
+
+ causes available packages, rather than only installed packages, to
+ be completed for `dpkg --status'.
+
+path
+ The function that completes color names uses this style with the
+ colors tag. The value should be the pathname of a file containing
+ color names in the format of an X11 rgb.txt file. If the style is
+ not set but this file is found in one of various standard
+ locations it will be used as the default.
+
+path-completion
+ This is used by filename completion. By default, filename
+ completion examines all components of a path to see if there are
+ completions of that component. For example, /u/b/z can be
+ completed to /usr/bin/zsh. Explicitly setting this style to
+ `false' inhibits this behaviour for path components up to the /
+ before the cursor; this overrides the setting of accept-exact-dirs.
+
+ Even with the style set to `false', it is still possible to
+ complete multiple paths by setting the option COMPLETE_IN_WORD and
+ moving the cursor back to the first component in the path to be
+ completed. For example, /u/b/z can be completed to /usr/bin/zsh
+ if the cursor is after the /u.
+
+pine-directory
+ If set, specifies the directory containing PINE mailbox files.
+ There is no default, since recursively searching this directory is
+ inconvenient for anyone who doesn't use PINE.
+
+ports
+ A list of Internet service names (network ports) to complete. If
+ this is not set, service names are taken from the file
+ `/etc/services'.
+
+prefix-hidden
+ This is used for certain completions which share a common prefix,
+ for example command options beginning with dashes. If it is
+ `true', the prefix will not be shown in the list of matches.
+
+ The default value for this style is `false'.
+
+prefix-needed
+ This style is also relevant for matches with a common prefix. If
+ it is set to `true' this common prefix must be typed by the user
+ to generate the matches.
+
+ The style is applicable to the options, signals, jobs, functions,
+ and parameters completion tags.
+
+ For command options, this means that the initial `-', `+', or `--'
+ must be typed explicitly before option names will be completed.
+
+ For signals, an initial `-' is required before signal names will
+ be completed.
+
+ For jobs, an initial `%' is required before job names will be
+ completed.
+
+ For function and parameter names, an initial `_' or `.' is
+ required before function or parameter names starting with those
+ characters will be completed.
+
+ The default value for this style is `false' for function and
+ parameter completions, and `true' otherwise.
+
+preserve-prefix
+ This style is used when completing path names. Its value should
+ be a pattern matching an initial prefix of the word to complete
+ that should be left unchanged under all circumstances. For
+ example, on some Unices an initial `//' (double slash) has a
+ special meaning; setting this style to the string `//' will
+ preserve it. As another example, setting this style to `?:/'
+ under Cygwin would allow completion after `a:/...' and so on.
+
+range
+ This is used by the _history completer and the
+ _history_complete_word bindable command to decide which words
+ should be completed.
+
+ If it is a single number, only the last N words from the history
+ will be completed.
+
+ If it is a range of the form `MAX:SLICE', the last SLICE words
+ will be completed; then if that yields no matches, the SLICE words
+ before those will be tried and so on. This process stops either
+ when at least one match has been found, or MAX words have been
+ tried.
+
+ The default is to complete all words from the history at once.
+
+recursive-files
+ If this style is set, its value is an array of patterns to be
+ tested against `$PWD/': note the trailing slash, which allows
+ directories in the pattern to be delimited unambiguously by
+ including slashes on both sides. If an ordinary file completion
+ fails and the word on the command line does not yet have a
+ directory part to its name, the style is retrieved using the same
+ tag as for the completion just attempted, then the elements tested
+ against $PWD/ in turn. If one matches, then the shell reattempts
+ completion by prepending the word on the command line with each
+ directory in the expansion of **/*(/) in turn. Typically the
+ elements of the style will be set to restrict the number of
+ directories beneath the current one to a manageable number, for
+ example `*/.git/*'.
+
+ For example,
+
+
+ zstyle ':completion:*' recursive-files '*/zsh/*'
+
+ If the current directory is /home/pws/zsh/Src, then zle_tr_TAB_
+ can be completed to Zle/zle_tricky.c.
+
+regular
+ This style is used by the _expand_alias completer and bindable
+ command. If set to `true' (the default), regular aliases will be
+ expanded but only in command position. If it is set to `false',
+ regular aliases will never be expanded. If it is set to `always',
+ regular aliases will be expanded even if not in command position.
+
+rehash
+ If this is set when completing external commands, the internal
+ list (hash) of commands will be updated for each search by issuing
+ the rehash command. There is a speed penalty for this which is
+ only likely to be noticeable when directories in the path have
+ slow file access.
+
+remote-access
+ If set to `false', certain commands will be prevented from making
+ Internet connections to retrieve remote information. This
+ includes the completion for the CVS command.
+
+ It is not always possible to know if connections are in fact to a
+ remote site, so some may be prevented unnecessarily.
+
+remove-all-dups
+ The _history_complete_word bindable command and the _history
+ completer use this to decide if all duplicate matches should be
+ removed, rather than just consecutive duplicates.
+
+select-prompt
+ If this is set for the default tag, its value will be displayed
+ during menu selection (see the menu style above) when the
+ completion list does not fit on the screen as a whole. The same
+ escapes as for the list-prompt style are understood, except that
+ the numbers refer to the match or line the mark is on. A default
+ prompt is used when the value is the empty string.
+
+select-scroll
+ This style is tested for the default tag and determines how a
+ completion list is scrolled during a menu selection (see the menu
+ style above) when the completion list does not fit on the screen
+ as a whole. If the value is `0' (zero), the list is scrolled by
+ half-screenfuls; if it is a positive integer, the list is scrolled
+ by the given number of lines; if it is a negative number, the list
+ is scrolled by a screenful minus the absolute value of the given
+ number of lines. The default is to scroll by single lines.
+
+separate-sections
+ This style is used with the manuals tag when completing names of
+ manual pages. If it is `true', entries for different sections are
+ added separately using tag names of the form `manual.X', where X
+ is the section number. When the group-name style is also in
+ effect, pages from different sections will appear separately.
+ This style is also used similarly with the words style when
+ completing words for the dict command. It allows words from
+ different dictionary databases to be added separately. The
+ default for this style is `false'.
+
+show-ambiguity
+ If the zsh/complist module is loaded, this style can be used to
+ highlight the first ambiguous character in completion lists. The
+ value is either a color indication such as those supported by the
+ list-colors style or, with a value of `true', a default of
+ underlining is selected. The highlighting is only applied if the
+ completion display strings correspond to the actual matches.
+
+show-completer
+ Tested whenever a new completer is tried. If it is `true', the
+ completion system outputs a progress message in the listing area
+ showing what completer is being tried. The message will be
+ overwritten by any output when completions are found and is
+ removed after completion is finished.
+
+single-ignored
+ This is used by the _ignored completer when there is only one
+ match. If its value is `show', the single match will be displayed
+ but not inserted. If the value is `menu', then the single match
+ and the original string are both added as matches and menu
+ completion is started, making it easy to select either of them.
+
+sort
+ This allows the standard ordering of matches to be overridden.
+
+ If its value is `true' or `false', sorting is enabled or disabled.
+ Additionally the values associated with the `-o' option to compadd
+ can also be listed: match, nosort, numeric, reverse. If it is not
+ set for the context, the standard behaviour of the calling widget
+ is used.
+
+ The style is tested first against the full context including the
+ tag, and if that fails to produce a value against the context
+ without the tag.
+
+ In many cases where a calling widget explicitly selects a
+ particular ordering in lieu of the default, a value of `true' is
+ not honoured. An example of where this is not the case is for
+ command history where the default of sorting matches
+ chronologically may be overridden by setting the style to `true'.
+
+ In the _expand completer, if it is set to `true', the expansions
+ generated will always be sorted. If it is set to `menu', then the
+ expansions are only sorted when they are offered as single strings
+ but not in the string containing all possible expansions.
+
+special-dirs
+ Normally, the completion code will not produce the directory names
+ `.' and `..' as possible completions. If this style is set to
+ `true', it will add both `.' and `..' as possible completions; if
+ it is set to `..', only `..' will be added.
+
+ The following example sets special-dirs to `..' when the current
+ prefix is empty, is a single `.', or consists only of a path
+ beginning with `../'. Otherwise the value is `false'.
+
+
+ zstyle -e ':completion:*' special-dirs \
+ '[[ $PREFIX = (../)#(|.|..) ]] && reply=(..)'
+
+squeeze-slashes
+ If set to `true', sequences of slashes in filename paths (for
+ example in `foo//bar') will be treated as a single slash. This is
+ the usual behaviour of UNIX paths. However, by default the file
+ completion function behaves as if there were a `*' between the
+ slashes.
+
+stop
+ If set to `true', the _history_complete_word bindable command will
+ stop once when reaching the beginning or end of the history.
+ Invoking _history_complete_word will then wrap around to the
+ opposite end of the history. If this style is set to `false' (the
+ default), _history_complete_word will loop immediately as in a
+ menu completion.
+
+strip-comments
+ If set to `true', this style causes non-essential comment text to
+ be removed from completion matches. Currently it is only used when
+ completing e-mail addresses where it removes any display name from
+ the addresses, cutting them down to plain USER@HOST form.
+
+subst-globs-only
+ This is used by the _expand completer. If it is set to `true',
+ the expansion will only be used if it resulted from globbing;
+ hence, if expansions resulted from the use of the substitute style
+ described below, but these were not further changed by globbing,
+ the expansions will be rejected.
+
+ The default for this style is `false'.
+
+substitute
+ This boolean style controls whether the _expand completer will
+ first try to expand all substitutions in the string (such as
+ `$(...)' and `${...}').
+
+ The default is `true'.
+
+suffix
+ This is used by the _expand completer if the word starts with a
+ tilde or contains a parameter expansion. If it is set to `true',
+ the word will only be expanded if it doesn't have a suffix, i.e.
+ if it is something like `~foo' or `$foo' rather than `~foo/' or
+ `$foo/bar', unless that suffix itself contains characters eligible
+ for expansion. The default for this style is `true'.
+
+tag-order
+ This provides a mechanism for sorting how the tags available in a
+ particular context will be used.
+
+ The values for the style are sets of space-separated lists of tags.
+ The tags in each value will be tried at the same time; if no match
+ is found, the next value is used. (See the file-patterns style for
+ an exception to this behavior.)
+
+ For example:
+
+
+ zstyle ':completion:*:complete:-command-:*:*' tag-order \
+ 'commands functions'
+
+ specifies that completion in command position first offers
+ external commands and shell functions. Remaining tags will be
+ tried if no completions are found.
+
+ In addition to tag names, each string in the value may take one of
+ the following forms:
+
+
+ -
+ If any value consists of only a hyphen, then _only_ the tags
+ specified in the other values are generated. Normally all
+ tags not explicitly selected are tried last if the specified
+ tags fail to generate any matches. This means that a single
+ value consisting only of a single hyphen turns off completion.
+
+ ! TAGS...
+ A string starting with an exclamation mark specifies names of
+ tags that are _not_ to be used. The effect is the same as if
+ all other possible tags for the context had been listed.
+
+ TAG:LABEL ...
+ Here, TAG is one of the standard tags and LABEL is an
+ arbitrary name. Matches are generated as normal but the name
+ LABEL is used in contexts instead of TAG. This is not useful
+ in words starting with !.
+
+ If the LABEL starts with a hyphen, the TAG is prepended to the
+ LABEL to form the name used for lookup. This can be used to
+ make the completion system try a certain tag more than once,
+ supplying different style settings for each attempt; see
+ below for an example.
+
+ TAG:LABEL:DESCRIPTION
+ As before, but description will replace the `%d' in the value
+ of the format style instead of the default description
+ supplied by the completion function. Spaces in the
+ description must be quoted with a backslash. A `%d' appearing
+ in DESCRIPTION is replaced with the description given by the
+ completion function.
+
+
+ In any of the forms above the tag may be a pattern or several
+ patterns in the form `{PAT1,PAT2...}'. In this case all matching
+ tags will be used except for any given explicitly in the same
+ string.
+
+ One use of these features is to try one tag more than once,
+ setting other styles differently on each attempt, but still to use
+ all the other tags without having to repeat them all. For
+ example, to make completion of function names in command position
+ ignore all the completion functions starting with an underscore
+ the first time completion is tried:
+
+
+ zstyle ':completion:*:*:-command-:*:*' tag-order \
+ 'functions:-non-comp *' functions
+ zstyle ':completion:*:functions-non-comp' \
+ ignored-patterns '_*'
+
+ On the first attempt, all tags will be offered but the functions
+ tag will be replaced by functions-non-comp. The ignored-patterns
+ style is set for this tag to exclude functions starting with an
+ underscore. If there are no matches, the second value of the
+ tag-order style is used which completes functions using the default
+ tag, this time presumably including all function names.
+
+ The matches for one tag can be split into different groups. For
+ example:
+
+
+ zstyle ':completion:*' tag-order \
+ 'options:-long:long\ options
+ options:-short:short\ options
+ options:-single-letter:single\ letter\ options'
+ zstyle ':completion:*:options-long' \
+ ignored-patterns '[-+](|-|[^-]*)'
+ zstyle ':completion:*:options-short' \
+ ignored-patterns '--*' '[-+]?'
+ zstyle ':completion:*:options-single-letter' \
+ ignored-patterns '???*'
+
+ With the group-names style set, options beginning with `--',
+ options beginning with a single `-' or `+' but containing multiple
+ characters, and single-letter options will be displayed in
+ separate groups with different descriptions.
+
+ Another use of patterns is to try multiple match specifications
+ one after another. The matcher-list style offers something
+ similar, but it is tested very early in the completion system and
+ hence can't be set for single commands nor for more specific
+ contexts. Here is how to try normal completion without any match
+ specification and, if that generates no matches, try again with
+ case-insensitive matching, restricting the effect to arguments of
+ the command foo:
+
+
+ zstyle ':completion:*:*:foo:*:*' tag-order '*' '*:-case'
+ zstyle ':completion:*-case' matcher 'm:{a-z}={A-Z}'
+
+ First, all the tags offered when completing after foo are tried
+ using the normal tag name. If that generates no matches, the
+ second value of tag-order is used, which tries all tags again
+ except that this time each has -case appended to its name for
+ lookup of styles. Hence this time the value for the matcher style
+ from the second call to zstyle in the example is used to make
+ completion case-insensitive.
+
+ It is possible to use the -e option of the zstyle builtin command
+ to specify conditions for the use of particular tags. For example:
+
+
+ zstyle -e '*:-command-:*' tag-order '
+ if [[ -n $PREFIX$SUFFIX ]]; then
+ reply=( )
+ else
+ reply=( - )
+ fi'
+
+ Completion in command position will be attempted only if the string
+ typed so far is not empty. This is tested using the PREFIX
+ special parameter; see *Note Completion Widgets:: for a
+ description of parameters which are special inside completion
+ widgets. Setting reply to an empty array provides the default
+ behaviour of trying all tags at once; setting it to an array
+ containing only a hyphen disables the use of all tags and hence of
+ all completions.
+
+ If no tag-order style has been defined for a context, the strings
+ `(|*-)argument-* (|*-)option-* values' and `options' plus all tags
+ offered by the completion function will be used to provide a
+ sensible default behavior that causes arguments (whether normal
+ command arguments or arguments of options) to be completed before
+ option names for most commands.
+
+urls
+ This is used together with the urls tag by functions completing
+ URLs.
+
+ If the value consists of more than one string, or if the only
+ string does not name a file or directory, the strings are used as
+ the URLs to complete.
+
+ If the value contains only one string which is the name of a normal
+ file the URLs are taken from that file (where the URLs may be
+ separated by white space or newlines).
+
+ Finally, if the only string in the value names a directory, the
+ directory hierarchy rooted at this directory gives the
+ completions. The top level directory should be the file access
+ method, such as `http', `ftp', `bookmark' and so on. In many
+ cases the next level of directories will be a filename. The
+ directory hierarchy can descend as deep as necessary.
+
+ For example,
+
+
+ zstyle ':completion:*' urls ~/.urls
+ mkdir -p ~/.urls/ftp/ftp.zsh.org/pub
+
+ allows completion of all the components of the URL
+ ftp://ftp.zsh.org/pub after suitable commands such as `netscape'
+ or `lynx'. Note, however, that access methods and files are
+ completed separately, so if the hosts style is set hosts can be
+ completed without reference to the urls style.
+
+ See the description in the function _urls itself for more
+ information (e.g. `more $^fpath/_urls(N)').
+
+use-cache
+ If this is set, the completion caching layer is activated for any
+ completions which use it (via the _store_cache, _retrieve_cache,
+ and _cache_invalid functions). The directory containing the cache
+ files can be changed with the cache-path style.
+
+use-compctl
+ If this style is set to a string _not_ equal to false, 0, no, and
+ off, the completion system may use any completion specifications
+ defined with the compctl builtin command. If the style is unset,
+ this is done only if the zsh/compctl module is loaded. The string
+ may also contain the substring `first' to use completions defined
+ with `compctl -T', and the substring `default' to use the
+ completion defined with `compctl -D'.
+
+ Note that this is only intended to smooth the transition from
+ compctl to the new completion system and may disappear in the
+ future.
+
+ Note also that the definitions from compctl will only be used if
+ there is no specific completion function for the command in
+ question. For example, if there is a function _foo to complete
+ arguments to the command foo, compctl will never be invoked for
+ foo. However, the compctl version will be tried if foo only uses
+ default completion.
+
+use-ip
+ By default, the function _hosts that completes host names strips
+ IP addresses from entries read from host databases such as NIS and
+ ssh files. If this style is `true', the corresponding IP addresses
+ can be completed as well. This style is not use in any context
+ where the hosts style is set; note also it must be set before the
+ cache of host names is generated (typically the first completion
+ attempt).
+
+users
+ This may be set to a list of usernames to be completed. If it is
+ not set all usernames will be completed. Note that if it is set
+ only that list of users will be completed; this is because on some
+ systems querying all users can take a prohibitive amount of time.
+
+users-hosts
+ The values of this style should be of the form `USER@HOST' or
+ `USER:HOST'. It is used for commands that need pairs of user- and
+ hostnames. These commands will complete usernames from this style
+ (only), and will restrict subsequent hostname completion to hosts
+ paired with that user in one of the values of the style.
+
+ It is possible to group values for sets of commands which allow a
+ remote login, such as rlogin and ssh, by using the my-accounts tag.
+ Similarly, values for sets of commands which usually refer to the
+ accounts of other people, such as talk and finger, can be grouped
+ by using the other-accounts tag. More ambivalent commands may use
+ the accounts tag.
+
+users-hosts-ports
+ Like users-hosts but used for commands like telnet and containing
+ strings of the form `USER@HOST:PORT'.
+
+verbose
+ If set, as it is by default, the completion listing is more
+ verbose. In particular many commands show descriptions for
+ options if this style is `true'.
+
+word
+ This is used by the _list completer, which prevents the insertion
+ of completions until a second completion attempt when the line has
+ not changed. The normal way of finding out if the line has
+ changed is to compare its entire contents between the two
+ occasions. If this style is `true', the comparison is instead
+ performed only on the current word. Hence if completion is
+ performed on another word with the same contents, completion will
+ not be delayed.
+
+
+
+
+File: zsh.info, Node: Control Functions, Next: Bindable Commands, Prev: Completion System Configuration, Up: Completion System
+
+20.4 Control Functions
+======================
+
+
+
+The initialization script compinit redefines all the widgets which
+perform completion to call the supplied widget function _main_complete.
+This function acts as a wrapper calling the so-called `completer'
+functions that generate matches. If _main_complete is called with
+arguments, these are taken as the names of completer functions to be
+called in the order given. If no arguments are given, the set of
+functions to try is taken from the completer style. For example, to
+use normal completion and correction if that doesn't generate any
+matches:
+
+
+ zstyle ':completion:*' completer _complete _correct
+
+after calling compinit. The default value for this style is `_complete
+_ignored', i.e. normally only ordinary completion is tried, first with
+the effect of the ignored-patterns style and then without it. The
+_main_complete function uses the return status of the completer
+functions to decide if other completers should be called. If the return
+status is zero, no other completers are tried and the _main_complete
+function returns.
+
+If the first argument to _main_complete is a single hyphen, the
+arguments will not be taken as names of completers. Instead, the
+second argument gives a name to use in the COMPLETER field of the
+context and the other arguments give a command name and arguments to
+call to generate the matches.
+
+The following completer functions are contained in the distribution,
+although users may write their own. Note that in contexts the leading
+underscore is stripped, for example basic completion is performed in the
+context `:completion::complete:...'.
+
+
+_all_matches
+ This completer can be used to add a string consisting of all other
+ matches. As it influences later completers it must appear as the
+ first completer in the list. The list of all matches is affected
+ by the avoid-completer and old-matches styles described above.
+
+ It may be useful to use the _generic function described below to
+ bind _all_matches to its own keystroke, for example:
+
+
+ zle -C all-matches complete-word _generic
+ bindkey '^Xa' all-matches
+ zstyle ':completion:all-matches:*' old-matches only
+ zstyle ':completion:all-matches::::' completer _all_matches
+
+ Note that this does not generate completions by itself: first use
+ any of the standard ways of generating a list of completions, then
+ use ^Xa to show all matches. It is possible instead to add a
+ standard completer to the list and request that the list of all
+ matches should be directly inserted:
+
+
+ zstyle ':completion:all-matches::::' completer \
+ _all_matches _complete
+ zstyle ':completion:all-matches:*' insert true
+
+ In this case the old-matches style should not be set.
+
+_approximate
+ This is similar to the basic _complete completer but allows the
+ completions to undergo corrections. The maximum number of errors
+ can be specified by the max-errors style; see the description of
+ approximate matching in *Note Filename Generation:: for how errors
+ are counted. Normally this completer will only be tried after the
+ normal _complete completer:
+
+
+ zstyle ':completion:*' completer _complete _approximate
+
+ This will give correcting completion if and only if normal
+ completion yields no possible completions. When corrected
+ completions are found, the completer will normally start menu
+ completion allowing you to cycle through these strings.
+
+ This completer uses the tags corrections and original when
+ generating the possible corrections and the original string. The
+ format style for the former may contain the additional sequences
+ `%e' and `%o' which will be replaced by the number of errors
+ accepted to generate the corrections and the original string,
+ respectively.
+
+ The completer progressively increases the number of errors allowed
+ up to the limit by the max-errors style, hence if a completion is
+ found with one error, no completions with two errors will be
+ shown, and so on. It modifies the completer name in the context
+ to indicate the number of errors being tried: on the first try the
+ completer field contains `approximate-1', on the second try
+ `approximate-2', and so on.
+
+ When _approximate is called from another function, the number of
+ errors to accept may be passed with the -a option. The argument
+ is in the same format as the max-errors style, all in one string.
+
+ Note that this completer (and the _correct completer mentioned
+ below) can be quite expensive to call, especially when a large
+ number of errors are allowed. One way to avoid this is to set up
+ the completer style using the -e option to zstyle so that some
+ completers are only used when completion is attempted a second
+ time on the same string, e.g.:
+
+
+ zstyle -e ':completion:*' completer '
+ if [[ $_last_try != "$HISTNO$BUFFER$CURSOR" ]]; then
+ _last_try="$HISTNO$BUFFER$CURSOR"
+ reply=(_complete _match _prefix)
+ else
+ reply=(_ignored _correct _approximate)
+ fi'
+
+ This uses the HISTNO parameter and the BUFFER and CURSOR special
+ parameters that are available inside zle and completion widgets to
+ find out if the command line hasn't changed since the last time
+ completion was tried. Only then are the _ignored, _correct and
+ _approximate completers called.
+
+_canonical_paths [ -A VAR ] [ -N ] [ -MJV12nfX ] TAG DESCR [ PATHS ... ]
+ This completion function completes all paths given to it, and also
+ tries to offer completions which point to the same file as one of
+ the paths given (relative path when an absolute path is given, and
+ vice versa; when ..'s are present in the word to be completed; and
+ some paths got from symlinks).
+
+ -A, if specified, takes the paths from the array variable
+ specified. Paths can also be specified on the command line as
+ shown above. -N, if specified, prevents canonicalizing the paths
+ given before using them for completion, in case they are already
+ so. The options -M, -J, -V, -1, -2, -n, -F, -X are passed to
+ compadd.
+
+ See _description for a description of TAG and DESCR.
+
+_cmdambivalent
+ Completes the remaining positional arguments as an external
+ command. The external command and its arguments are completed as
+ separate arguments (in a manner appropriate for completing
+ /usr/bin/env) if there are two or more remaining positional
+ arguments on the command line, and as a quoted command string (in
+ the manner of system(...)) otherwise. See also _cmdstring and
+ _precommand.
+
+ This function takes no arguments.
+
+_cmdstring
+ Completes an external command as a single argument, as for
+ system(...).
+
+_complete
+ This completer generates all possible completions in a
+ context-sensitive manner, i.e. using the settings defined with the
+ compdef function explained above and the current settings of all
+ special parameters. This gives the normal completion behaviour.
+
+ To complete arguments of commands, _complete uses the utility
+ function _normal, which is in turn responsible for finding the
+ particular function; it is described below. Various contexts of
+ the form -CONTEXT- are handled specifically. These are all
+ mentioned above as possible arguments to the #compdef tag.
+
+ Before trying to find a function for a specific context, _complete
+ checks if the parameter `compcontext' is set. Setting
+ `compcontext' allows the usual completion dispatching to be
+ overridden which is useful in places such as a function that uses
+ vared for input. If it is set to an array, the elements are taken
+ to be the possible matches which will be completed using the tag
+ `values' and the description `value'. If it is set to an
+ associative array, the keys are used as the possible completions
+ and the values (if non-empty) are used as descriptions for the
+ matches. If `compcontext' is set to a string containing colons,
+ it should be of the form `TAG:DESCR:ACTION'. In this case the TAG
+ and DESCR give the tag and description to use and the ACTION
+ indicates what should be completed in one of the forms accepted by
+ the _arguments utility function described below.
+
+ Finally, if `compcontext' is set to a string without colons, the
+ value is taken as the name of the context to use and the function
+ defined for that context will be called. For this purpose, there
+ is a special context named -command-line- that completes whole
+ command lines (commands and their arguments). This is not used by
+ the completion system itself but is nonetheless handled when
+ explicitly called.
+
+_correct
+ Generate corrections, but not completions, for the current word;
+ this is similar to _approximate but will not allow any number of
+ extra characters at the cursor as that completer does. The effect
+ is similar to spell-checking. It is based on _approximate, but the
+ completer field in the context name is correct.
+
+ For example, with:
+
+
+ zstyle ':completion:::::' completer \
+ _complete _correct _approximate
+ zstyle ':completion:*:correct:::' max-errors 2 not-numeric
+ zstyle ':completion:*:approximate:::' max-errors 3 numeric
+
+ correction will accept up to two errors. If a numeric argument is
+ given, correction will not be performed, but correcting completion
+ will be, and will accept as many errors as given by the numeric
+ argument. Without a numeric argument, first correction and then
+ correcting completion will be tried, with the first one accepting
+ two errors and the second one accepting three errors.
+
+ When _correct is called as a function, the number of errors to
+ accept may be given following the -a option. The argument is in
+ the same form a values to the accept style, all in one string.
+
+ This completer function is intended to be used without the
+ _approximate completer or, as in the example, just before it.
+ Using it after the _approximate completer is useless since
+ _approximate will at least generate the corrected strings
+ generated by the _correct completer -- and probably more.
+
+_expand
+ This completer function does not really perform completion, but
+ instead checks if the word on the command line is eligible for
+ expansion and, if it is, gives detailed control over how this
+ expansion is done. For this to happen, the completion system
+ needs to be invoked with complete-word, not expand-or-complete
+ (the default binding for TAB), as otherwise the string will be
+ expanded by the shell's internal mechanism before the completion
+ system is started. Note also this completer should be called
+ before the _complete completer function.
+
+ The tags used when generating expansions are all-expansions for the
+ string containing all possible expansions, expansions when adding
+ the possible expansions as single matches and original when adding
+ the original string from the line. The order in which these
+ strings are generated, if at all, can be controlled by the
+ group-order and tag-order styles, as usual.
+
+ The format string for all-expansions and for expansions may
+ contain the sequence `%o' which will be replaced by the original
+ string from the line.
+
+ The kind of expansion to be tried is controlled by the substitute,
+ glob and subst-globs-only styles.
+
+ It is also possible to call _expand as a function, in which case
+ the different modes may be selected with options: -s for
+ substitute, -g for glob and -o for subst-globs-only.
+
+_expand_alias
+ If the word the cursor is on is an alias, it is expanded and no
+ other completers are called. The types of aliases which are to be
+ expanded can be controlled with the styles regular, global and
+ disabled.
+
+ This function is also a bindable command, see *Note Bindable
+ Commands::.
+
+_extensions
+ If the cursor follows the string `*.', filename extensions are
+ completed. The extensions are taken from files in current
+ directory or a directory specified at the beginning of the current
+ word. For exact matches, completion continues to allow other
+ completers such as _expand to expand the pattern. The standard
+ add-space and prefix-hidden styles are observed.
+
+_external_pwds
+ Completes current directories of other zsh processes belonging to
+ the current user.
+
+ This is intended to be used via _generic, bound to a custom key
+ combination. Note that pattern matching is enabled so matching is
+ performed similar to how it works with the _match completer.
+
+_history
+ Complete words from the shell's command history. This completer
+ can be controlled by the remove-all-dups, and sort styles as for
+ the _history_complete_word bindable command, see *Note Bindable
+ Commands:: and *Note Completion System Configuration::.
+
+_ignored
+ The ignored-patterns style can be set to a list of patterns which
+ are compared against possible completions; matching ones are
+ removed. With this completer those matches can be reinstated, as
+ if no ignored-patterns style were set. The completer actually
+ generates its own list of matches; which completers are invoked is
+ determined in the same way as for the _prefix completer. The
+ single-ignored style is also available as described above.
+
+_list
+ This completer allows the insertion of matches to be delayed until
+ completion is attempted a second time without the word on the line
+ being changed. On the first attempt, only the list of matches
+ will be shown. It is affected by the styles condition and word,
+ see *Note Completion System Configuration::.
+
+_match
+ This completer is intended to be used after the _complete
+ completer. It behaves similarly but the string on the command
+ line may be a pattern to match against trial completions. This
+ gives the effect of the GLOB_COMPLETE option.
+
+ Normally completion will be performed by taking the pattern from
+ the line, inserting a `*' at the cursor position and comparing the
+ resulting pattern with the possible completions generated. This
+ can be modified with the match-original style described above.
+
+ The generated matches will be offered in a menu completion unless
+ the insert-unambiguous style is set to `true'; see the description
+ above for other options for this style.
+
+ Note that matcher specifications defined globally or used by the
+ completion functions (the styles matcher-list and matcher) will
+ not be used.
+
+_menu
+ This completer was written as simple example function to show how
+ menu completion can be enabled in shell code. However, it has the
+ notable effect of disabling menu selection which can be useful with
+ _generic based widgets. It should be used as the first completer in
+ the list. Note that this is independent of the setting of the
+ MENU_COMPLETE option and does not work with the other menu
+ completion widgets such as reverse-menu-complete, or
+ accept-and-menu-complete.
+
+_oldlist
+ This completer controls how the standard completion widgets behave
+ when there is an existing list of completions which may have been
+ generated by a special completion (i.e. a separately-bound
+ completion command). It allows the ordinary completion keys to
+ continue to use the list of completions thus generated, instead of
+ producing a new list of ordinary contextual completions. It
+ should appear in the list of completers before any of the widgets
+ which generate matches. It uses two styles: old-list and
+ old-menu, see *Note Completion System Configuration::.
+
+_precommand
+ Complete an external command in word-separated arguments, as for
+ exec and /usr/bin/env.
+
+_prefix
+ This completer can be used to try completion with the suffix
+ (everything after the cursor) ignored. In other words, the suffix
+ will not be considered to be part of the word to complete. The
+ effect is similar to the expand-or-complete-prefix command.
+
+ The completer style is used to decide which other completers are to
+ be called to generate matches. If this style is unset, the list of
+ completers set for the current context is used -- except, of
+ course, the _prefix completer itself. Furthermore, if this
+ completer appears more than once in the list of completers only
+ those completers not already tried by the last invocation of
+ _prefix will be called.
+
+ For example, consider this global completer style:
+
+
+ zstyle ':completion:*' completer \
+ _complete _prefix _correct _prefix:foo
+
+ Here, the _prefix completer tries normal completion but ignoring
+ the suffix. If that doesn't generate any matches, and neither does
+ the call to the _correct completer after it, _prefix will be
+ called a second time and, now only trying correction with the
+ suffix ignored. On the second invocation the completer part of the
+ context appears as `foo'.
+
+ To use _prefix as the last resort and try only normal completion
+ when it is invoked:
+
+
+ zstyle ':completion:*' completer _complete ... _prefix
+ zstyle ':completion::prefix:*' completer _complete
+
+ The add-space style is also respected. If it is set to `true' then
+ _prefix will insert a space between the matches generated (if any)
+ and the suffix.
+
+ Note that this completer is only useful if the COMPLETE_IN_WORD
+ option is set; otherwise, the cursor will be moved to the end of
+ the current word before the completion code is called and hence
+ there will be no suffix.
+
+_user_expand
+ This completer behaves similarly to the _expand completer but
+ instead performs expansions defined by users. The styles
+ add-space and sort styles specific to the _expand completer are
+ usable with _user_expand in addition to other styles handled more
+ generally by the completion system. The tag all-expansions is
+ also available.
+
+ The expansion depends on the array style user-expand being defined
+ for the current context; remember that the context for completers
+ is less specific than that for contextual completion as the full
+ context has not yet been determined. Elements of the array may
+ have one of the following forms:
+
+
+ $HASH
+ HASH is the name of an associative array. Note this is not a
+ full parameter expression, merely a $, suitably quoted to
+ prevent immediate expansion, followed by the name of an
+ associative array. If the trial expansion word matches a key
+ in HASH, the resulting expansion is the corresponding value.
+
+ _FUNC
+ _FUNC is the name of a shell function whose name must begin
+ with _ but is not otherwise special to the completion system.
+ The function is called with the trial word as an argument.
+ If the word is to be expanded, the function should set the
+ array reply to a list of expansions. Optionally, it can set
+ REPLY to a word that will be used as a description for the
+ set of expansions. The return status of the function is
+ irrelevant.
+
+
+
+
+
+File: zsh.info, Node: Bindable Commands, Next: Completion Functions, Prev: Control Functions, Up: Completion System
+
+20.5 Bindable Commands
+======================
+
+
+
+In addition to the context-dependent completions provided, which are
+expected to work in an intuitively obvious way, there are a few widgets
+implementing special behaviour which can be bound separately to keys.
+The following is a list of these and their default bindings.
+
+
+_bash_completions
+ This function is used by two widgets, _bash_complete-word and
+ _bash_list-choices. It exists to provide compatibility with
+ completion bindings in bash. The last character of the binding
+ determines what is completed: `!', command names; `$', environment
+ variables; `@', host names; `/', file names; `~' user names. In
+ bash, the binding preceded by `\e' gives completion, and preceded
+ by `^X' lists options. As some of these bindings clash with
+ standard zsh bindings, only `\e~' and `^X~' are bound by default.
+ To add the rest, the following should be added to .zshrc after
+ compinit has been run:
+
+
+ for key in '!' '$' '@' '/' '~'; do
+ bindkey "\e$key" _bash_complete-word
+ bindkey "^X$key" _bash_list-choices
+ done
+
+ This includes the bindings for `~' in case they were already bound
+ to something else; the completion code does not override user
+ bindings.
+
+_correct_filename (^XC)
+ Correct the filename path at the cursor position. Allows up to
+ six errors in the name. Can also be called with an argument to
+ correct a filename path, independently of zle; the correction is
+ printed on standard output.
+
+_correct_word (^Xc)
+ Performs correction of the current argument using the usual
+ contextual completions as possible choices. This stores the string
+ `correct-word' in the FUNCTION field of the context name and then
+ calls the _correct completer.
+
+_expand_alias (^Xa)
+ This function can be used as a completer and as a bindable command.
+ It expands the word the cursor is on if it is an alias. The types
+ of alias expanded can be controlled with the styles regular, global
+ and disabled.
+
+ When used as a bindable command there is one additional feature
+ that can be selected by setting the complete style to `true'. In
+ this case, if the word is not the name of an alias, _expand_alias
+ tries to complete the word to a full alias name without expanding
+ it. It leaves the cursor directly after the completed word so
+ that invoking _expand_alias once more will expand the now-complete
+ alias name.
+
+_expand_word (^Xe)
+ Performs expansion on the current word: equivalent to the standard
+ expand-word command, but using the _expand completer. Before
+ calling it, the FUNCTION field of the context is set to
+ `expand-word'.
+
+_generic
+ This function is not defined as a widget and not bound by default.
+ However, it can be used to define a widget and will then store
+ the name of the widget in the FUNCTION field of the context and
+ call the completion system. This allows custom completion widgets
+ with their own set of style settings to be defined easily. For
+ example, to define a widget that performs normal completion and
+ starts menu selection:
+
+
+ zle -C foo complete-word _generic
+ bindkey '...' foo
+ zstyle ':completion:foo:*' menu yes select=1
+
+ Note in particular that the completer style may be set for the
+ context in order to change the set of functions used to generate
+ possible matches. If _generic is called with arguments, those are
+ passed through to _main_complete as the list of completers in
+ place of those defined by the completer style.
+
+_history_complete_word (\e/)
+ Complete words from the shell's command history. This uses the
+ list, remove-all-dups, sort, and stop styles.
+
+_most_recent_file (^Xm)
+ Complete the name of the most recently modified file matching the
+ pattern on the command line (which may be blank). If given a
+ numeric argument N, complete the Nth most recently modified file.
+ Note the completion, if any, is always unique.
+
+_next_tags (^Xn)
+ This command alters the set of matches used to that for the next
+ tag, or set of tags, either as given by the tag-order style or as
+ set by default; these matches would otherwise not be available.
+ Successive invocations of the command cycle through all possible
+ sets of tags.
+
+_read_comp (^X^R)
+ Prompt the user for a string, and use that to perform completion
+ on the current word. There are two possibilities for the string.
+ First, it can be a set of words beginning `_', for example `_files
+ -/', in which case the function with any arguments will be called
+ to generate the completions. Unambiguous parts of the function
+ name will be completed automatically (normal completion is not
+ available at this point) until a space is typed.
+
+ Second, any other string will be passed as a set of arguments to
+ compadd and should hence be an expression specifying what should
+ be completed.
+
+ A very restricted set of editing commands is available when
+ reading the string: `DEL' and `^H' delete the last character;
+ `^U' deletes the line, and `^C' and `^G' abort the function, while
+ `RET' accepts the completion. Note the string is used verbatim as
+ a command line, so arguments must be quoted in accordance with
+ standard shell rules.
+
+ Once a string has been read, the next call to _read_comp will use
+ the existing string instead of reading a new one. To force a new
+ string to be read, call _read_comp with a numeric argument.
+
+_complete_debug (^X?)
+ This widget performs ordinary completion, but captures in a
+ temporary file a trace of the shell commands executed by the
+ completion system. Each completion attempt gets its own file. A
+ command to view each of these files is pushed onto the editor
+ buffer stack.
+
+_complete_help (^Xh)
+ This widget displays information about the context names, the
+ tags, and the completion functions used when completing at the
+ current cursor position. If given a numeric argument other than 1
+ (as in `ESC-2 ^Xh'), then the styles used and the contexts for
+ which they are used will be shown, too.
+
+ Note that the information about styles may be incomplete; it
+ depends on the information available from the completion functions
+ called, which in turn is determined by the user's own styles and
+ other settings.
+
+_complete_help_generic
+ Unlike other commands listed here, this must be created as a
+ normal ZLE widget rather than a completion widget (i.e. with zle
+ -N). It is used for generating help with a widget bound to the
+ _generic widget that is described above.
+
+ If this widget is created using the name of the function, as it is
+ by default, then when executed it will read a key sequence. This
+ is expected to be bound to a call to a completion function that
+ uses the _generic widget. That widget will be executed, and
+ information provided in the same format that the _complete_help
+ widget displays for contextual completion.
+
+ If the widget's name contains debug, for example if it is created
+ as `zle -N _complete_debug_generic _complete_help_generic', it
+ will read and execute the keystring for a generic widget as before,
+ but then generate debugging information as done by _complete_debug
+ for contextual completion.
+
+ If the widget's name contains noread, it will not read a keystring
+ but instead arrange that the next use of a generic widget run in
+ the same shell will have the effect as described above.
+
+ The widget works by setting the shell parameter
+ ZSH_TRACE_GENERIC_WIDGET which is read by _generic. Unsetting the
+ parameter cancels any pending effect of the noread form.
+
+ For example, after executing the following:
+
+
+ zle -N _complete_debug_generic _complete_help_generic
+ bindkey '^x:' _complete_debug_generic
+
+ typing `C-x :' followed by the key sequence for a generic widget
+ will cause trace output for that widget to be saved to a file.
+
+_complete_tag (^Xt)
+ This widget completes symbol tags created by the etags or ctags
+ programmes (note there is no connection with the completion
+ system's tags) stored in a file TAGS, in the format used by etags,
+ or tags, in the format created by ctags. It will look back up the
+ path hierarchy for the first occurrence of either file; if both
+ exist, the file TAGS is preferred. You can specify the full path
+ to a TAGS or tags file by setting the parameter $TAGSFILE or
+ $tagsfile respectively. The corresponding completion tags used
+ are etags and vtags, after emacs and vi respectively.
+
+
+