aboutsummaryrefslogtreecommitdiffstats
path: root/zsh-completions-howto.org
diff options
context:
space:
mode:
authorShohei YOSHIDA <syohex@gmail.com>2022-11-23 13:23:19 +0900
committerShohei YOSHIDA <syohex@gmail.com>2022-11-23 13:31:48 +0900
commit0b6e0648504382f68dbfc547bd4392a3d85e8513 (patch)
tree0c04dc7715284836a8364c4fe2a3b100d0e9ec3b /zsh-completions-howto.org
parentMerge pull request #945 from zsh-users/update-conan (diff)
downloadzsh-completions-0b6e0648504382f68dbfc547bd4392a3d85e8513.tar
zsh-completions-0b6e0648504382f68dbfc547bd4392a3d85e8513.tar.gz
zsh-completions-0b6e0648504382f68dbfc547bd4392a3d85e8513.tar.bz2
zsh-completions-0b6e0648504382f68dbfc547bd4392a3d85e8513.tar.lz
zsh-completions-0b6e0648504382f68dbfc547bd4392a3d85e8513.tar.xz
zsh-completions-0b6e0648504382f68dbfc547bd4392a3d85e8513.tar.zst
zsh-completions-0b6e0648504382f68dbfc547bd4392a3d85e8513.zip
Update links
Diffstat (limited to 'zsh-completions-howto.org')
-rw-r--r--zsh-completions-howto.org174
1 files changed, 87 insertions, 87 deletions
diff --git a/zsh-completions-howto.org b/zsh-completions-howto.org
index 0ea805b..094e29b 100644
--- a/zsh-completions-howto.org
+++ b/zsh-completions-howto.org
@@ -21,67 +21,67 @@
The official documentation for writing zsh completion functions is difficult to understand, and doesn't give many examples.
At the time of writing this document I was able to find a few other tutorials on the web, however those tutorials only
explain a small portion of the capabilities of the completion system. This document aims to cover areas not explained elsewhere,
-with examples, so that you can learn how to write more advanced completion functions. I do not go into all the details, but will
+with examples, so that you can learn how to write more advanced completion functions. I do not go into all the details, but will
give enough information and examples to get you up and running. If you need more details you can look it up for yourself in the
- [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]].
+ [[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]].
Please make any scripts that you create publicly available for others (e.g. by forking this repo and making a [[id:64bcd501-b0f0-48c7-b8e2-07af708b95ec][pull request]]).
Also if you have any more information to add or improvements to make to this tutorial, please do.
* Getting started
** Telling zsh which function to use for completing a command
-Completion functions for commands are stored in files with names beginning with an underscore _, and these files should
+Completion functions for commands are stored in files with names beginning with an underscore _, and these files should
be placed in a directory listed in the $fpath variable.
-You can add a directory to $fpath by adding a line like this to your ~/.zshrc file:
-#+BEGIN_SRC sh
+You can add a directory to $fpath by adding a line like this to your ~/.zshrc file:
+#+BEGIN_SRC sh
fpath=(~/newdir $fpath)
#+END_SRC
The first line of a completion function file can look something like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
#compdef foobar
#+END_SRC
This tells zsh that the file contains code for completing the foobar command.
This is the format that you will use most often for the first line, but you can also use the same file for completing
-several different functions if you want. See [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Autoloaded-files][here]] for more details.
+several different functions if you want. See [[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Autoloaded-files][here]] for more details.
-You can also use the compdef command directly (e.g. in your ~/.zshrc file) to tell zsh which function to use for completing
+You can also use the compdef command directly (e.g. in your ~/.zshrc file) to tell zsh which function to use for completing
a command like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
> compdef _function foobar
#+END_SRC
or to use the same completions for several commands:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
> compdef _function foobar goocar hoodar
#+END_SRC
or if you want to supply arguments:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
> compdef '_function arg1 arg2' foobar
#+END_SRC
-See [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Functions-4][here]] for more details.
+See [[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Functions-4][here]] for more details.
** Completing generic gnu commands
-Many [[http://www.gnu.org/][gnu]] commands have a standardized way of listing option descriptions (when the --help option is used).
+Many [[https://www.gnu.org/][gnu]] commands have a standardized way of listing option descriptions (when the --help option is used).
For these commands you can use the _gnu_generic function for automatically creating completions, like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
> compdef _gnu_generic foobar
#+END_SRC
or to use _gnu_generic with several different commands:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
> compdef _gnu_generic foobar goocar hoodar
#+END_SRC
This line can be placed in your ~/.zshrc file.
** Copying completions from another command
-If you want a command, say cmd1, to have the same completions as another, say cmd2, which has already had
+If you want a command, say cmd1, to have the same completions as another, say cmd2, which has already had
completions defined for it, you can do this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
> compdef cmd1=cmd2
#+END_SRC
This can be useful for example if you have created an alias for a command to help you remember it.
* Writing your own completion functions
A good way to get started is to look at some already defined completion functions.
-On my linux installation these are found in /usr/share/zsh/functions/Completion/Unix
+On my linux installation these are found in /usr/share/zsh/functions/Completion/Unix
and /usr/share/zsh/functions/Completion/Linux and a few other subdirs.
-You will notice that the _arguments function is used a lot in these files.
-This is a utility function that makes it easy to write simple completion functions.
+You will notice that the _arguments function is used a lot in these files.
+This is a utility function that makes it easy to write simple completion functions.
The _arguments function is a wrapper around the compadd builtin function.
The compadd builtin is the core function used to add completion words to the command line, and control its behaviour.
However, most of the time you will not need to use compadd, since there are many utility functions such as _arguments
@@ -90,8 +90,8 @@ and _describe which are easier to use.
For very basic completions the _describe function should be adequate
** Utility functions
-Here is a list of some of the utility functions that may be of use.
-The full list of utility functions, with full explanations, is available [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-Functions][here]].
+Here is a list of some of the utility functions that may be of use.
+The full list of utility functions, with full explanations, is available [[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-Functions][here]].
Examples of how to use these functions are given in the next section.
*** main utility functions for overall completion
@@ -100,7 +100,7 @@ Examples of how to use these functions are given in the next section.
| _describe | Used for creating simple completions consisting of words with descriptions (but no actions). Easier to use than _arguments |
| _gnu_generic | Can be used to complete options for commands that understand the `--help' option. |
| _regex_arguments | Creates a function for matching commandline arguments with regular expressions, and then performing actions/completions. |
-*** functions for performing complex completions of single words
+*** functions for performing complex completions of single words
| _values | Used for completing arbitrary keywords (values) and their arguments, or comma separated lists of such combinations. |
| _combination | Used to complete combinations of values, for example pairs of hostnames and usernames. |
| _multi_parts | Used for completing multiple parts of words separately where each part is separated by some char, e.g. for completing partial filepaths: /u/i/sy -> /usr/include/sys |
@@ -135,13 +135,13 @@ The actions can take one of the following forms:
| {EVAL-STRING} | Evaluate string as shell code to generate matches. This can be used to call a utility function with arguments, e.g. _values or _describe |
| =ACTION | Inserts a dummy word into completion command line without changing the point at which completion takes place. |
Not all action types are available for all utility functions that use them. For example the ->STRING type is not available in the
-_regex_arguments or _alternative functions.
+_regex_arguments or _alternative functions.
** Writing simple completion functions using _describe
The _describe function can be used for simple completions where the order and position of the options/arguments is
-not important. You just need to create an array parameter to hold the options & their descriptions, and then pass
+not important. You just need to create an array parameter to hold the options & their descriptions, and then pass
the parameter name as an argument to _describe. The following example creates completion candidates c and d, with
the descriptions (note this should be put in a file called _cmd in some directory listed in $fpath).
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
#compdef cmd
local -a subcmds
subcmds=('c:description for c command' 'd:description for d command')
@@ -149,7 +149,7 @@ _describe 'command' subcmds
#+END_SRC
You can use several different lists separated by a double hyphen as follows but note that this mixes the matches under and single heading and is not intended to be used with different types of completion candidates:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
local -a subcmds topics
subcmds=('c:description for c command' 'd:description for d command')
topics=('e:description for e help topic' 'f:description for f help topic')
@@ -166,20 +166,20 @@ However, unlike _describe, instead of fixed matches further functions may be cal
As arguments it takes a list of specifications each in the form 'TAG:DESCRIPTION:ACTION' where TAG is a special tag that identifies the type of completion matches,
DESCRIPTION is used as a heading to describe the group of completion candidates collectively, and ACTION is one of the action types listed previously (apart from the ->STRING and =ACTION forms).
For example:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_alternative 'arguments:custom arg:(a b c)' 'files:filename:_files'
#+END_SRC
The first specification adds completion candidates a, b & c, and the second specification calls the _files function for completing filepaths.
We could split the specifications over several lines with \ and add descriptions to each of the custom args like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_alternative \
'args:custom arg:((a\:"description a" b\:"description b" c\:"description c"))' \
'files:filename:_files'
#+END_SRC
If we want to pass arguments to _files they can simply be included, like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_alternative \
'args:custom arg:((a\:"description a" b\:"description b" c\:"description c"))'\
'files:filename:_files -/'
@@ -187,7 +187,7 @@ _alternative \
To use parameter expansion to create our list of completions we must use double quotes to quote the specifications,
e.g:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_alternative \
"dirs:user directory:($userdirs)" \
"pids:process ID:($(ps -A o pid=))"
@@ -196,37 +196,37 @@ In this case the first specification adds the words stored in the $userdirs vari
evaluates 'ps -A o pid=' to get a list of pids to use as completion candidates. In practice, we would make used of the existing _pids function for this.
We can use other utility functions such as _values in the ACTION to perform more complex completions, e.g:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_alternative \
"directories:user directory:($userdirs)" \
'options:comma-separated opt: _values -s , letter a b c'
#+END_SRC
this will complete the items in $userdirs, as well as a comma separated list containing a, b &/or c. Note the use of the initial space before _values. This is needed because _values doesn't understand standard compadd options for descriptions.
-As with _describe, the _alternative function can itself be used in an ACTION as part of a specification for _arguments
-or _regex_arguments.
+As with _describe, the _alternative function can itself be used in an ACTION as part of a specification for _arguments
+or _regex_arguments.
** Writing completion functions using _arguments
With a single call to the _arguments function you can create fairly sophisticated completion functions. It is intended to handle typical commands that take a variety of options along with some normal arguments.
Like the _alternative function, _arguments takes a list of specification strings as arguments.
These specification strings specify options and any corresponding option arguments (e.g. -f filename),
-or command arguments.
+or command arguments.
Basic option specifications take the form '-OPT[DESCRIPTION]', e.g. like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_arguments '-s[sort output]' '--l[long output]' '-l[long output]'
#+END_SRC
Arguments for the option can be specified after the option description in this form '-OPT[DESCRIPTION]:MESSAGE:ACTION',
where MESSAGE is a message to display and ACTION can be any of the forms mentioned in the ACTIONS section above.
For example:
-#+BEGIN_SRC sh
-_arguments '-f[input file]:filename:_files'
+#+BEGIN_SRC sh
+_arguments '-f[input file]:filename:_files'
#+END_SRC
Command argument specifications take the form 'N:MESSAGE:ACTION' where N indicates that it is the Nth command argument,
and MESSAGE & ACTION are as before. If the N is omitted then it just means the next command argument (after any that have
already been specified). If a double colon is used at the start (after N) then the argument is optional.
For example:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_arguments '-s[sort output]' '1:first arg:_net_interfaces' '::optional arg:_files' ':next arg:(a b c)'
#+END_SRC
here the first arg is a network interface, the next optional arg is a file name, the last arg can be either a, b or c,
@@ -247,38 +247,38 @@ case "$state" in
;;
esac
#+END_SRC
-In this case paths to music files are completed stepwise descending down directories using the _multi_parts function,
+In this case paths to music files are completed stepwise descending down directories using the _multi_parts function,
and the flags are completed as a comma separated list using the _values function.
I have just given you the basics of _arguments specifications here, you can also specify mutually exclusive options,
-repeated options & arguments, options beginning with + instead of -, etc. For more details see the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]].
+repeated options & arguments, options beginning with + instead of -, etc. For more details see the [[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]].
Also have a look at the tutorials mentioned at the end of this document, and the completion functions in the [[https://github.com/vapniks/zsh-completions/tree/master/src][src directory]].
** Writing completion functions using _regex_arguments and _regex_words
-If you have a complex command line specification with several different possible argument sequences then
+If you have a complex command line specification with several different possible argument sequences then
the _regex_arguments function may be what you need. It typically works well where you have a series of keywords followed by a variable number of arguments.
-_regex_arguments creates a completion function whose name is given by the first argument.
-Hence you need to first call _regex_arguments to create the completion function, and then call that function,
+_regex_arguments creates a completion function whose name is given by the first argument.
+Hence you need to first call _regex_arguments to create the completion function, and then call that function,
e.g. like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_regex_arguments _cmd OTHER_ARGS..
_cmd "$@"
#+END_SRC
The OTHER_ARGS should be sequences of specifications for matching & completing words on the command line.
These sequences can be separated by '|' to represent alternative sequences of words.
-You can use bracketing to arbitrary depth to specify alternate subsequences, but the brackets must be backslashed like this \( \)
+You can use bracketing to arbitrary depth to specify alternate subsequences, but the brackets must be backslashed like this \( \)
or quoted like this '(' ')'.
For example:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_regex_arguments _cmd SEQ1 '|' SEQ2 \( SEQ2a '|' SEQ2b \)
_cmd "$@"
#+END_SRC
This specifies a command line matching either SEQ1, or SEQ2 followed by SEQ2a or SEQ2b. You are describing the form arguments to the command take in the form of a regular expression grammar.
-Each specification in a sequence must contain a / PATTERN/ part at the start followed by an optional ':TAG:DESCRIPTION:ACTION'
-part.
+Each specification in a sequence must contain a / PATTERN/ part at the start followed by an optional ':TAG:DESCRIPTION:ACTION'
+part.
Each PATTERN is a regular expression to match a word on the command line. These patterns are processed sequentially
until we reach a pattern that doesn't match at which point any corresponding ACTION is performed to obtain completions
@@ -289,7 +289,7 @@ The ':TAG:DESCRIPTION:ACTION' part is interpreted in the same way as for the _al
except that it has an extra : at the start, and now all of the possible ACTION formats listed previously are allowed.
Here is an example:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_regex_arguments _cmd /$'[^\0]##\0'/ \( /$'word1(a|b|c)\0'/ ':word:first word:(word1a word1b word1c)' '|'\
/$'word11(a|b|c)\0'/ ':word:first word:(word11a word11b word11c)' \( /$'word2(a|b|c)\0'/ ':word:second word:(word2a word2b word2c)'\
'|' /$'word22(a|b|c)\0'/ ':word:second word:(word22a word22b word22c)' \) \)
@@ -299,51 +299,51 @@ in this case the first word can be word1 or word11 followed by an a, b or c, and
word is allowed which can be word2 followed by and a, b, or c, or a filename.
If this sounds too complicated a much simpler alternative is to use the _regex_words function for creating
-specifications for _regex_arguments.
+specifications for _regex_arguments.
*** Patterns
You may notice that the / PATTERN/ specs in the previous example don't look like normal regular expressions.
Often a string parameter in the form $'foo\0' is used. This is so that the \0 in the string is interpreted correctly
as a null char which is used to separate words in the internal representation. If you don't include the \0 at the end
-of the pattern you may get problems matching the next word. If you need to use the contents of a variable in a pattern,
-you can double quote it so that it gets expanded and then put a string parameter containing a null char afterwards,
+of the pattern you may get problems matching the next word. If you need to use the contents of a variable in a pattern,
+you can double quote it so that it gets expanded and then put a string parameter containing a null char afterwards,
like this: "$somevar"$'\0'
The regular expression syntax for patterns seems to be a bit different from normal regular expressions,
-and I can't find documentation anywhere.
+and I can't find documentation anywhere.
However I have managed to work out what the following special chars are for:
| * | wildcard - any number of chars |
| ? | wildcard - single char |
| # | zero or more of the previous char (like * in a normal regular expression) |
| ## | one or more of the previous char (like + in a normal regular expression) |
*** _regex_words
-The _regex_words function makes it much easier to create specifications for _regex_arguments.
-The results of calling _regex_words can be stored in a variable which can then be used instead
-of a specification for _regex_arguments.
+The _regex_words function makes it much easier to create specifications for _regex_arguments.
+The results of calling _regex_words can be stored in a variable which can then be used instead
+of a specification for _regex_arguments.
To create a specification using _regex_words you supply it with a tag followed by a description followed by a list
-of specifications for individual words. These specifications take the form 'WORD:DESCRIPTION:SPEC' where WORD is the
-word to be completed, DESCRIPTION is a description for it, and SPEC can be another variable created by _regex_words
+of specifications for individual words. These specifications take the form 'WORD:DESCRIPTION:SPEC' where WORD is the
+word to be completed, DESCRIPTION is a description for it, and SPEC can be another variable created by _regex_words
specifying words that come after the current word or blank if there are no further words.
For example:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_regex_words firstword 'The first word' 'word1a:a word:' 'word1b:b word:' 'word1c:c word'
#+END_SRC
-the results of this function call will be stored in the $reply array, and so we should store it in another array
+the results of this function call will be stored in the $reply array, and so we should store it in another array
before $reply gets changed again, like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
local -a firstword
_regex_words word 'The first word' 'word1a:a word:' 'word1b:b word:' 'word1c:c word'
firstword="$reply[@]"
#+END_SRC
we could then use it with _regex_arguments like this:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_regex_arguments _cmd /$'[^\0]##\0'/ "$firstword[@]"
_cmd "$@"
#+END_SRC
Note that I have added an extra pattern for the initial command word itself.
Here is a more complex example where we call _regex_words for different words on the command line
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
local -a firstword firstword2 secondword secondword2
_regex_words word1 'The second word' 'woo:tang clan' 'hoo:not me'
secondword=("$reply[@]")
@@ -359,80 +359,80 @@ _regex_arguments _hello /$'[^\0]##\0'/ "${firstword[@]}" "${firstword2[@]}"
_hello "$@"
#+END_SRC
In this case the first word can be one of "foo", "man", "chu", "boo", "ga" or "loo".
-If the first word is "boo" or "ga" then the second word can be "woo" or "hoo",
+If the first word is "boo" or "ga" then the second word can be "woo" or "hoo",
and if the first word is "loo" then the second word can be "yee" or "haa", in the other
cases there is no second word.
For a good example of the usage of _regex_words have a look at the _ip function.
** complex completions with _values, _sep_parts, & _multi_parts
-The _values, _sep_parts & _multi_parts functions can be used either on their own, or as ACTIONs in specifications for
+The _values, _sep_parts & _multi_parts functions can be used either on their own, or as ACTIONs in specifications for
_alternative, _arguments or _regex_arguments. The following examples may be instructive.
-See the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for more info.
+See the [[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for more info.
Space separated list of mp3 files:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_values 'mp3 files' ~/*.mp3
#+END_SRC
Comma separated list of session id numbers:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_values -s , 'session id' "${(uonzf)$(ps -A o sid=)}"
#+END_SRC
Completes foo@news:woo, or foo@news:laa, or bar@news:woo, etc:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_sep_parts '(foo bar)' @ '(news ftp)' : '(woo laa)'
#+END_SRC
Complete some MAC addresses one octet at a time:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
_multi_parts : '(00:11:22:33:44:55 00:23:34:45:56:67 00:23:45:56:67:78)'
#+END_SRC
** Adding completion words directly using compadd
For more fine grained control you can use the builtin compadd function to add completion words directly.
-This function has many different options for controlling how completions are displayed and how text on the command line
-can be altered when words are completed. Read the [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for full details.
+This function has many different options for controlling how completions are displayed and how text on the command line
+can be altered when words are completed. Read the [[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][official documentation]] for full details.
Here I just give a few simple examples.
Add some words to the list of possible completions:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
compadd foo bar blah
#+END_SRC
As above but also display an explanation:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
compadd -X 'Some completions' foo bar blah
#+END_SRC
As above but automatically insert a prefix of "what_" before the completed word:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
compadd -P what_ foo bar blah
#+END_SRC
As above but automatically insert a suffix of "_todo" after the completed word:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
compadd -S _todo foo bar blah
#+END_SRC
As above but automatically remove the "_todo" suffix if a blank char is typed after the suffix:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
compadd -P _todo -q foo bar blah
#+END_SRC
Add words in array $wordsarray to the list of possible completions
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
compadd -a wordsarray
#+END_SRC
* Testing & debugging
To reload a completion function:
-#+BEGIN_SRC sh
+#+BEGIN_SRC sh
> unfunction _func
> autoload -U _func
#+END_SRC
-The following functions can be called to obtain useful information.
+The following functions can be called to obtain useful information.
If the default keybindings don't work you can try pressing Alt+x and then enter the command name.
| Function | Default keybinding | Description |
|-----------------+--------------------+--------------------------------------------------------------------------------------------------------------------------------|
@@ -446,19 +446,19 @@ Take care to use the correct type of quoting for specifications to _arguments or
use double quotes if there is a parameter that needs to be expanded in the specification, single quotes otherwise,
and make sure to use different quotes around item descriptions.
-Check that you have the correct number of :'s in the correct places for specifications for _arguments,
+Check that you have the correct number of :'s in the correct places for specifications for _arguments,
_alternative, _regex_arguments, etc.
Remember to include an initial pattern to match the command word when using _regex_arguments (it does not need a matching action).
Remember to put a null char $'\0' at the end of any PATTERN argument for _regex_arguments
* Tips
-Sometimes you have a situation where there is just one option that can come after a subcommand, and zsh will complete this
-automatically when tab is pressed after the subcommand. If instead you want it listed with its description before completing
-you can add another empty option (i.e. \:) to the ACTION like this ':TAG:DESCRIPTION:((opt1\:"description for opt1" \:))'
+Sometimes you have a situation where there is just one option that can come after a subcommand, and zsh will complete this
+automatically when tab is pressed after the subcommand. If instead you want it listed with its description before completing
+you can add another empty option (i.e. \:) to the ACTION like this ':TAG:DESCRIPTION:((opt1\:"description for opt1" \:))'
Note this only applies to utility functions that use ACTIONs in their specification arguments (_arguments, _regex_arguments, etc.)
* Other resources
-[[https://wikimatze.de/writing-zsh-completion-for-padrino/][Here]] is a nicely formatted short tutorial showing basic usage of the _arguments function,
+[[https://wikimatze.de/writing-zsh-completion-for-padrino/][Here]] is a nicely formatted short tutorial showing basic usage of the _arguments function,
and [[https://web.archive.org/web/20190411104837/http://www.linux-mag.com/id/1106/][here]] is a slightly more advanced tutorial using the _arguments function.
-[[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][Here]] is the zshcompsys man page.
+[[https://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-System][Here]] is the zshcompsys man page.