update
This commit is contained in:
parent
bbb5598fcd
commit
815c0a73ff
|
@ -1,9 +1,10 @@
|
||||||
* Intro
|
* Intro
|
||||||
The official documentation for writing zsh completion functions is difficult to understand, and doesn't give many examples.
|
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 two other tutorials on the web, however both of those tutorials only
|
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 give more complete and easy to
|
explain a small portion of the capabilities of the completion system. This document aims to cover areas not explained elsewhere,
|
||||||
understand explanation for creating zsh completion functions. I do not go into all the details, but will give enough information
|
with examples, so that you can learn how to write more advanced completion functions. I do not go into all the details, but will
|
||||||
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]].
|
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]].
|
||||||
|
|
||||||
Please make any scripts that you create publically available for others (e.g. by forking this repo and making a [[id:64bcd501-b0f0-48c7-b8e2-07af708b95ec][pull request]]).
|
Please make any scripts that you create publically available for others (e.g. by forking this repo and making a [[id:64bcd501-b0f0-48c7-b8e2-07af708b95ec][pull request]]).
|
||||||
* Getting started
|
* Getting started
|
||||||
|
@ -64,7 +65,30 @@ This is a utility function that makes it easy to write simple completion functio
|
||||||
The _arguments function is a wrapper around the compadd builtin function.
|
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.
|
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
|
However, most of the time you will not need to use compadd, since there are many utility functions such as _arguments
|
||||||
and _values which are easier to use.
|
and _regex_arguments which are easier to use.
|
||||||
|
|
||||||
|
** 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]].
|
||||||
|
| _alternative | Loop over tag labels and perform actions based on matching tag label. |
|
||||||
|
| _arguments | Used to specify how to complete individual command line options for a command with unix style options. Often used. |
|
||||||
|
| _combination | Used to complete combinations of values, for example pairs of hostnames and usernames. |
|
||||||
|
| _gnu_generic | Wrapper around the _arguments function. Can be used to complete options for commands that understand the `--help' option. |
|
||||||
|
| _guard | Can be used in the ACTION of specifications for _arguments and similar functions to check the word being completed. |
|
||||||
|
| _message | Used for displaying help messages in places where no completions can be generated. |
|
||||||
|
| _multi_parts | Used for completing multiple parts of word separately where each part is seperated by some char, e.g. for completing partial filepaths: /u/i/sy -> /usr/include/sys |
|
||||||
|
| _options | Can be used to complete the names of shell options. |
|
||||||
|
| _parameters | Used to complete the names of shell parameters/variables (can restrict to those matching a pattern). |
|
||||||
|
| _pick_variant | Used for resolving situations where there are several different commands with the same name each having different completion strategies. |
|
||||||
|
| _regex_arguments | Creates a function for matching commandline arguments with regular expressions, and then performing actions/completions. |
|
||||||
|
| _regex_words | Can be used to generate arguments for the _regex_arguments command. This should be easier than writing the arguments manually. |
|
||||||
|
| _sep_parts | Given a list of alternating arrays and separators, use the arrays to complete corresponding parts of string containing separators (see also _multi_parts) |
|
||||||
|
| _values | Used for completing arbitrary keywords (values) and their arguments, or comma separated lists of such combinations. Can be an ACTION in an _arguments/_regex_arguments spec. |
|
||||||
|
| _path_files | Used to complete filepaths. Can complete partial paths, e.g. /u/i/sy -> /usr/include/sys |
|
||||||
|
| _files | Calls _path_files with all options except -g and -/. These options depend on file-patterns style setting. |
|
||||||
|
| _net_interfaces | Used for completing network interface names |
|
||||||
|
| _users | |
|
||||||
|
| _groups | |
|
||||||
** Writing completion functions using _arguments
|
** Writing completion functions using _arguments
|
||||||
The _arguments function makes it easy to create completion functions.
|
The _arguments function makes it easy to create completion functions.
|
||||||
As arguments it takes special strings specifying the options & arguments to the function being completed,
|
As arguments it takes special strings specifying the options & arguments to the function being completed,
|
||||||
|
@ -76,7 +100,38 @@ This example completes the options --help & -? when trying to complete a hyphen,
|
||||||
with the same description in this case. The first non-option argument is completed using the _files function which
|
with the same description in this case. The first non-option argument is completed using the _files function which
|
||||||
completes file/directories.
|
completes file/directories.
|
||||||
|
|
||||||
|
The
|
||||||
|
|
||||||
|
There are a couple of tutorials on how to use _arguments [[http://www.linux-mag.com/id/1106/][here]] and [[http://wikimatze.de/writing-zsh-completion-for-padrino.html][here]], so I won't cover any more here.
|
||||||
|
Also have a look at the many completion functions listed [[https://github.com/vapniks/zsh-completions/tree/master/src][here]] many of which use _arguments.
|
||||||
|
The full documentation for _arguments is available [[http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Completion-Functions][here]].
|
||||||
|
** Actions
|
||||||
|
Many of the utility functions such as _arguments, _regex_arguments, _alternative and _values may include an action
|
||||||
|
at the end of an option/argument specification. This action indicates how to complete the corresponding argument.
|
||||||
|
The actions can take one of the following forms:
|
||||||
|
| ( ) | Argument is required but no matches are generated for it. |
|
||||||
|
| (ITEM1 ITEM2 ETC) | List of possible matches |
|
||||||
|
| ((ITEM1\:DESC1 ITEM2\:DESC2 ETC\:BLAH)) | List of possible matches, with descriptions. |
|
||||||
|
| ->STRING | Set $state to STRING and continue ($state can be checked in a case statement after the utility function call) |
|
||||||
|
| {EVAL-STRING} | Evaluate string as shell code to generate matches. |
|
||||||
|
| \=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.
|
||||||
|
*** Examples
|
||||||
|
Here the non-option argument
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
_arguments '--help[show help]' '-?[show help]' '1:First arg:_files'
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
** Patterns
|
||||||
|
** Writing completion functions using _values
|
||||||
|
The _values function
|
||||||
|
** Functions for completing specific types of objects
|
||||||
|
| _files | completes files & directories |
|
||||||
|
| _net_interfaces | completes network interface names |
|
||||||
|
| _values | for completing comma se |
|
||||||
* Utility functions with example code
|
* Utility functions with example code
|
||||||
** compadd
|
** compadd
|
||||||
** _gnu_generic
|
** _gnu_generic
|
||||||
|
@ -87,6 +142,13 @@ completes file/directories.
|
||||||
** _comma_separated
|
** _comma_separated
|
||||||
** _files
|
** _files
|
||||||
** _net_interfaces
|
** _net_interfaces
|
||||||
|
* testing & debugging
|
||||||
|
To reload a completion function:
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
> unfunction _func
|
||||||
|
> autoload -U _func
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
* gotchas
|
* gotchas
|
||||||
* Putting it all together
|
* Putting it all together
|
||||||
* Other resources
|
* Other resources
|
||||||
|
|
Loading…
Reference in New Issue