diff options
Diffstat (limited to 'assets/info/zsh.info-4')
| -rw-r--r-- | assets/info/zsh.info-4 | 7058 |
1 files changed, 7058 insertions, 0 deletions
diff --git a/assets/info/zsh.info-4 b/assets/info/zsh.info-4 new file mode 100644 index 00000000..8ab37ffc --- /dev/null +++ b/assets/info/zsh.info-4 @@ -0,0 +1,7058 @@ +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: Completion Functions, Next: Completion System Variables, Prev: Bindable Commands, Up: Completion System + +20.6 Utility Functions +====================== + + + +Descriptions follow for utility functions that may be useful when +writing completion functions. If functions are installed in +subdirectories, most of these reside in the Base subdirectory. Like +the example functions for commands in the distribution, the utility +functions generating matches all follow the convention of returning +status zero if they generated completions and non-zero if no matching +completions could be added. + + +_absolute_command_paths + This function completes external commands as absolute paths (unlike + _command_names -e which completes their basenames). It takes no + arguments. + +_all_labels [ -x ] [ -12VJ ] TAG NAME DESCR [ COMMAND ARG ... ] + This is a convenient interface to the _next_label function below, + implementing the loop shown in the _next_label example. The + COMMAND and its arguments are called to generate the matches. The + options stored in the parameter NAME will automatically be inserted + into the ARGs passed to the COMMAND. Normally, they are put + directly after the COMMAND, but if one of the ARGs is a single + hyphen, they are inserted directly before that. If the hyphen is + the last argument, it will be removed from the argument list + before the COMMAND is called. This allows _all_labels to be used + in almost all cases where the matches can be generated by a single + call to the compadd builtin command or by a call to one of the + utility functions. + + For example: + + + local expl + ... + if _requested foo; then + ... + _all_labels foo expl '...' compadd ... - $matches + fi + + Will complete the strings from the matches parameter, using + compadd with additional options which will take precedence over + those generated by _all_labels. + +_alternative [ -O NAME ] [ -C NAME ] SPEC ... + This function is useful in simple cases where multiple tags are + available. Essentially it implements a loop like the one + described for the _tags function below. + + The tags to use and the action to perform if a tag is requested are + described using the SPECs which are of the form: + `TAG:DESCR:ACTION'. The TAGs are offered using _tags and if the + tag is requested, the ACTION is executed with the given + description DESCR. The ACTIONs are those accepted by the + _arguments function (described below), excluding the `->STATE' and + `=...' forms. + + For example, the ACTION may be a simple function call: + + + _alternative \ + 'users:user:_users' \ + 'hosts:host:_hosts' + + offers usernames and hostnames as possible matches, generated by + the _users and _hosts functions respectively. + + Like _arguments, this function uses _all_labels to execute the + actions, which will loop over all sets of tags. Special handling + is only required if there is an additional valid tag, for example + inside a function called from _alternative. + + The option `-O NAME' is used in the same way as by the _arguments + function. In other words, the elements of the NAME array will be + passed to compadd when executing an action. + + Like _tags this function supports the -C option to give a + different name for the argument context field. + +_arguments [ -nswWCRS ] [ -A PAT ] [ -O NAME ] [ -M MATCHSPEC ] + [ : ] SPEC ... +_arguments [ OPT ... ] -- [ -l ] [ -i PATS ] [ -s PAIR ] + [ HELPSPEC ...] + This function can be used to give a complete specification for + completion for a command whose arguments follow standard UNIX + option and argument conventions. + + _Options Overview_ + + Options to _arguments itself must be in separate words, i.e. -s -w, + not -sw. The options are followed by SPECs that describe options + and arguments of the analyzed command. To avoid ambiguity, all + options to _arguments itself may be separated from the SPEC forms + by a single colon. + + The `--' form is used to intuit SPEC forms from the help output of + the command being analyzed, and is described in detail below. The + OPTS for the `--' form are otherwise the same options as the first + form. Note that `-s' following `--' has a distinct meaning from + `-s' preceding `--', and both may appear. + + The option switches -s, -S, -A, -w, and -W affect how _arguments + parses the analyzed command line's options. These switches are + useful for commands with standard argument parsing. + + The options of _arguments have the following meanings: + + + -n + With this option, _arguments sets the parameter NORMARG to + the position of the first normal argument in the $words array, + i.e. the position after the end of the options. If that + argument has not been reached, NORMARG is set to -1. The + caller should declare `integer NORMARG' if the -n option is + passed; otherwise the parameter is not used. + + -s + Enable _option stacking_ for single-letter options, whereby + multiple single-letter options may be combined into a single + word. For example, the two options `-x' and `-y' may be + combined into a single word `-xy'. By default, every word + corresponds to a single option name (`-xy' is a single option + named `xy'). + + Options beginning with a single hyphen or plus sign are + eligible for stacking; words beginning with two hyphens are + not. + + Note that -s after -- has a different meaning, which is + documented in the segment entitled `Deriving SPEC forms from + the help output'. + + -w + In combination with -s, allow option stacking even if one or + more of the options take arguments. For example, if -x takes + an argument, with no -s, `-xy' is considered as a single + (unhandled) option; with -s, -xy is an option with the + argument `y'; with both -s and -w, -xy is the option -x and + the option -y with arguments to -x (and to -y, if it takes + arguments) still to come in subsequent words. + + -W + This option takes -w a stage further: it is possible to + complete single-letter options even after an argument that + occurs in the same word. However, it depends on the action + performed whether options will really be completed at this + point. For more control, use a utility function like _guard + as part of the action. + + -C + Modify the curcontext parameter for an action of the form + `->STATE'. This is discussed in detail below. + + -R + Return status 300 instead of zero when a $state is to be + handled, in the `->STRING' syntax. + + -S + Do not complete options after a `--' appearing on the line, + and ignore the `--'. For example, with -S, in the line + + + foobar -x -- -y + + the `-x' is considered an option, the `-y' is considered an + argument, and the `--' is considered to be neither. + + -A PAT + Do not complete options after the first non-option argument + on the line. PAT is a pattern matching all strings which are + not to be taken as arguments. For example, to make + _arguments stop completing options after the first normal + argument, but ignoring all strings starting with a hyphen + even if they are not described by one of the OPTSPECs, the + form is `-A "-*"'. + + -O NAME + Pass the elements of the array NAME as arguments to functions + called to execute ACTIONs. This is discussed in detail below. + + -M MATCHSPEC + Use the match specification MATCHSPEC for completing option + names and values. The default MATCHSPEC allows partial word + completion after `_' and `-', such as completing `-f-b' to + `-foo-bar'. The default MATCHSPEC is: + r:|[_-]=* r:|=* + + + _SPECs: overview_ + + Each of the following forms is a SPEC describing individual sets of + options or arguments on the command line being analyzed. + + + N:MESSAGE:ACTION + N::MESSAGE:ACTION + This describes the N'th normal argument. The MESSAGE will be + printed above the matches generated and the ACTION indicates + what can be completed in this position (see below). If there + are two colons before the MESSAGE the argument is optional. + If the MESSAGE contains only white space, nothing will be + printed above the matches unless the action adds an + explanation string itself. + + :MESSAGE:ACTION + ::MESSAGE:ACTION + Similar, but describes the _next_ argument, whatever number + that happens to be. If all arguments are specified in this + form in the correct order the numbers are unnecessary. + + *:MESSAGE:ACTION + *::MESSAGE:ACTION + *:::MESSAGE:ACTION + This describes how arguments (usually non-option arguments, + those not beginning with - or +) are to be completed when + neither of the first two forms was provided. Any number of + arguments can be completed in this fashion. + + With two colons before the MESSAGE, the words special array + and the CURRENT special parameter are modified to refer only + to the normal arguments when the ACTION is executed or + evaluated. With three colons before the MESSAGE they are + modified to refer only to the normal arguments covered by + this description. + + OPTSPEC + OPTSPEC:... + This describes an option. The colon indicates handling for + one or more arguments to the option; if it is not present, + the option is assumed to take no arguments. + + The following forms are available for the initial OPTSPEC, + whether or not the option has arguments. + + + *OPTSPEC + Here OPTSPEC is one of the remaining forms below. This + indicates the following OPTSPEC may be repeated. + Otherwise if the corresponding option is already present + on the command line to the left of the cursor it will + not be offered again. + + -OPTNAME + +OPTNAME + In the simplest form the OPTSPEC is just the option name + beginning with a minus or a plus sign, such as `-foo'. + The first argument for the option (if any) must follow + as a _separate_ word directly after the option. + + Either of `-+OPTNAME' and `+-OPTNAME' can be used to + specify that -OPTNAME and +OPTNAME are both valid. + + In all the remaining forms, the leading `-' may be + replaced by or paired with `+' in this way. + + -OPTNAME- + The first argument of the option must come directly + after the option name _in the same word_. For example, + `-foo-:...' specifies that the completed option and + argument will look like `-fooARG'. + + -OPTNAME+ + The first argument may appear immediately after OPTNAME + in the same word, or may appear as a separate word after + the option. For example, `-foo+:...' specifies that the + completed option and argument will look like either + `-fooARG' or `-foo ARG'. + + -OPTNAME= + The argument may appear as the next word, or in same + word as the option name provided that it is separated + from it by an equals sign, for example `-foo=ARG' or + `-foo ARG'. + + -OPTNAME=- + The argument to the option must appear after an equals + sign in the same word, and may not be given in the next + argument. + + OPTSPEC[EXPLANATION] + An explanation string may be appended to any of the + preceding forms of OPTSPEC by enclosing it in brackets, + as in `-q[query operation]'. + + The verbose style is used to decide whether the + explanation strings are displayed with the option in a + completion listing. + + If no bracketed explanation string is given but the + auto-description style is set and only one argument is + described for this OPTSPEC, the value of the style is + displayed, with any appearance of the sequence `%d' in + it replaced by the MESSAGE of the first OPTARG that + follows the OPTSPEC; see below. + + + It is possible for options with a literal `+' or `=' to + appear, but that character must be quoted, for example `-\+'. + + Each OPTARG following an OPTSPEC must take one of the + following forms: + + + :MESSAGE:ACTION + ::MESSAGE:ACTION + An argument to the option; MESSAGE and ACTION are + treated as for ordinary arguments. In the first form, + the argument is mandatory, and in the second form it is + optional. + + This group may be repeated for options which take + multiple arguments. In other words, + :MESSAGE1:ACTION1:MESSAGE2:ACTION2 specifies that the + option takes two arguments. + + :*PATTERN:MESSAGE:ACTION + :*PATTERN::MESSAGE:ACTION + :*PATTERN:::MESSAGE:ACTION + This describes multiple arguments. Only the last OPTARG + for an option taking multiple arguments may be given in + this form. If the PATTERN is empty (i.e. :*:), all the + remaining words on the line are to be completed as + described by the ACTION; otherwise, all the words up to + and including a word matching the PATTERN are to be + completed using the ACTION. + + Multiple colons are treated as for the `*:...' forms for + ordinary arguments: when the MESSAGE is preceded by two + colons, the words special array and the CURRENT special + parameter are modified during the execution or + evaluation of the ACTION to refer only to the words + after the option. When preceded by three colons, they + are modified to refer only to the words covered by this + description. + + + + Any literal colon in an OPTNAME, MESSAGE, or ACTION must be + preceded by a backslash, `\:'. + + Each of the forms above may be preceded by a list in parentheses + of option names and argument numbers. If the given option is on + the command line, the options and arguments indicated in + parentheses will not be offered. For example, `(-two -three + 1)-one:...' completes the option `-one'; if this appears on the + command line, the options -two and -three and the first ordinary + argument will not be completed after it. `(-foo):...' specifies + an ordinary argument completion; -foo will not be completed if + that argument is already present. + + Other items may appear in the list of excluded options to indicate + various other items that should not be applied when the current + specification is matched: a single star (*) for the rest arguments + (i.e. a specification of the form `*:...'); a colon (:) for all + normal (non-option-) arguments; and a hyphen (-) for all options. + For example, if `(*)' appears before an option and the option + appears on the command line, the list of remaining arguments + (those shown in the above table beginning with `*:') will not be + completed. + + To aid in reuse of specifications, it is possible to precede any + of the forms above with `!'; then the form will no longer be + completed, although if the option or argument appears on the + command line they will be skipped as normal. The main use for + this is when the arguments are given by an array, and _arguments + is called repeatedly for more specific contexts: on the first call + `_arguments $global_options' is used, and on subsequent calls + `_arguments !$^global_options'. + + _SPECs: actions_ + + In each of the forms above the ACTION determines how completions + should be generated. Except for the `->STRING' form below, the + ACTION will be executed by calling the _all_labels function to + process all tag labels. No special handling of tags is needed + unless a function call introduces a new one. + + The functions called to execute ACTIONs will be called with the + elements of the array named by the `-O NAME' option as arguments. + This can be used, for example, to pass the same set of options for + the compadd builtin to all ACTIONs. + + The forms for ACTION are as follows. + + + (single unquoted space) + This is useful where an argument is required but it is not + possible or desirable to generate matches for it. The + MESSAGE will be displayed but no completions listed. Note + that even in this case the colon at the end of the MESSAGE is + needed; it may only be omitted when neither a MESSAGE nor an + ACTION is given. + + (ITEM1 ITEM2 ...) + One of a list of possible matches, for example: + + + :foo:(foo bar baz) + + ((ITEM1\:DESC1 ...)) + Similar to the above, but with descriptions for each possible + match. Note the backslash before the colon. For example, + + + :foo:((a\:bar b\:baz)) + + The matches will be listed together with their descriptions + if the description style is set with the values tag in the + context. + + ->STRING + In this form, _arguments processes the arguments and options + and then returns control to the calling function with + parameters set to indicate the state of processing; the + calling function then makes its own arrangements for + generating completions. For example, functions that + implement a state machine can use this type of action. + + Where _arguments encounters ACTION in the `->STRING' format, + it will strip all leading and trailing whitespace from STRING + and set the array state to the set of all STRINGs for which an + action is to be performed. The elements of the array + state_descr are assigned the corresponding MESSAGE field from + each OPTARG containing such an ACTION. + + By default and in common with all other well behaved + completion functions, _arguments returns status zero if it + was able to add matches and non-zero otherwise. However, if + the -R option is given, _arguments will instead return a + status of 300 to indicate that $state is to be handled. + + In addition to $state and $state_descr, _arguments also sets + the global parameters `context', `line' and `opt_args' as + described below, and does not reset any changes made to the + special parameters such as PREFIX and words. This gives the + calling function the choice of resetting these parameters or + propagating changes in them. + + A function calling _arguments with at least one action + containing a `->STRING' must therefore declare appropriate + local parameters: + + + local context state state_descr line + typeset -A opt_args + + to prevent _arguments from altering the global environment. + + {EVAL-STRING} + A string in braces is evaluated as shell code to generate + matches. If the EVAL-STRING itself does not begin with an + opening parenthesis or brace it is split into separate words + before execution. + + = ACTION + If the ACTION starts with `= ' (an equals sign followed by a + space), _arguments will insert the contents of the ARGUMENT + field of the current context as the new first element in the + words special array and increment the value of the CURRENT + special parameter. This has the effect of inserting a dummy + word onto the completion command line while not changing the + point at which completion is taking place. + + This is most useful with one of the specifiers that restrict + the words on the command line on which the ACTION is to + operate (the two- and three-colon forms above). One + particular use is when an ACTION itself causes _arguments on + a restricted range; it is necessary to use this trick to + insert an appropriate command name into the range for the + second call to _arguments to be able to parse the line. + + WORD... + WORD... + This covers all forms other than those above. If the ACTION + starts with a space, the remaining list of words will be + invoked unchanged. + + Otherwise it will be invoked with some extra strings placed + after the first word; these are to be passed down as options + to the compadd builtin. They ensure that the state specified + by _arguments, in particular the descriptions of options and + arguments, is correctly passed to the completion command. + These additional arguments are taken from the array parameter + `expl'; this will be set up before executing the ACTION and + hence may be referred to inside it, typically in an expansion + of the form `$expl[@]' which preserves empty elements of the + array. + + + During the performance of the action the array `line' will be set + to the normal arguments from the command line, i.e. the words from + the command line after the command name excluding all options and + their arguments. Options are stored in the associative array + `opt_args' with option names as keys and their arguments as the + values. For options that have more than one argument these are + given as one string, separated by colons. All colons and + backslashes in the original arguments are preceded with + backslashes. + + The parameter `context' is set when returning to the calling + function to perform an action of the form `->STRING'. It is set + to an array of elements corresponding to the elements of $state. + Each element is a suitable name for the argument field of the + context: either a string of the form `option-OPT-N' for the N'th + argument of the option -OPT, or a string of the form `argument-N' + for the N'th argument. For `rest' arguments, that is those in the + list at the end not handled by position, N is the string `rest'. + For example, when completing the argument of the -o option, the + name is `option-o-1', while for the second normal (non-option-) + argument it is `argument-2'. + + Furthermore, during the evaluation of the ACTION the context name + in the curcontext parameter is altered to append the same string + that is stored in the context parameter. + + The option -C tells _arguments to modify the curcontext parameter + for an action of the form `->STATE'. This is the standard + parameter used to keep track of the current context. Here it (and + not the context array) should be made local to the calling + function to avoid passing back the modified value and should be + initialised to the current value at the start of the function: + + + local curcontext="$curcontext" + + This is useful where it is not possible for multiple states to be + valid together. + + _Grouping Options_ + + Options can be grouped to simplify exclusion lists. A group is + introduced with `+' followed by a name for the group in the + subsequent word. Whole groups can then be referenced in an + exclusion list or a group name can be used to disambiguate between + two forms of the same option. For example: + + + _arguments \ + '(group2--x)-a' \ + + group1 \ + -m \ + '(group2)-n' \ + + group2 \ + -x -y + + If the name of a group is specified in the form `(NAME)' then only + one value from that group will ever be completed; more formally, + all specifications are mutually exclusive to all other + specifications in that group. This is useful for defining options + that are aliases for each other. For example: + + + _arguments \ + -a -b \ + + '(operation)' \ + {-c,--compress}'[compress]' \ + {-d,--decompress}'[decompress]' \ + {-l,--list}'[list]' + + If an option in a group appears on the command line, it is stored + in the associative array `opt_args' with 'GROUP-OPTION' as a key. + In the example above, a key `operation-c' is used if the option + `-c' is present on the command line. + + _Specifying Multiple Sets of Arguments_ + + It is possible to specify multiple sets of options and arguments + with the sets separated by single hyphens. This differs from + groups in that sets are considered to be mutually exclusive of + each other. + + Specifications before the first set and from any group are common + to all sets. For example: + + + _arguments \ + -a \ + - set1 \ + -c \ + - set2 \ + -d \ + ':arg:(x2 y2)' + + This defines two sets. When the command line contains the option + `-c', the `-d' option and the argument will not be considered + possible completions. When it contains `-d' or an argument, the + option `-c' will not be considered. However, after `-a' both sets + will still be considered valid. + + As for groups, the name of a set may appear in exclusion lists, + either alone or preceding a normal option or argument + specification. + + The completion code has to parse the command line separately for + each set. This can be slow so sets should only be used when + necessary. A useful alternative is often an option specification + with rest-arguments (as in `-foo:*:...'); here the option -foo + swallows up all remaining arguments as described by the OPTARG + definitions. + + _Deriving SPEC forms from the help output_ + + The option `--' allows _arguments to work out the names of long + options that support the `--help' option which is standard in many + GNU commands. The command word is called with the argument + `--help' and the output examined for option names. Clearly, it can + be dangerous to pass this to commands which may not support this + option as the behaviour of the command is unspecified. + + In addition to options, `_arguments --' will try to deduce the + types of arguments available for options when the form `--OPT=VAL' + is valid. It is also possible to provide hints by examining the + help text of the command and adding HELPSPEC of the form + `PATTERN:MESSAGE:ACTION'; note that other _arguments SPEC forms + are not used. The PATTERN is matched against the help text for an + option, and if it matches the MESSAGE and ACTION are used as for + other argument specifiers. The special case of `*:' means both + MESSAGE and ACTION are empty, which has the effect of causing + options having no description in the help output to be ordered in + listings ahead of options that have a description. + + For example: + + + _arguments -- '*\*:toggle:(yes no)' \ + '*=FILE*:file:_files' \ + '*=DIR*:directory:_files -/' \ + '*=PATH*:directory:_files -/' + + Here, `yes' and `no' will be completed as the argument of options + whose description ends in a star; file names will be completed for + options that contain the substring `=FILE' in the description; and + directories will be completed for options whose description + contains `=DIR' or `=PATH'. The last three are in fact the + default and so need not be given explicitly, although it is + possible to override the use of these patterns. A typical help + text which uses this feature is: + + + -C, --directory=DIR change to directory DIR + + so that the above specifications will cause directories to be + completed after `--directory', though not after `-C'. + + Note also that _arguments tries to find out automatically if the + argument for an option is optional. This can be specified + explicitly by doubling the colon before the MESSAGE. + + If the PATTERN ends in `(-)', this will be removed from the + pattern and the ACTION will be used only directly after the `=', + not in the next word. This is the behaviour of a normal + specification defined with the form `=-'. + + By default, the command (with the option `-help') is run after + resetting all the locale categories (except for LC_CTYPE) to `C'. + If the localized help output is known to work, the option `-l' can + be specified after the `_arguments --' so that the command is run + in the current locale. + + The `_arguments --' can be followed by the option `-i PATTERNS' to + give patterns for options which are not to be completed. The + patterns can be given as the name of an array parameter or as a + literal list in parentheses. For example, + + + _arguments -- -i \ + "(--(en|dis)able-FEATURE*)" + + will cause completion to ignore the options `--enable-FEATURE' and + `--disable-FEATURE' (this example is useful with GNU configure). + + The `_arguments --' form can also be followed by the option `-s + PAIR' to describe option aliases. The PAIR consists of a list of + alternating patterns and corresponding replacements, enclosed in + parens and quoted so that it forms a single argument word in the + _arguments call. + + For example, some configure-script help output describes options + only as `--enable-foo', but the script also accepts the negated + form `--disable-foo'. To allow completion of the second form: + + + _arguments -- -s "((#s)--enable- --disable-)" + + _Miscellaneous notes_ + + Finally, note that _arguments generally expects to be the primary + function handling any completion for which it is used. It may + have side effects which change the treatment of any matches added + by other functions called after it. To combine _arguments with + other functions, those functions should be called either before + _arguments, as an ACTION within a SPEC, or in handlers for + `->STATE' actions. + + Here is a more general example of the use of _arguments: + + + _arguments '-l+:left border:' \ + '-format:paper size:(letter A4)' \ + '*-copy:output file:_files::resolution:(300 600)' \ + ':postscript file:_files -g \*.\(ps\|eps\)' \ + '*:page number:' + + This describes three options: `-l', `-format', and `-copy'. The + first takes one argument described as `LEFT BORDER' for which no + completion will be offered because of the empty action. Its + argument may come directly after the `-l' or it may be given as + the next word on the line. + + The `-format' option takes one argument in the next word, + described as `PAPER SIZE' for which only the strings `letter' and + `A4' will be completed. + + The `-copy' option may appear more than once on the command line + and takes two arguments. The first is mandatory and will be + completed as a filename. The second is optional (because of the + second colon before the description `RESOLUTION') and will be + completed from the strings `300' and `600'. + + The last two descriptions say what should be completed as + arguments. The first describes the first argument as a + `POSTSCRIPT FILE' and makes files ending in `ps' or `eps' be + completed. The last description gives all other arguments the + description `PAGE NUMBERS' but does not offer completions. + +_cache_invalid CACHE_IDENTIFIER + This function returns status zero if the completions cache + corresponding to the given cache identifier needs rebuilding. It + determines this by looking up the cache-policy style for the + current context. This should provide a function name which is run + with the full path to the relevant cache file as the only argument. + + Example: + + + _example_caching_policy () { + # rebuild if cache is more than a week old + local -a oldp + oldp=( "$1"(Nm+7) ) + (( $#oldp )) + } + +_call_function RETURN NAME [ ARG ... ] + If a function NAME exists, it is called with the arguments ARGs. + The RETURN argument gives the name of a parameter in which the + return status from the function NAME should be stored; if RETURN + is empty or a single hyphen it is ignored. + + The return status of _call_function itself is zero if the function + NAME exists and was called and non-zero otherwise. + +_call_program [ -l ] [ -p ] TAG STRING ... + This function provides a mechanism for the user to override the + use of an external command. It looks up the command style with + the supplied TAG. If the style is set, its value is used as the + command to execute. The STRINGs from the call to _call_program, + or from the style if set, are concatenated with spaces between + them and the resulting string is evaluated. The return status is + the return status of the command called. + + By default, the command is run in an environment where all the + locale categories (except for LC_CTYPE) are reset to `C' by + calling the utility function _comp_locale (see below). If the + option `-l' is given, the command is run with the current locale. + + If the option `-p' is supplied it indicates that the command + output is influenced by the permissions it is run with. If the + gain-privileges style is set to true, _call_program will make use + of commands such as sudo, if present on the command-line, to match + the permissions to whatever the final command is likely to run + under. When looking up the gain-privileges and command styles, the + command component of the zstyle context will end with a slash + (`/') followed by the command that would be used to gain + privileges. + +_combination [ -s PATTERN ] TAG STYLE SPEC ... FIELD OPTS ... + This function is used to complete combinations of values, for + example pairs of hostnames and usernames. The STYLE argument + gives the style which defines the pairs; it is looked up in a + context with the TAG specified. + + The style name consists of field names separated by hyphens, for + example `users-hosts-ports'. For each field for a value is + already known, a SPEC of the form `FIELD=PATTERN' is given. For + example, if the command line so far specifies a user `pws', the + argument `users=pws' should appear. + + The next argument with no equals sign is taken as the name of the + field for which completions should be generated (presumably not + one of the FIELDs for which the value is known). + + The matches generated will be taken from the value of the style. + These should contain the possible values for the combinations in + the appropriate order (users, hosts, ports in the example above). + The values for the different fields are separated by colons. This + can be altered with the option -s to _combination which specifies a + pattern. Typically this is a character class, as for example `-s + "[:@]"' in the case of the users-hosts style. Each + `FIELD=PATTERN' specification restricts the completions which + apply to elements of the style with appropriately matching fields. + + If no style with the given name is defined for the given tag, or + if none of the strings in style's value match, but a function name + of the required field preceded by an underscore is defined, that + function will be called to generate the matches. For example, if + there is no `users-hosts-ports' or no matching hostname when a + host is required, the function `_hosts' will automatically be + called. + + If the same name is used for more than one field, in both the + `FIELD=PATTERN' and the argument that gives the name of the field + to be completed, the number of the field (starting with one) may + be given after the fieldname, separated from it by a colon. + + All arguments after the required field name are passed to compadd + when generating matches from the style value, or to the functions + for the fields if they are called. + +_command_names [ -e | - ] + This function completes words that are valid at command position: + names of aliases, builtins, hashed commands, functions, and so on. + With the -e flag, only hashed commands are completed. The - flag + is ignored. + +_comp_locale + This function resets all the locale categories other than LC_CTYPE + to `C' so that the output from external commands can be easily + analyzed by the completion system. LC_CTYPE retains the current + value (taking LC_ALL and LANG into account), ensuring that + non-ASCII characters in file names are still handled properly. + + This function should normally be run only in a subshell, because + the new locale is exported to the environment. Typical usage would + be `$(_comp_locale; COMMAND ...)'. + +_completers [ -p ] + This function completes names of completers. + + + -p + Include the leading underscore (`_') in the matches. + + +_describe [-12JVx] [ -oO | -t TAG ] DESCR NAME1 [ NAME2 ] [ OPT ... ] + [ -- NAME1 [ NAME2 ] [ OPT ... ] ... ] + This function associates completions with descriptions. Multiple + groups separated by -- can be supplied, potentially with different + completion options OPTs. + + The DESCR is taken as a string to display above the matches if the + format style for the descriptions tag is set. This is followed by + one or two names of arrays followed by options to pass to compadd. + The array NAME1 contains the possible completions with their + descriptions in the form `COMPLETION:DESCRIPTION'. Any literal + colons in COMPLETION must be quoted with a backslash. If a NAME2 + is given, it should have the same number of elements as NAME1; in + this case the corresponding elements are added as possible + completions instead of the COMPLETION strings from NAME1. The + completion list will retain the descriptions from NAME1. Finally, + a set of completion options can appear. + + If the option `-o' appears before the first argument, the matches + added will be treated as names of command options (N.B. not shell + options), typically following a `-', `--' or `+' on the command + line. In this case _describe uses the prefix-hidden, + prefix-needed and verbose styles to find out if the strings should + be added as completions and if the descriptions should be shown. + Without the `-o' option, only the verbose style is used to decide + how descriptions are shown. If `-O' is used instead of `-o', + command options are completed as above but _describe will not + handle the prefix-needed style. + + With the -t option a TAG can be specified. The default is + `values' or, if the -o option is given, `options'. + + The options -1, -2, -J, -V, -x are passed to _next_label. + + If selected by the list-grouped style, strings with the same + description will appear together in the list. + + _describe uses the _all_labels function to generate the matches, so + it does not need to appear inside a loop over tag labels. + +_description [ -x ] [ -12VJ ] TAG NAME DESCR [ SPEC ... ] + This function is not to be confused with the previous one; it is + used as a helper function for creating options to compadd. It is + buried inside many of the higher level completion functions and so + often does not need to be called directly. + + The styles listed below are tested in the current context using the + given TAG. The resulting options for compadd are put into the + array named NAME (this is traditionally `expl', but this + convention is not enforced). The description for the + corresponding set of matches is passed to the function in DESCR. + + The styles tested are: format, hidden, matcher, ignore-line, + ignored-patterns, group-name and sort. The format style is first + tested for the given TAG and then for the descriptions tag if no + value was found, while the remainder are only tested for the tag + given as the first argument. The function also calls _setup which + tests some more styles. + + The string returned by the format style (if any) will be modified + so that the sequence `%d' is replaced by the DESCR given as the + third argument without any leading or trailing white space. If, + after removing the white space, the DESCR is the empty string, the + format style will not be used and the options put into the NAME + array will not contain an explanation string to be displayed above + the matches. + + If _description is called with more than three arguments, the + additional SPECs should be of the form `CHAR:STR'. These supply + escape sequence replacements for the format style: every + appearance of `%CHAR' will be replaced by STRING. + + If the -x option is given, the description will be passed to + compadd using the -x option instead of the default -X. This means + that the description will be displayed even if there are no + corresponding matches. + + The options placed in the array NAME take account of the + group-name style, so matches are placed in a separate group where + necessary. The group normally has its elements sorted (by passing + the option -J to compadd), but if an option starting with `-V', + `-J', `-1', or `-2' is passed to _description, that option will be + included in the array. Hence it is possible for the completion + group to be unsorted by giving the option `-V', `-1V', or `-2V'. + + In most cases, the function will be used like this: + + + local expl + _description files expl file + compadd "$expl[@]" - "$files[@]" + + Note the use of the parameter expl, the hyphen, and the list of + matches. Almost all calls to compadd within the completion system + use a similar format; this ensures that user-specified styles are + correctly passed down to the builtins which implement the + internals of completion. + +_dir_list [ -s SEP ] [ -S ] + Complete a list of directory names separated by colons (the same + format as $PATH). + + + -s SEP + Use SEP as separator between items. SEP defaults to a colon + (`:'). + + -S + Add SEP instead of slash (`/') as an autoremoveable suffix. + + +_dispatch CONTEXT STRING ... + This sets the current context to CONTEXT and looks for completion + functions to handle this context by hunting through the list of + command names or special contexts (as described above for compdef) + given as STRINGs. The first completion function to be defined for + one of the contexts in the list is used to generate matches. + Typically, the last STRING is -default- to cause the function for + default completion to be used as a fallback. + + The function sets the parameter $service to the STRING being + tried, and sets the CONTEXT/COMMAND field (the fourth) of the + $curcontext parameter to the CONTEXT given as the first argument. + +_email_addresses [ -c ] [ -n PLUGIN ] + Complete email addresses. Addresses are provided by plugins. + + + -c + Complete bare localhost@domain.tld addresses, without a name + part or a comment. Without this option, RFC822 `FIRSTNAME + LASTNAME <ADDRESS>' strings are completed. + + -n PLUGIN + Complete aliases from PLUGIN. + + + The following plugins are available by default: _email-ldap (see + the filter style), _email-local (completes USER@HOSTNAME Unix + addresses), _email-mail (completes aliases from ~/.mailrc), + _email-mush, _email-mutt, and _email-pine. + + Addresses from the _email-FOO plugin are added under the tag + `email-FOO'. + + _Writing plugins_ + + Plugins are written as separate functions with names starting with + `_email-'. They are invoked with the -c option and compadd + options. They should either do their own completion or set the + $reply array to a list of `ALIAS:ADDRESS' elements and return 300. + New plugins will be picked up and run automatically. + +_files + The function _files is a wrapper around _path_files. It supports + all of the same functionality, with some enhancements -- notably, + it respects the list-dirs-first style, and it allows users to + override the behaviour of the -g and -/ options with the + file-patterns style. _files should therefore be preferred over + _path_files in most cases. + + This function accepts the full set of options allowed by + _path_files, described below. + +_gnu_generic + This function is a simple wrapper around the _arguments function + described above. It can be used to determine automatically the + long options understood by commands that produce a list when + passed the option `--help'. It is intended to be used as a + top-level completion function in its own right. For example, to + enable option completion for the commands foo and bar, use + + + compdef _gnu_generic foo bar + + after the call to compinit. + + The completion system as supplied is conservative in its use of + this function, since it is important to be sure the command + understands the option `--help'. + +_guard [ OPTIONS ] PATTERN DESCR + This function displays DESCR if PATTERN matches the string to be + completed. It is intended to be used in the ACTION for the + specifications passed to _arguments and similar functions. + + The return status is zero if the message was displayed and the + word to complete is not empty, and non-zero otherwise. + + The PATTERN may be preceded by any of the options understood by + compadd that are passed down from _description, namely -M, -J, -V, + -1, -2, -n, -F and -X. All of these options will be ignored. + This fits in conveniently with the argument-passing conventions of + actions for _arguments. + + As an example, consider a command taking the options -n and -none, + where -n must be followed by a numeric value in the same word. By + using: + + + _arguments '-n-: :_guard "[0-9]#" "numeric value"' '-none' + + _arguments can be made to both display the message `numeric value' + and complete options after `-n<TAB>'. If the `-n' is already + followed by one or more digits (the pattern passed to _guard) only + the message will be displayed; if the `-n' is followed by another + character, only options are completed. + +_message [ -r12 ] [ -VJ GROUP ] DESCR +_message -e [ TAG ] DESCR + The DESCR is used in the same way as the third argument to the + _description function, except that the resulting string will + always be shown whether or not matches were generated. This is + useful for displaying a help message in places where no + completions can be generated. + + The format style is examined with the messages tag to find a + message; the usual tag, descriptions, is used only if the style is + not set with the former. + + If the -r option is given, no style is used; the DESCR is taken + literally as the string to display. This is most useful when the + DESCR comes from a pre-processed argument list which already + contains an expanded description. Note that this option does not + disable the `%'-sequence parsing done by compadd. + + The -12VJ options and the GROUP are passed to compadd and hence + determine the group the message string is added to. + + The second -e form gives a description for completions with the tag + TAG to be shown even if there are no matches for that tag. This + form is called by _arguments in the event that there is no action + for an option specification. The tag can be omitted and if so the + tag is taken from the parameter $curtag; this is maintained by the + completion system and so is usually correct. Note that if there + are no matches at the time this function is called, + compstate[insert] is cleared, so additional matches generated + later are not inserted on the command line. + +_multi_parts [ -i ] SEP ARRAY + The argument SEP is a separator character. The ARRAY may be + either the name of an array parameter or a literal array in the + form `(foo bar)', a parenthesised list of words separated by + whitespace. The possible completions are the strings from the + array. However, each chunk delimited by SEP will be completed + separately. For example, the _tar function uses `_multi_parts / + PATHARRAY' to complete partial file paths from the given array of + complete file paths. + + The -i option causes _multi_parts to insert a unique match even if + that requires multiple separators to be inserted. This is not + usually the expected behaviour with filenames, but certain other + types of completion, for example those with a fixed set of + possibilities, may be more suited to this form. + + Like other utility functions, this function accepts the `-V', + `-J', `-1', `-2', `-n', `-f', `-X', `-M', `-P', `-S', `-r', `-R', + and `-q' options and passes them to the compadd builtin. + +_next_label [ -x ] [ -12VJ ] TAG NAME DESCR [ OPTION ... ] + This function is used to implement the loop over different tag + labels for a particular tag as described above for the tag-order + style. On each call it checks to see if there are any more tag + labels; if there is it returns status zero, otherwise non-zero. + As this function requires a current tag to be set, it must always + follow a call to _tags or _requested. + + The -x12VJ options and the first three arguments are passed to the + _description function. Where appropriate the TAG will be replaced + by a tag label in this call. Any description given in the + tag-order style is preferred to the DESCR passed to _next_label. + + The OPTIONs given after the DESCR are set in the parameter given + by NAME, and hence are to be passed to compadd or whatever + function is called to add the matches. + + Here is a typical use of this function for the tag foo. The call + to _requested determines if tag foo is required at all; the loop + over _next_label handles any labels defined for the tag in the + tag-order style. + + + local expl ret=1 + ... + if _requested foo; then + ... + while _next_label foo expl '...'; do + compadd "$expl[@]" ... && ret=0 + done + ... + fi + return ret + +_normal [ -P | -p PRECOMMAND ] + This is the standard function called to handle completion outside + any special -CONTEXT-. It is called both to complete the command + word and also the arguments for a command. In the second case, + _normal looks for a special completion for that command, and if + there is none it uses the completion for the -default- context. + + A second use is to reexamine the command line specified by the + $words array and the $CURRENT parameter after those have been + modified. For example, the function _precommand, which completes + after precommand specifiers such as nohup, removes the first word + from the words array, decrements the CURRENT parameter, then calls + `_normal -p $service'. The effect is that `nohup CMD ...' is + treated in the same way as `CMD ...'. + + + -P + Reset the list of precommands. This option should be used if + completing a command line which allows internal commands + (e.g. builtins and functions) regardless of prior precommands + (e.g. `zsh -c'). + + -p PRECOMMAND + Append PRECOMMAND to the list of precommands. This option + should be used in nearly all cases in which -P is not + applicable. + + + If the command name matches one of the patterns given by one of the + options -p or -P to compdef, the corresponding completion function + is called and then the parameter _compskip is checked. If it is + set completion is terminated at that point even if no matches have + been found. This is the same effect as in the -first- context. + +_options + This can be used to complete the names of shell options. It + provides a matcher specification that ignores a leading `no', + ignores underscores and allows upper-case letters to match their + lower-case counterparts (for example, `glob', `noglob', `NO_GLOB' + are all completed). Any arguments are propagated to the compadd + builtin. + +_options_set and _options_unset + These functions complete only set or unset options, with the same + matching specification used in the _options function. + + Note that you need to uncomment a few lines in the _main_complete + function for these functions to work properly. The lines in + question are used to store the option settings in effect before + the completion widget locally sets the options it needs. Hence + these functions are not generally used by the completion system. + +_parameters + This is used to complete the names of shell parameters. + + The option `-g PATTERN' limits the completion to parameters whose + type matches the PATTERN. The type of a parameter is that shown + by `print ${(t)PARAM}', hence judicious use of `*' in PATTERN is + probably necessary. + + All other arguments are passed to the compadd builtin. + +_path_files + This function is used throughout the completion system to complete + filenames. It allows completion of partial paths. For example, + the string `/u/i/s/sig' may be completed to + `/usr/include/sys/signal.h'. + + The options accepted by both _path_files and _files are: + + + -f + Complete all filenames. This is the default. + + -/ + Specifies that only directories should be completed. + + -g PATTERN + Specifies that only files matching the PATTERN should be + completed. + + -W PATHS + Specifies path prefixes that are to be prepended to the + string from the command line to generate the filenames but + that should not be inserted as completions nor shown in + completion listings. Here, PATHS may be the name of an array + parameter, a literal list of paths enclosed in parentheses or + an absolute pathname. + + -F IGNORED-FILES + This behaves as for the corresponding option to the compadd + builtin. It gives direct control over which filenames should + be ignored. If the option is not present, the + ignored-patterns style is used. + + + Both _path_files and _files also accept the following options + which are passed to compadd: `-J', `-V', `-1', `-2', `-n', `-X', + `-M', `-P', `-S', `-q', `-r', and `-R'. + + Finally, the _path_files function uses the styles expand, + ambiguous, special-dirs, list-suffixes and file-sort described + above. + +_pick_variant [ -b BUILTIN-LABEL ] [ -c COMMAND ] [ -r NAME ] + LABEL=PATTERN ... LABEL [ ARG ... ] + This function is used to resolve situations where a single command + name requires more than one type of handling, either because it + has more than one variant or because there is a name clash between + two different commands. + + The command to run is taken from the first element of the array + words unless this is overridden by the option -c. This command is + run and its output is compared with a series of patterns. + Arguments to be passed to the command can be specified at the end + after all the other arguments. The patterns to try in order are + given by the arguments LABEL=PATTERN; if the output of `COMMAND ARG + ...' contains PATTERN, then LABEL is selected as the label for the + command variant. If none of the patterns match, the final command + label is selected and status 1 is returned. + + If the `-b BUILTIN-LABEL' is given, the command is tested to see + if it is provided as a shell builtin, possibly autoloaded; if so, + the label BUILTIN-LABEL is selected as the label for the variant. + + If the `-r NAME' is given, the LABEL picked is stored in the + parameter named NAME. + + The results are also cached in the _cmd_variant associative array + indexed by the name of the command run. + +_regex_arguments NAME SPEC ... + This function generates a completion function NAME which matches + the specifications SPECs, a set of regular expressions as + described below. After running _regex_arguments, the function + NAME should be called as a normal completion function. The + pattern to be matched is given by the contents of the words array + up to the current cursor position joined together with null + characters; no quotation is applied. + + The arguments are grouped as sets of alternatives separated by `|', + which are tried one after the other until one matches. Each + alternative consists of a one or more specifications which are + tried left to right, with each pattern matched being stripped in + turn from the command line being tested, until all of the group + succeeds or until one fails; in the latter case, the next + alternative is tried. This structure can be repeated to arbitrary + depth by using parentheses; matching proceeds from inside to + outside. + + A special procedure is applied if no test succeeds but the + remaining command line string contains no null character (implying + the remaining word is the one for which completions are to be + generated). The completion target is restricted to the remaining + word and any ACTIONs for the corresponding patterns are executed. + In this case, nothing is stripped from the command line string. + The order of evaluation of the ACTIONs can be determined by the + tag-order style; the various formats supported by _alternative can + be used in ACTION. The DESCR is used for setting up the array + parameter expl. + + Specification arguments take one of following forms, in which + metacharacters such as `(', `)', `#' and `|' should be quoted. + + + /PATTERN/ [%LOOKAHEAD%] [-GUARD] [:TAG:DESCR:ACTION] + This is a single primitive component. The function tests + whether the combined pattern `(#b)((#B)PATTERN)LOOKAHEAD*' + matches the command line string. If so, `GUARD' is evaluated + and its return status is examined to determine if the test + has succeeded. The PATTERN string `[]' is guaranteed never + to match. The LOOKAHEAD is not stripped from the command + line before the next pattern is examined. + + The argument starting with : is used in the same manner as an + argument to _alternative. + + A component is used as follows: PATTERN is tested to see if + the component already exists on the command line. If it + does, any following specifications are examined to find + something to complete. If a component is reached but no such + pattern exists yet on the command line, the string containing + the ACTION is used to generate matches to insert at that + point. + + /PATTERN/+ [%LOOKAHEAD%] [-GUARD] [:TAG:DESCR:ACTION] + This is similar to `/PATTERN/ ...' but the left part of the + command line string (i.e. the part already matched by + previous patterns) is also considered part of the completion + target. + + /PATTERN/- [%LOOKAHEAD%] [-GUARD] [:TAG:DESCR:ACTION] + This is similar to `/PATTERN/ ...' but the ACTIONs of the + current and previously matched patterns are ignored even if + the following `PATTERN' matches the empty string. + + ( SPEC ) + Parentheses may be used to groups SPECs; note each parenthesis + is a single argument to _regex_arguments. + + SPEC # + This allows any number of repetitions of SPEC. + + SPEC SPEC + The two SPECs are to be matched one after the other as + described above. + + SPEC | SPEC + Either of the two SPECs can be matched. + + + The function _regex_words can be used as a helper function to + generate matches for a set of alternative words possibly with + their own arguments as a command line argument. + + Examples: + + + _regex_arguments _tst /$'[^\0]#\0'/ \ + /$'[^\0]#\0'/ :'compadd aaa' + + This generates a function _tst that completes aaa as its only + argument. The TAG and DESCRIPTION for the action have been + omitted for brevity (this works but is not recommended in normal + use). The first component matches the command word, which is + arbitrary; the second matches any argument. As the argument is + also arbitrary, any following component would not depend on aaa + being present. + + + _regex_arguments _tst /$'[^\0]#\0'/ \ + /$'aaa\0'/ :'compadd aaa' + + This is a more typical use; it is similar, but any following + patterns would only match if aaa was present as the first argument. + + + _regex_arguments _tst /$'[^\0]#\0'/ \( \ + /$'aaa\0'/ :'compadd aaa' \ + /$'bbb\0'/ :'compadd bbb' \) \# + + In this example, an indefinite number of command arguments may be + completed. Odd arguments are completed as aaa and even arguments + as bbb. Completion fails unless the set of aaa and bbb arguments + before the current one is matched correctly. + + + _regex_arguments _tst /$'[^\0]#\0'/ \ + \( /$'aaa\0'/ :'compadd aaa' \| \ + /$'bbb\0'/ :'compadd bbb' \) \# + + This is similar, but either aaa or bbb may be completed for any + argument. In this case _regex_words could be used to generate a + suitable expression for the arguments. + + + +_regex_words TAG DESCRIPTION SPEC ... + This function can be used to generate arguments for the + _regex_arguments command which may be inserted at any point where + a set of rules is expected. The TAG and DESCRIPTION give a + standard tag and description pertaining to the current context. + Each SPEC contains two or three arguments separated by a colon: + note that there is no leading colon in this case. + + Each SPEC gives one of a set of words that may be completed at + this point, together with arguments. It is thus roughly + equivalent to the _arguments function when used in normal + (non-regex) completion. + + The part of the SPEC before the first colon is the word to be + completed. This may contain a *; the entire word, before and after + the * is completed, but only the text before the * is required for + the context to be matched, so that further arguments may be + completed after the abbreviated form. + + The second part of SPEC is a description for the word being + completed. + + The optional third part of the SPEC describes how words following + the one being completed are themselves to be completed. It will be + evaluated in order to avoid problems with quoting. This means that + typically it contains a reference to an array containing previously + generated regex arguments. + + The option -t TERM specifies a terminator for the word instead of + the usual space. This is handled as an auto-removable suffix in + the manner of the option -s SEP to _values. + + The result of the processing by _regex_words is placed in the array + reply, which should be made local to the calling function. If the + set of words and arguments may be matched repeatedly, a # should + be appended to the generated array at that point. + + For example: + + + local -a reply + _regex_words mydb-commands 'mydb commands' \ + 'add:add an entry to mydb:$mydb_add_cmds' \ + 'show:show entries in mydb' + _regex_arguments _mydb "$reply[@]" + _mydb "$@" + + This shows a completion function for a command mydb which takes + two command arguments, add and show. show takes no arguments, + while the arguments for add have already been prepared in an array + mydb_add_cmds, quite possibly by a previous call to _regex_words. + +_requested [ -x ] [ -12VJ ] TAG [ NAME DESCR [ COMMAND [ ARG ... ] ] + This function is called to decide whether a tag already registered + by a call to _tags (see below) has been requested by the user and + hence completion should be performed for it. It returns status + zero if the tag is requested and non-zero otherwise. The function + is typically used as part of a loop over different tags as follows: + + + _tags foo bar baz + while _tags; do + if _requested foo; then + ... # perform completion for foo + fi + ... # test the tags bar and baz in the same way + ... # exit loop if matches were generated + done + + Note that the test for whether matches were generated is not + performed until the end of the _tags loop. This is so that the + user can set the tag-order style to specify a set of tags to be + completed at the same time. + + If NAME and DESCR are given, _requested calls the _description + function with these arguments together with the options passed to + _requested. + + If COMMAND is given, the _all_labels function will be called + immediately with the same arguments. In simple cases this makes it + possible to perform the test for the tag and the matching in one + go. For example: + + + local expl ret=1 + _tags foo bar baz + while _tags; do + _requested foo expl 'description' \ + compadd foobar foobaz && ret=0 + ... + (( ret )) || break + done + + If the COMMAND is not compadd, it must nevertheless be prepared to + handle the same options. + +_retrieve_cache CACHE_IDENTIFIER + This function retrieves completion information from the file given + by CACHE_IDENTIFIER, stored in a directory specified by the + cache-path style which defaults to ~/.zcompcache. The return + status is zero if retrieval was successful. It will only attempt + retrieval if the use-cache style is set, so you can call this + function without worrying about whether the user wanted to use the + caching layer. + + See _store_cache below for more details. + +_sep_parts + This function is passed alternating arrays and separators as + arguments. The arrays specify completions for parts of strings to + be separated by the separators. The arrays may be the names of + array parameters or a quoted list of words in parentheses. For + example, with the array `hosts=(ftp news)' the call `_sep_parts + '(foo bar)' @ hosts' will complete the string `f' to `foo' and + the string `b@n' to `bar@news'. + + This function accepts the compadd options `-V', `-J', `-1', `-2', + `-n', `-X', `-M', `-P', `-S', `-r', `-R', and `-q' and passes them + on to the compadd builtin used to add the matches. + +_sequence [ -s SEP ] [ -n MAX ] [ -d ] FUNCTION [ - ] ... + This function is a wrapper to other functions for completing items + in a separated list. The same function is used to complete each + item in the list. The separator is specified with the -s option. + If -s is omitted it will use `,'. Duplicate values are not matched + unless -d is specified. If there is a fixed or maximum number of + items in the list, this can be specified with the -n option. + + Common compadd options are passed on to the function. It is + possible to use compadd directly with _sequence, though _values may + be more appropriate in this situation. + +_setup TAG [ GROUP ] + This function sets up the special parameters used by the + completion system appropriately for the TAG given as the first + argument. It uses the styles list-colors, list-packed, + list-rows-first, last-prompt, accept-exact, menu and force-list. + + The optional GROUP supplies the name of the group in which the + matches will be placed. If it is not given, the TAG is used as + the group name. + + This function is called automatically from _description and hence + is not normally called explicitly. + +_store_cache CACHE_IDENTIFIER PARAM ... + This function, together with _retrieve_cache and _cache_invalid, + implements a caching layer which can be used in any completion + function. Data obtained by costly operations are stored in + parameters; this function then dumps the values of those + parameters to a file. The data can then be retrieved quickly from + that file via _retrieve_cache, even in different instances of the + shell. + + The CACHE_IDENTIFIER specifies the file which the data should be + dumped to. The file is stored in a directory specified by the + cache-path style which defaults to ~/.zcompcache. The remaining + PARAMs arguments are the parameters to dump to the file. + + The return status is zero if storage was successful. The function + will only attempt storage if the use-cache style is set, so you can + call this function without worrying about whether the user wanted + to use the caching layer. + + The completion function may avoid calling _retrieve_cache when it + already has the completion data available as parameters. However, + in that case it should call _cache_invalid to check whether the + data in the parameters and in the cache are still valid. + + See the _perl_modules completion function for a simple example of + the usage of the caching layer. + +_tags [ [ -C NAME ] TAG ... ] + If called with arguments, these are taken to be the names of tags + valid for completions in the current context. These tags are + stored internally and sorted by using the tag-order style. + + Next, _tags is called repeatedly without arguments from the same + completion function. This successively selects the first, second, + etc. set of tags requested by the user. The return status is zero + if at least one of the tags is requested and non-zero otherwise. + To test if a particular tag is to be tried, the _requested + function should be called (see above). + + If `-C NAME' is given, NAME is temporarily stored in the ARGUMENT + field (the fifth) of the context in the curcontext parameter + during the call to _tags; the field is restored on exit. This + allows _tags to use a more specific context without having to + change and reset the curcontext parameter (which has the same + effect). + +_tilde_files + Like _files, but resolve leading tildes according to the rules of + filename expansion, so the suggested completions don't start with + a `~' even if the filename on the command-line does. + +_values [ -O NAME ] [ -s SEP ] [ -S SEP ] [ -wC ] DESC SPEC ... + This is used to complete arbitrary keywords (values) and their + arguments, or lists of such combinations. + + If the first argument is the option `-O NAME', it will be used in + the same way as by the _arguments function. In other words, the + elements of the NAME array will be passed to compadd when + executing an action. + + If the first argument (or the first argument after `-O NAME') is + `-s', the next argument is used as the character that separates + multiple values. This character is automatically added after each + value in an auto-removable fashion (see below); all values + completed by `_values -s' appear in the same word on the command + line, unlike completion using _arguments. If this option is not + present, only a single value will be completed per word. + + Normally, _values will only use the current word to determine + which values are already present on the command line and hence are + not to be completed again. If the -w option is given, other + arguments are examined as well. + + The first non-option argument, DESC, is used as a string to print + as a description before listing the values. + + All other arguments describe the possible values and their + arguments in the same format used for the description of options by + the _arguments function (see above). The only differences are that + no minus or plus sign is required at the beginning, values can + have only one argument, and the forms of action beginning with an + equal sign are not supported. + + The character separating a value from its argument can be set + using the option -S (like -s, followed by the character to use as + the separator in the next argument). By default the equals sign + will be used as the separator between values and arguments. + + Example: + + + _values -s , 'description' \ + '*foo[bar]' \ + '(two)*one[number]:first count:' \ + 'two[another number]::second count:(1 2 3)' + + This describes three possible values: `foo', `one', and `two'. + The first is described as `bar', takes no argument and may appear + more than once. The second is described as `number', may appear + more than once, and takes one mandatory argument described as + `first count'; no action is specified, so it will not be + completed. The `(two)' at the beginning says that if the value + `one' is on the line, the value `two' will no longer be considered + a possible completion. Finally, the last value (`two') is + described as `another number' and takes an optional argument + described as `second count' for which the completions (to appear + after an `=') are `1', `2', and `3'. The _values function will + complete lists of these values separated by commas. + + Like _arguments, this function temporarily adds another context + name component to the arguments element (the fifth) of the current + context while executing the ACTION. Here this name is just the + name of the value for which the argument is completed. + + The style verbose is used to decide if the descriptions for the + values (but not those for the arguments) should be printed. + + The associative array val_args is used to report values and their + arguments; this works similarly to the opt_args associative array + used by _arguments. Hence the function calling _values should + declare the local parameters state, state_descr, line, context and + val_args: + + + local context state state_descr line + typeset -A val_args + + when using an action of the form `->STRING'. With this function + the context parameter will be set to the name of the value whose + argument is to be completed. Note that for _values, the state and + state_descr are scalars rather than arrays. Only a single + matching state is returned. + + Note also that _values normally adds the character used as the + separator between values as an auto-removable suffix (similar to a + `/' after a directory). However, this is not possible for a + `->STRING' action as the matches for the argument are generated by + the calling function. To get the usual behaviour, the calling + function can add the separator X as a suffix by passing the + options `-qS X' either directly or indirectly to compadd. + + The option -C is treated in the same way as it is by _arguments. + In that case the parameter curcontext should be made local instead + of context (as described above). + +_wanted [ -x ] [ -C NAME ] [ -12VJ ] TAG NAME DESCR COMMAND [ ARG ...] + In many contexts, completion can only generate one particular set + of matches, usually corresponding to a single tag. However, it is + still necessary to decide whether the user requires matches of + this type. This function is useful in such a case. + + The arguments to _wanted are the same as those to _requested, i.e. + arguments to be passed to _description. However, in this case the + COMMAND is not optional; all the processing of tags, including + the loop over both tags and tag labels and the generation of + matches, is carried out automatically by _wanted. + + Hence to offer only one tag and immediately add the corresponding + matches with the given description: + + + local expl + _wanted tag expl 'description' \ + compadd matches... + + Note that, as for _requested, the COMMAND must be able to accept + options to be passed down to compadd. + + Like _tags this function supports the -C option to give a + different name for the argument context field. The -x option has + the same meaning as for _description. + +_widgets [ -g PATTERN ] + This function completes names of zle widgets (see *Note Zle + Widgets::). The PATTERN, if present, is matched against values of + the $widgets special parameter, documented in *Note The + zsh/zleparameter Module::. + + + + +File: zsh.info, Node: Completion System Variables, Next: Completion Directories, Prev: Completion Functions, Up: Completion System + +20.7 Completion System Variables +================================ + + + +There are some standard variables, initialised by the _main_complete +function and then used from other functions. + +The standard variables are: + + +_comp_caller_options + The completion system uses setopt to set a number of options. This + allows functions to be written without concern for compatibility + with every possible combination of user options. However, + sometimes completion needs to know what the user's option + preferences are. These are saved in the _comp_caller_options + associative array. Option names, spelled in lowercase without + underscores, are mapped to one or other of the strings `on' and + `off'. + + + +_comp_priv_prefix + Completion functions such as _sudo can set the _comp_priv_prefix + array to a command prefix that may then be used by _call_program to + match the privileges when calling programs to generate matches. + + +Two more features are offered by the _main_complete function. The +arrays compprefuncs and comppostfuncs may contain names of functions +that are to be called immediately before or after completion has been +tried. A function will only be called once unless it explicitly +reinserts itself into the array. + + + + +File: zsh.info, Node: Completion Directories, Prev: Completion System Variables, Up: Completion System + +20.8 Completion Directories +=========================== + + + +In the source distribution, the files are contained in various +subdirectories of the Completion directory. They may have been +installed in the same structure, or into one single function directory. +The following is a description of the files found in the original +directory structure. If you wish to alter an installed file, you will +need to copy it to some directory which appears earlier in your fpath +than the standard directory where it appears. + + +Base + The core functions and special completion widgets automatically + bound to keys. You will certainly need most of these, though will + probably not need to alter them. Many of these are documented + above. + +Zsh + Functions for completing arguments of shell builtin commands and + utility functions for this. Some of these are also used by + functions from the Unix directory. + +Unix + Functions for completing arguments of external commands and suites + of commands. They may need modifying for your system, although in + many cases some attempt is made to decide which version of a + command is present. For example, completion for the mount command + tries to determine the system it is running on, while completion + for many other utilities try to decide whether the GNU version of + the command is in use, and hence whether the --help option is + supported. + +X, AIX, BSD, ... + Completion and utility function for commands available only on + some systems. These are not arranged hierarchically, so, for + example, both the Linux and Debian directories, as well as the X + directory, may be useful on your system. + + + +File: zsh.info, Node: Completion Using compctl, Next: Zsh Modules, Prev: Completion System, Up: Top + +21 Completion Using compctl +*************************** + + + +21.1 Types of completion +======================== + +This version of zsh has two ways of performing completion of words on +the command line. New users of the shell may prefer to use the newer +and more powerful system based on shell functions; this is described in +*Note Completion System::, and the basic shell mechanisms which support +it are described in *Note Completion Widgets::. This chapter describes +the older compctl command. + +21.2 Description +================ + + + +compctl [ -CDT ] OPTIONS [ COMMAND ... ] + +compctl [ -CDT ] OPTIONS [ -x PATTERN OPTIONS - ... -- ] + + [ + OPTIONS [ -x ... -- ] ... [+] ] [ COMMAND ... ] + +compctl -M MATCH-SPECS ... + +compctl -L [ -CDTM ] [ COMMAND ... ] + +compctl + COMMAND ... + + +Control the editor's completion behavior according to the supplied set +of OPTIONS. Various editing commands, notably expand-or-complete-word, +usually bound to tab, will attempt to complete a word typed by the +user, while others, notably delete-char-or-list, usually bound to ^D in +EMACS editing mode, list the possibilities; compctl controls what those +possibilities are. They may for example be filenames (the most common +case, and hence the default), shell variables, or words from a +user-specified list. + +* Menu: + +* Command Flags:: +* Option Flags:: +* Alternative Completion:: +* Extended Completion:: +* Example:: + + + +File: zsh.info, Node: Command Flags, Next: Option Flags, Up: Completion Using compctl + +21.3 Command Flags +================== + +Completion of the arguments of a command may be different for each +command or may use the default. The behavior when completing the +command word itself may also be separately specified. These correspond +to the following flags and arguments, all of which (except for -L) may +be combined with any combination of the OPTIONS described subsequently +in *Note Option Flags::: + + +COMMAND ... + controls completion for the named commands, which must be listed + last on the command line. If completion is attempted for a + command with a pathname containing slashes and no completion + definition is found, the search is retried with the last pathname + component. If the command starts with a =, completion is tried + with the pathname of the command. + + Any of the COMMAND strings may be patterns of the form normally + used for filename generation. These should be quoted to protect + them from immediate expansion; for example the command string + 'foo*' arranges for completion of the words of any command + beginning with foo. When completion is attempted, all pattern + completions are tried in the reverse order of their definition + until one matches. By default, completion then proceeds as + normal, i.e. the shell will try to generate more matches for the + specific command on the command line; this can be overridden by + including -tn in the flags for the pattern completion. + + Note that aliases are expanded before the command name is + determined unless the COMPLETE_ALIASES option is set. Commands + may not be combined with the -C, -D or -T flags. + +-C + controls completion when the command word itself is being + completed. If no compctl -C command has been issued, the names + of any executable command (whether in the path or specific to the + shell, such as aliases or functions) are completed. + +-D + controls default completion behavior for the arguments of commands + not assigned any special behavior. If no compctl -D command has + been issued, filenames are completed. + +-T + supplies completion flags to be used before any other processing is + done, even before processing for compctls defined for specific + commands. This is especially useful when combined with extended + completion (the -x flag, see *Note Extended Completion:: below). + Using this flag you can define default behavior which will apply + to all commands without exception, or you can alter the standard + behavior for all commands. For example, if your access to the + user database is too slow and/or it contains too many users (so + that completion after `~' is too slow to be usable), you can use + + + compctl -T -x 's[~] C[0,[^/]#]' -k friends -S/ -tn + + to complete the strings in the array friends after a `~'. The + C[...] argument is necessary so that this form of ~-completion is + not tried after the directory name is finished. + +-L + lists the existing completion behavior in a manner suitable for + putting into a start-up script; the existing behavior is not + changed. Any combination of the above forms, or the -M flag + (which must follow the -L flag), may be specified, otherwise all + defined completions are listed. Any other flags supplied are + ignored. + +_no argument_ + If no argument is given, compctl lists all defined completions in + an abbreviated form; with a list of OPTIONS, all completions with + those flags set (not counting extended completion) are listed. + + +If the + flag is alone and followed immediately by the COMMAND list, +the completion behavior for all the commands in the list is reset to +the default. In other words, completion will subsequently use the +options specified by the -D flag. + +The form with -M as the first and only option defines global matching +specifications (see *Note Completion Matching Control::). The match +specifications given will be used for every completion attempt (only +when using compctl, not with the new completion system) and are tried +in the order in which they are defined until one generates at least one +match. E.g.: + + + compctl -M '' 'm:{a-zA-Z}={A-Za-z}' + +This will first try completion without any global match specifications +(the empty string) and, if that generates no matches, will try case +insensitive completion. + + + + +File: zsh.info, Node: Option Flags, Next: Alternative Completion, Prev: Command Flags, Up: Completion Using compctl + +21.4 Option Flags +================= + + +[ -fcFBdeaRGovNAIOPZEnbjrzu/12 ] + +[ -k ARRAY ] [ -g GLOBSTRING ] [ -s SUBSTSTRING ] + +[ -K FUNCTION ] + +[ -Q ] [ -P PREFIX ] [ -S SUFFIX ] + +[ -W FILE-PREFIX ] [ -H NUM PATTERN ] + +[ -q ] [ -X EXPLANATION ] [ -Y EXPLANATION ] + +[ -y FUNC-OR-VAR ] [ -l CMD ] [ -h CMD ] [ -U ] + +[ -t CONTINUE ] [ -J NAME ] [ -V NAME ] + +[ -M MATCH-SPEC ] + + +The remaining OPTIONS specify the type of command arguments to look for +during completion. Any combination of these flags may be specified; +the result is a sorted list of all the possibilities. The options are +as follows. + +* Menu: + +* Simple Flags:: +* Flags with Arguments:: +* Control Flags:: + + + +File: zsh.info, Node: Simple Flags, Next: Flags with Arguments, Up: Option Flags + +21.4.1 Simple Flags +------------------- + +These produce completion lists made up by the shell itself: + + +-f + Filenames and file system paths. + +-/ + Just file system paths. + +-c + Command names, including aliases, shell functions, builtins and + reserved words. + +-F + Function names. + +-B + Names of builtin commands. + +-m + Names of external commands. + +-w + Reserved words. + +-a + Alias names. + +-R + Names of regular (non-global) aliases. + +-G + Names of global aliases. + +-d + This can be combined with -F, -B, -w, -a, -R and -G to get names + of disabled functions, builtins, reserved words or aliases. + +-e + This option (to show enabled commands) is in effect by default, but + may be combined with -d; -de in combination with -F, -B, -w, -a, + -R and -G will complete names of functions, builtins, reserved + words or aliases whether or not they are disabled. + +-o + Names of shell options (see *Note Options::). + +-v + Names of any variable defined in the shell. + +-N + Names of scalar (non-array) parameters. + +-A + Array names. + +-I + Names of integer variables. + +-O + Names of read-only variables. + +-p + Names of parameters used by the shell (including special + parameters). + +-Z + Names of shell special parameters. + +-E + Names of environment variables. + +-n + Named directories. + +-b + Key binding names. + +-j + Job names: the first word of the job leader's command line. This + is useful with the kill builtin. + +-r + Names of running jobs. + +-z + Names of suspended jobs. + +-u + User names. + + + + +File: zsh.info, Node: Flags with Arguments, Next: Control Flags, Prev: Simple Flags, Up: Option Flags + +21.4.2 Flags with Arguments +--------------------------- + +These have user supplied arguments to determine how the list of +completions is to be made up: + + +-k ARRAY + Names taken from the elements of $ARRAY (note that the `$' does + not appear on the command line). Alternatively, the argument + ARRAY itself may be a set of space- or comma-separated values in + parentheses, in which any delimiter may be escaped with a + backslash; in this case the argument should be quoted. For + example, + + + compctl -k "(cputime filesize datasize stacksize + coredumpsize resident descriptors)" limit + +-g GLOBSTRING + The GLOBSTRING is expanded using filename globbing; it should be + quoted to protect it from immediate expansion. The resulting + filenames are taken as the possible completions. Use `*(/)' + instead of `*/' for directories. The fignore special parameter is + not applied to the resulting files. More than one pattern may be + given separated by blanks. (Note that brace expansion is _not_ + part of globbing. Use the syntax `(either|or)' to match + alternatives.) + +-s SUBSTSTRING + The SUBSTSTRING is split into words and these words are than + expanded using all shell expansion mechanisms (see *Note + Expansion::). The resulting words are taken as possible + completions. The fignore special parameter is not applied to the + resulting files. Note that -g is faster for filenames. + +-K FUNCTION + Call the given function to get the completions. Unless the name + starts with an underscore, the function is passed two arguments: + the prefix and the suffix of the word on which completion is to be + attempted, in other words those characters before the cursor + position, and those from the cursor position onwards. The whole + command line can be accessed with the -c and -l flags of the read + builtin. The function should set the variable reply to an array + containing the completions (one completion per element); note that + reply should not be made local to the function. From such a + function the command line can be accessed with the -c and -l flags + to the read builtin. For example, + + + function whoson { reply=(`users`); } + compctl -K whoson talk + + completes only logged-on users after `talk'. Note that `whoson' + must return an array, so `reply=`users`' would be incorrect. + +-H NUM PATTERN + The possible completions are taken from the last NUM history + lines. Only words matching PATTERN are taken. If NUM is zero or + negative the whole history is searched and if PATTERN is the empty + string all words are taken (as with `*'). A typical use is + + + compctl -D -f + -H 0 '' + + which forces completion to look back in the history list for a + word if no filename matches. + + + + +File: zsh.info, Node: Control Flags, Prev: Flags with Arguments, Up: Option Flags + +21.4.3 Control Flags +-------------------- + +These do not directly specify types of name to be completed, but +manipulate the options that do: + + +-Q + This instructs the shell not to quote any metacharacters in the + possible completions. Normally the results of a completion are + inserted into the command line with any metacharacters quoted so + that they are interpreted as normal characters. This is + appropriate for filenames and ordinary strings. However, for + special effects, such as inserting a backquoted expression from a + completion array (-k) so that the expression will not be evaluated + until the complete line is executed, this option must be used. + +-P PREFIX + The PREFIX is inserted just before the completed string; any + initial part already typed will be completed and the whole PREFIX + ignored for completion purposes. For example, + + + compctl -j -P "%" kill + + inserts a `%' after the kill command and then completes job names. + +-S SUFFIX + When a completion is found the SUFFIX is inserted after the + completed string. In the case of menu completion the suffix is + inserted immediately, but it is still possible to cycle through the + list of completions by repeatedly hitting the same key. + +-W FILE-PREFIX + With directory FILE-PREFIX: for command, file, directory and + globbing completion (options -c, -f, -/, -g), the file prefix is + implicitly added in front of the completion. For example, + + + compctl -/ -W ~/Mail maildirs + + completes any subdirectories to any depth beneath the directory + ~/Mail, although that prefix does not appear on the command line. + The FILE-PREFIX may also be of the form accepted by the -k flag, + i.e. the name of an array or a literal list in parenthesis. In + this case all the directories in the list will be searched for + possible completions. + +-q + If used with a suffix as specified by the -S option, this causes + the suffix to be 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; this + the same rule used for the AUTO_REMOVE_SLASH option. The option + is most useful for list separators (comma, colon, etc.). + +-l CMD + This option restricts the range of command line words that are + considered to be arguments. If combined with one of the extended + completion patterns `p[...]', `r[...]', or `R[...]' (see *Note + Extended Completion:: below) the range is restricted to the range + of arguments specified in the brackets. Completion is then + performed as if these had been given as arguments to the CMD + supplied with the option. If the CMD string is empty the first + word in the range is instead taken as the command name, and + command name completion performed on the first word in the range. + For example, + + + compctl -x 'r[-exec,;]' -l '' -- find + + completes arguments between `-exec' and the following `;' (or the + end of the command line if there is no such string) as if they were + a separate command line. + +-h CMD + Normally zsh completes quoted strings as a whole. With this option, + completion can be done separately on different parts of such + strings. It works like the -l option but makes the completion code + work on the parts of the current word that are separated by + spaces. These parts are completed as if they were arguments to the + given CMD. If CMD is the empty string, the first part is completed + as a command name, as with -l. + +-U + Use the whole list of possible completions, whether or not they + actually match the word on the command line. The word typed so far + will be deleted. This is most useful with a function (given by the + -K option) which can examine the word components passed to it (or + via the read builtin's -c and -l flags) and use its own criteria + to decide what matches. If there is no completion, the original + word is retained. Since the produced possible completions seldom + have interesting common prefixes and suffixes, menu completion is + started immediately if AUTO_MENU is set and this flag is used. + +-y FUNC-OR-VAR + The list provided by FUNC-OR-VAR is displayed instead of the list + of completions whenever a listing is required; the actual + completions to be inserted are not affected. It can be provided + in two ways. Firstly, if FUNC-OR-VAR begins with a $ it defines a + variable, or if it begins with a left parenthesis a literal array, + which contains the list. A variable may have been set by a call + to a function using the -K option. Otherwise it contains the name + of a function which will be executed to create the list. The + function will be passed as an argument list all matching + completions, including prefixes and suffixes expanded in full, and + should set the array reply to the result. In both cases, the + display list will only be retrieved after a complete list of + matches has been created. + + Note that the returned list does not have to correspond, even in + length, to the original set of matches, and may be passed as a + scalar instead of an array. No special formatting of characters is + performed on the output in this case; in particular, newlines are + printed literally and if they appear output in columns is + suppressed. + +-X EXPLANATION + Print EXPLANATION when trying completion on the current set of + options. A `%n' in this string is replaced by the number of + matches that were added for this explanation string. The + explanation only appears if completion was tried and there was no + unique match, or when listing completions. Explanation strings + will be listed together with the matches of the group specified + together with the -X option (using the -J or -V option). If the + same explanation string is given to multiple -X options, the + string appears only once (for each group) and the number of + matches shown for the `%n' is the total number of all matches for + each of these uses. In any case, the explanation string will only + be shown if there was at least one match added for the explanation + string. + + The sequences %B, %b, %S, %s, %U, and %u specify output attributes + (bold, standout, and underline), %F, %f, %K, %k specify foreground + and background colours, and %{...%} can be used to include literal + escape sequences as in prompts. + +-Y EXPLANATION + Identical to -X, except that the EXPLANATION first undergoes + expansion following the usual rules for strings in double quotes. + The expansion will be carried out after any functions are called + for the -K or -y options, allowing them to set variables. + +-t CONTINUE + The CONTINUE-string contains a character that specifies which set + of completion flags should be used next. It is useful: + + (i) With -T, or when trying a list of pattern completions, when + compctl would usually continue with ordinary processing after + finding matches; this can be suppressed with `-tn'. + + (ii) With a list of alternatives separated by +, when compctl + would normally stop when one of the alternatives generates + matches. It can be forced to consider the next set of completions + by adding `-t+' to the flags of the alternative before the `+'. + + (iii) In an extended completion list (see below), when compctl + would normally continue until a set of conditions succeeded, then + use only the immediately following flags. With `-t-', compctl will + continue trying extended completions after the next `-'; with + `-tx' it will attempt completion with the default flags, in other + words those before the `-x'. + +-J NAME + This gives the name of the group the matches should be placed in. + Groups are listed and sorted separately; likewise, menu completion + will offer the matches in the groups in the order in which the + groups were defined. If no group name is explicitly given, the + matches are stored in a group named default. The first time a + group name is encountered, a group with that name is created. + After that all matches with the same group name are stored in that + group. + + This can be useful with non-exclusive alternative completions. For + example, in + + + compctl -f -J files -t+ + -v -J variables foo + + both files and variables are possible completions, as the -t+ + forces both sets of alternatives before and after the + to be + considered at once. Because of the -J options, however, all files + are listed before all variables. + +-V NAME + Like -J, but matches within the group will not be sorted in + listings nor in menu completion. These unsorted groups are in a + different name space from the sorted ones, so groups defined as -J + files and -V files are distinct. + +-1 + If given together with the -V option, makes only consecutive + duplicates in the group be removed. 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. + +-M MATCH-SPEC + This defines additional matching control specifications that + should be used only when testing words for the list of flags this + flag appears in. The format of the MATCH-SPEC string is described + in *Note Completion Matching Control::. + + + + +File: zsh.info, Node: Alternative Completion, Next: Extended Completion, Prev: Option Flags, Up: Completion Using compctl + +21.5 Alternative Completion +=========================== + + +compctl [ -CDT ] OPTIONS + OPTIONS [ + ... ] [ + ] COMMAND ... + + +The form with `+' specifies alternative options. Completion is tried +with the options before the first `+'. If this produces no matches +completion is tried with the flags after the `+' and so on. If there +are no flags after the last `+' and a match has not been found up to +that point, default completion is tried. If the list of flags contains +a -t with a + character, the next list of flags is used even if the +current list produced matches. + + + + +File: zsh.info, Node: Extended Completion, Next: Example, Prev: Alternative Completion, Up: Completion Using compctl + +Additional options are available that restrict completion to some part +of the command line; this is referred to as `extended completion'. + + + +21.6 Extended Completion +======================== + + +compctl [ -CDT ] OPTIONS -x PATTERN OPTIONS - ... -- + + [ COMMAND ... ] + +compctl [ -CDT ] OPTIONS [ -x PATTERN OPTIONS - ... -- ] + + [ + OPTIONS [ -x ... -- ] ... [+] ] [ COMMAND ... ] + + +The form with `-x' specifies extended completion for the commands +given; as shown, it may be combined with alternative completion using +`+'. Each PATTERN is examined in turn; when a match is found, the +corresponding OPTIONS, as described in *Note Option Flags:: above, are +used to generate possible completions. If no PATTERN matches, the +OPTIONS given before the -x are used. + +Note that each pattern should be supplied as a single argument and +should be quoted to prevent expansion of metacharacters by the shell. + +A PATTERN is built of sub-patterns separated by commas; it matches if +at least one of these sub-patterns matches (they are `or'ed). These +sub-patterns are in turn composed of other sub-patterns separated by +white spaces which match if all of the sub-patterns match (they are +`and'ed). An element of the sub-patterns is of the form `C[...][...]', +where the pairs of brackets may be repeated as often as necessary, and +matches if any of the sets of brackets match (an `or'). The example +below makes this clearer. + +The elements may be any of the following: + + +s[STRING]... + Matches if the current word on the command line starts with one of + the strings given in brackets. The STRING is not removed and is + not part of the completion. + +S[STRING]... + Like s[STRING] except that the STRING is part of the completion. + +p[FROM,TO]... + Matches if the number of the current word is between one of the + FROM and TO pairs inclusive. The comma and TO are optional; TO + defaults to the same value as FROM. The numbers may be negative: + -N refers to the N'th last word on the line. + +c[OFFSET,STRING]... + Matches if the STRING matches the word offset by OFFSET from the + current word position. Usually OFFSET will be negative. + +C[OFFSET,PATTERN]... + Like c but using pattern matching instead. + +w[INDEX,STRING]... + Matches if the word in position INDEX is equal to the + corresponding STRING. Note that the word count is made after any + alias expansion. + +W[INDEX,PATTERN]... + Like w but using pattern matching instead. + +n[INDEX,STRING]... + Matches if the current word contains STRING. Anything up to and + including the INDEXth occurrence of this string will not be + considered part of the completion, but the rest will. INDEX may + be negative to count from the end: in most cases, INDEX will be 1 + or -1. For example, + + + compctl -s '`users`' -x 'n[1,@]' -k hosts -- talk + + will usually complete usernames, but if you insert an @ after the + name, names from the array HOSTS (assumed to contain hostnames, + though you must make the array yourself) will be completed. Other + commands such as rcp can be handled similarly. + +N[INDEX,STRING]... + Like n except that the string will be taken as a character class. + Anything up to and including the INDEXth occurrence of any of the + characters in STRING will not be considered part of the completion. + +m[MIN,MAX]... + Matches if the total number of words lies between MIN and MAX + inclusive. + +r[STR1,STR2]... + Matches if the cursor is after a word with prefix STR1. If there + is also a word with prefix STR2 on the command line after the one + matched by STR1 it matches only if the cursor is before this word. + If the comma and STR2 are omitted, it matches if the cursor is + after a word with prefix STR1. + +R[STR1,STR2]... + Like r but using pattern matching instead. + +q[STR]... + Matches the word currently being completed is in single quotes and + the STR begins with the letter `s', or if completion is done in + double quotes and STR starts with the letter `d', or if completion + is done in backticks and STR starts with a `b'. + + + + +File: zsh.info, Node: Example, Prev: Extended Completion, Up: Completion Using compctl + +21.7 Example +============ + + + compctl -u -x 's[+] c[-1,-f],s[-f+]' \ + -g '~/Mail/*(:t)' - 's[-f],c[-1,-f]' -f -- mail + +This is to be interpreted as follows: + +If the current command is mail, then + + + + if ((the current word begins with + and the previous word is -f) + or (the current word begins with -f+)), then complete the + non-directory part (the `:t' glob modifier) of files in the + directory ~/Mail; else + + if the current word begins with -f or the previous word was -f, + then complete any file; else + + complete user names. + + + +File: zsh.info, Node: Zsh Modules, Next: Calendar Function System, Prev: Completion Using compctl, Up: Top + +22 Zsh Modules +************** + + + +22.1 Description +================ + +Some optional parts of zsh are in modules, separate from the core of +the shell. Each of these modules may be linked in to the shell at +build time, or can be dynamically linked while the shell is running if +the installation supports this feature. Modules are linked at runtime +with the zmodload command, see *Note Shell Builtin Commands::. + +The modules that are bundled with the zsh distribution are: + + +zsh/attr + Builtins for manipulating extended attributes (xattr). + +zsh/cap + Builtins for manipulating POSIX.1e (POSIX.6) capability + (privilege) sets. + +zsh/clone + A builtin that can clone a running shell onto another terminal. + +zsh/compctl + The compctl builtin for controlling completion. + +zsh/complete + The basic completion code. + +zsh/complist + Completion listing extensions. + +zsh/computil + A module with utility builtins needed for the shell function based + completion system. + +zsh/curses + curses windowing commands + +zsh/datetime + Some date/time commands and parameters. + +zsh/db/gdbm + Builtins for managing associative array parameters tied to GDBM + databases. + +zsh/deltochar + A ZLE function duplicating EMACS' zap-to-char. + +zsh/example + An example of how to write a module. + +zsh/files + Some basic file manipulation commands as builtins. + +zsh/langinfo + Interface to locale information. + +zsh/mapfile + Access to external files via a special associative array. + +zsh/mathfunc + Standard scientific functions for use in mathematical evaluations. + +zsh/nearcolor + Map colours to the nearest colour in the available palette. + +zsh/newuser + Arrange for files for new users to be installed. + +zsh/parameter + Access to internal hash tables via special associative arrays. + +zsh/pcre + Interface to the PCRE library. + +zsh/param/private + Builtins for managing private-scoped parameters in function + context. + +zsh/regex + Interface to the POSIX regex library. + +zsh/sched + A builtin that provides a timed execution facility within the + shell. + +zsh/net/socket + Manipulation of Unix domain sockets + +zsh/stat + A builtin command interface to the stat system call. + +zsh/system + A builtin interface to various low-level system features. + +zsh/net/tcp + Manipulation of TCP sockets + +zsh/termcap + Interface to the termcap database. + +zsh/terminfo + Interface to the terminfo database. + +zsh/zftp + A builtin FTP client. + +zsh/zle + The Zsh Line Editor, including the bindkey and vared builtins. + +zsh/zleparameter + Access to internals of the Zsh Line Editor via parameters. + +zsh/zprof + A module allowing profiling for shell functions. + +zsh/zpty + A builtin for starting a command in a pseudo-terminal. + +zsh/zselect + Block and return when file descriptors are ready. + +zsh/zutil + Some utility builtins, e.g. the one for supporting configuration + via styles. + + +* Menu: + +* The zsh/attr Module:: +* The zsh/cap Module:: +* The zsh/clone Module:: +* The zsh/compctl Module:: +* The zsh/complete Module:: +* The zsh/complist Module:: +* The zsh/computil Module:: +* The zsh/curses Module:: +* The zsh/datetime Module:: +* The zsh/db/gdbm Module:: +* The zsh/deltochar Module:: +* The zsh/example Module:: +* The zsh/files Module:: +* The zsh/langinfo Module:: +* The zsh/mapfile Module:: +* The zsh/mathfunc Module:: +* The zsh/nearcolor Module:: +* The zsh/newuser Module:: +* The zsh/parameter Module:: +* The zsh/pcre Module:: +* The zsh/param/private Module:: +* The zsh/regex Module:: +* The zsh/sched Module:: +* The zsh/net/socket Module:: +* The zsh/stat Module:: +* The zsh/system Module:: +* The zsh/net/tcp Module:: +* The zsh/termcap Module:: +* The zsh/terminfo Module:: +* The zsh/zftp Module:: +* The zsh/zle Module:: +* The zsh/zleparameter Module:: +* The zsh/zprof Module:: +* The zsh/zpty Module:: +* The zsh/zselect Module:: +* The zsh/zutil Module:: + + +File: zsh.info, Node: The zsh/attr Module, Next: The zsh/cap Module, Up: Zsh Modules + +22.2 The zsh/attr Module +======================== + + + + The zsh/attr module is used for manipulating extended attributes. +The -h option causes all commands to operate on symbolic links instead +of their targets. The builtins in this module are: + + +zgetattr [ -h ] FILENAME ATTRIBUTE [ PARAMETER ] + Get the extended attribute ATTRIBUTE from the specified FILENAME. + If the optional argument PARAMETER is given, the attribute is set + on that parameter instead of being printed to stdout. + +zsetattr [ -h ] FILENAME ATTRIBUTE VALUE + Set the extended attribute ATTRIBUTE on the specified FILENAME to + VALUE. + +zdelattr [ -h ] FILENAME ATTRIBUTE + Remove the extended attribute ATTRIBUTE from the specified + FILENAME. + +zlistattr [ -h ] FILENAME [ PARAMETER ] + List the extended attributes currently set on the specified + FILENAME. If the optional argument PARAMETER is given, the list of + attributes is set on that parameter instead of being printed to + stdout. + + +zgetattr and zlistattr allocate memory dynamically. If the attribute +or list of attributes grows between the allocation and the call to get +them, they return 2. On all other errors, 1 is returned. This allows +the calling function to check for this case and retry. + + +File: zsh.info, Node: The zsh/cap Module, Next: The zsh/clone Module, Prev: The zsh/attr Module, Up: Zsh Modules + +22.3 The zsh/cap Module +======================= + + + + The zsh/cap module is used for manipulating POSIX.1e (POSIX.6) +capability sets. If the operating system does not support this +interface, the builtins defined by this module will do nothing. The +builtins in this module are: + + +cap [ CAPABILITIES ] + Change the shell's process capability sets to the specified + CAPABILITIES, otherwise display the shell's current capabilities. + +getcap FILENAME ... + This is a built-in implementation of the POSIX standard utility. + It displays the capability sets on each specified FILENAME. + +setcap CAPABILITIES FILENAME ... + This is a built-in implementation of the POSIX standard utility. + It sets the capability sets on each specified FILENAME to the + specified CAPABILITIES. + + + +File: zsh.info, Node: The zsh/clone Module, Next: The zsh/compctl Module, Prev: The zsh/cap Module, Up: Zsh Modules + +22.4 The zsh/clone Module +========================= + + + + The zsh/clone module makes available one builtin command: + + +clone TTY + Creates a forked instance of the current shell, attached to the + specified TTY. In the new shell, the PID, PPID and TTY special + parameters are changed appropriately. $! is set to zero in the new + shell, and to the new shell's PID in the original shell. + + The return status of the builtin is zero in both shells if + successful, and non-zero on error. + + The target of clone should be an unused terminal, such as an + unused virtual console or a virtual terminal created by + + + xterm -e sh -c 'trap : INT QUIT TSTP; tty; + while :; do sleep 100000000; done' + + Some words of explanation are warranted about this long xterm + command line: when doing clone on a pseudo-terminal, some other + session ("session" meant as a unix session group, or SID) is + already owning the terminal. Hence the cloned zsh cannot acquire + the pseudo-terminal as a controlling tty. That means two things: + + + * the job control signals will go to the sh-started-by-xterm + process group (that's why we disable INT QUIT and TSTP with + trap; otherwise the while loop could get suspended or killed) + + * the cloned shell will have job control disabled, and the job + control keys (control-C, control-\ and control-Z) will not + work. + + This does not apply when cloning to an _unused_ vc. + + Cloning to a used (and unprepared) terminal will result in two + processes reading simultaneously from the same terminal, with + input bytes going randomly to either process. + + clone is mostly useful as a shell built-in replacement for openvt. + + + +File: zsh.info, Node: The zsh/compctl Module, Next: The zsh/complete Module, Prev: The zsh/clone Module, Up: Zsh Modules + +22.5 The zsh/compctl Module +=========================== + + + + The zsh/compctl module makes available two builtin commands. compctl, +is the old, deprecated way to control completions for ZLE. See *Note +Completion Using compctl::. The other builtin command, compcall can be +used in user-defined completion widgets, see *Note Completion Widgets::. + + +File: zsh.info, Node: The zsh/complete Module, Next: The zsh/complist Module, Prev: The zsh/compctl Module, Up: Zsh Modules + +22.6 The zsh/complete Module +============================ + + + + The zsh/complete module makes available several builtin commands +which can be used in user-defined completion widgets, see *Note +Completion Widgets::. + + +File: zsh.info, Node: The zsh/complist Module, Next: The zsh/computil Module, Prev: The zsh/complete Module, Up: Zsh Modules + +22.7 The zsh/complist Module +============================ + + + + The zsh/complist module offers three extensions to completion +listings: the ability to highlight matches in such a list, the ability +to scroll through long lists and a different style of menu completion. + + + +22.7.1 Colored completion listings +---------------------------------- + +Whenever one of the parameters ZLS_COLORS or ZLS_COLOURS is set and the +zsh/complist module is loaded or linked into the shell, completion +lists will be colored. Note, however, that complist will not +automatically be loaded if it is not linked in: on systems with +dynamic loading, `zmodload zsh/complist' is required. + +The parameters ZLS_COLORS and ZLS_COLOURS describe how matches are +highlighted. To turn on highlighting an empty value suffices, in which +case all the default values given below will be used. The format of +the value of these parameters is the same as used by the GNU version of +the ls command: a colon-separated list of specifications of the form +`NAME=VALUE'. The NAME may be one of the following strings, most of +which specify file types for which the VALUE will be used. The strings +and their default values are: + + +no 0 + for normal text (i.e. when displaying something other than a + matched file) + +fi 0 + for regular files + +di 32 + for directories + +ln 36 + for symbolic links. If this has the special value target, + symbolic links are dereferenced and the target file used to + determine the display format. + +pi 31 + for named pipes (FIFOs) + +so 33 + for sockets + +bd 44;37 + for block devices + +cd 44;37 + for character devices + +or NONE + for a symlink to nonexistent file (default is the value defined + for ln) + +mi NONE + for a non-existent file (default is the value defined for fi); + this code is currently not used + +su 37;41 + for files with setuid bit set + +sg 30;43 + for files with setgid bit set + +tw 30;42 + for world writable directories with sticky bit set + +ow 34;43 + for world writable directories without sticky bit set + +sa NONE + for files with an associated suffix alias; this is only tested + after specific suffixes, as described below + +st 37;44 + for directories with sticky bit set but not world writable + +ex 35 + for executable files + +lc \e[ + for the left code (see below) + +rc m + for the right code + +tc 0 + for the character indicating the file type printed after + filenames if the LIST_TYPES option is set + +sp 0 + for the spaces printed after matches to align the next column + +ec NONE + for the end code + + +Apart from these strings, the NAME may also be an asterisk (`*') +followed by any string. The VALUE given for such a string will be used +for all files whose name ends with the string. The NAME may also be an +equals sign (`=') followed by a pattern; the EXTENDED_GLOB option will +be turned on for evaluation of the pattern. The VALUE given for this +pattern will be used for all matches (not just filenames) whose display +string are matched by the pattern. Definitions for the form with the +leading equal sign take precedence over the values defined for file +types, which in turn take precedence over the form with the leading +asterisk (file extensions). + +The leading-equals form also allows different parts of the displayed +strings to be colored differently. For this, the pattern has to use the +`(#b)' globbing flag and pairs of parentheses surrounding the parts of +the strings that are to be colored differently. In this case the VALUE +may consist of more than one color code separated by equal signs. The +first code will be used for all parts for which no explicit code is +specified and the following codes will be used for the parts matched by +the sub-patterns in parentheses. For example, the specification +`=(#b)(?)*(?)=0=3=7' will be used for all matches which are at least +two characters long and will use the code `3' for the first character, +`7' for the last character and `0' for the rest. + +All three forms of NAME may be preceded by a pattern in parentheses. +If this is given, the VALUE will be used only for matches in groups +whose names are matched by the pattern given in the parentheses. For +example, `(g*)m*=43' highlights all matches beginning with `m' in +groups whose names begin with `g' using the color code `43'. In case +of the `lc', `rc', and `ec' codes, the group pattern is ignored. + +Note also that all patterns are tried in the order in which they appear +in the parameter value until the first one matches which is then used. +Patterns may be matched against completions, descriptions (possibly +with spaces appended for padding), or lines consisting of a completion +followed by a description. For consistent coloring it may be necessary +to use more than one pattern or a pattern with backreferences. + +When printing a match, the code prints the value of lc, the value for +the file-type or the last matching specification with a `*', the value +of rc, the string to display for the match itself, and then the value +of ec if that is defined or the values of lc, no, and rc if ec is not +defined. + +The default values are ISO 6429 (ANSI) compliant and can be used on +vt100 compatible terminals such as xterms. On monochrome terminals the +default values will have no visible effect. The colors function from +the contribution can be used to get associative arrays containing the +codes for ANSI terminals (see *Note Other Functions::). For example, +after loading colors, one could use `$color[red]' to get the code for +foreground color red and `$color[bg-green]' for the code for background +color green. + +If the completion system invoked by compinit is used, these parameters +should not be set directly because the system controls them itself. +Instead, the list-colors style should be used (see *Note Completion +System Configuration::). + + + +22.7.2 Scrolling in completion listings +--------------------------------------- + +To enable scrolling through a completion list, the LISTPROMPT parameter +must be set. Its value will be used as the prompt; if it is the empty +string, a default prompt will be used. The value may contain escapes +of the form `%x'. It supports the escapes `%B', `%b', `%S', `%s', +`%U', `%u', `%F', `%f', `%K', `%k' and `%{...%}' used also in shell +prompts as well as three pairs of additional sequences: a `%l' or `%L' +is replaced by the number of the last line shown and the total number +of lines in the form `NUMBER/TOTAL'; a `%m' or `%M' is replaced with +the number of the last match shown and the total number of matches; and +`%p' or `%P' is replaced with `Top', `Bottom' or the position of the +first line shown in percent of the total number of lines, respectively. +In each of these cases the form with the uppercase letter will be +replaced with a string of fixed width, padded to the right with spaces, +while the lowercase form will not be padded. + +If the parameter LISTPROMPT is set, the completion code will not ask if +the list should be shown. Instead it immediately starts displaying the +list, stopping after the first screenful, showing the prompt at the +bottom, waiting for a keypress after temporarily switching to the +listscroll keymap. Some of the zle functions have a special meaning +while scrolling lists: + + +send-break + stops listing discarding the key pressed + +accept-line, down-history, down-line-or-history +down-line-or-search, vi-down-line-or-history + scrolls forward one line + +complete-word, menu-complete, expand-or-complete +expand-or-complete-prefix, menu-complete-or-expand + scrolls forward one screenful + +accept-search + stop listing but take no other action + + +Every other character stops listing and immediately processes the key +as usual. Any key that is not bound in the listscroll keymap or that +is bound to undefined-key is looked up in the keymap currently selected. + +As for the ZLS_COLORS and ZLS_COLOURS parameters, LISTPROMPT should not +be set directly when using the shell function based completion system. +Instead, the list-prompt style should be used. + + + +22.7.3 Menu selection +--------------------- + +The zsh/complist module also offers an alternative style of selecting +matches from a list, called menu selection, which can be used if the +shell is set up to return to the last prompt after showing a completion +list (see the ALWAYS_LAST_PROMPT option in *Note Options::). + +Menu selection can be invoked directly by the widget menu-select +defined by this module. This is a standard ZLE widget that can be +bound to a key in the usual way as described in *Note Zsh Line Editor::. + +Alternatively, the parameter MENUSELECT can be set to an integer, which +gives the minimum number of matches that must be present before menu +selection is automatically turned on. This second method requires that +menu completion be started, either directly from a widget such as +menu-complete, or due to one of the options MENU_COMPLETE or AUTO_MENU +being set. If MENUSELECT is set, but is 0, 1 or empty, menu selection +will always be started during an ambiguous menu completion. + +When using the completion system based on shell functions, the +MENUSELECT parameter should not be used (like the ZLS_COLORS and +ZLS_COLOURS parameters described above). Instead, the menu style +should be used with the select=... keyword. + +After menu selection is started, the matches will be listed. If there +are more matches than fit on the screen, only the first screenful is +shown. The matches to insert into the command line can be selected +from this list. In the list one match is highlighted using the value +for ma from the ZLS_COLORS or ZLS_COLOURS parameter. The default value +for this is `7' which forces the selected match to be highlighted using +standout mode on a vt100-compatible terminal. If neither ZLS_COLORS +nor ZLS_COLOURS is set, the same terminal control sequence as for the +`%S' escape in prompts is used. + +If there are more matches than fit on the screen and the parameter +MENUPROMPT is set, its value will be shown below the matches. It +supports the same escape sequences as LISTPROMPT, but the number of the +match or line shown will be that of the one where the mark is placed. +If its value is the empty string, a default prompt will be used. + +The MENUSCROLL parameter can be used to specify how the list is +scrolled. If the parameter is unset, this is done line by line, if it +is set to `0' (zero), the list will scroll half the number of lines of +the screen. If the value is positive, it gives the number of lines to +scroll and if it is negative, the list will be scrolled the number of +lines of the screen minus the (absolute) value. + +As for the ZLS_COLORS, ZLS_COLOURS and LISTPROMPT parameters, neither +MENUPROMPT nor MENUSCROLL should be set directly when using the shell +function based completion system. Instead, the select-prompt and +select-scroll styles should be used. + +The completion code sometimes decides not to show all of the matches in +the list. These hidden matches are either matches for which the +completion function which added them explicitly requested that they not +appear in the list (using the -n option of the compadd builtin command) +or they are matches which duplicate a string already in the list +(because they differ only in things like prefixes or suffixes that are +not displayed). In the list used for menu selection, however, even +these matches are shown so that it is possible to select them. To +highlight such matches the hi and du capabilities in the ZLS_COLORS and +ZLS_COLOURS parameters are supported for hidden matches of the first +and second kind, respectively. + +Selecting matches is done by moving the mark around using the zle +movement functions. When not all matches can be shown on the screen at +the same time, the list will scroll up and down when crossing the top or +bottom line. The following zle functions have special meaning during +menu selection. Note that the following always perform the same task +within the menu selection map and cannot be replaced by user defined +widgets, nor can the set of functions be extended: + + +accept-line, accept-search + accept the current match and leave menu selection (but do not + cause the command line to be accepted) + +send-break + leaves menu selection and restores the previous contents of the + command line + +redisplay, clear-screen + execute their normal function without leaving menu selection + +accept-and-hold, accept-and-menu-complete + accept the currently inserted match and continue selection + allowing to select the next match to insert into the line + +accept-and-infer-next-history + accepts the current match and then tries completion with menu + selection again; in the case of files this allows one to select a + directory and immediately attempt to complete files in it; if + there are no matches, a message is shown and one can use undo to + go back to completion on the previous level, every other key + leaves menu selection (including the other zle functions which are + otherwise special during menu selection) + +undo + removes matches inserted during the menu selection by one of the + three functions before + +down-history, down-line-or-history +vi-down-line-or-history, down-line-or-search + moves the mark one line down + +up-history, up-line-or-history +vi-up-line-or-history, up-line-or-search + moves the mark one line up + +forward-char, vi-forward-char + moves the mark one column right + +backward-char, vi-backward-char + moves the mark one column left + +forward-word, vi-forward-word +vi-forward-word-end, emacs-forward-word + moves the mark one screenful down + +backward-word, vi-backward-word, emacs-backward-word + moves the mark one screenful up + +vi-forward-blank-word, vi-forward-blank-word-end + moves the mark to the first line of the next group of matches + +vi-backward-blank-word + moves the mark to the last line of the previous group of matches + +beginning-of-history + moves the mark to the first line + +end-of-history + moves the mark to the last line + +beginning-of-buffer-or-history, beginning-of-line +beginning-of-line-hist, vi-beginning-of-line + moves the mark to the leftmost column + +end-of-buffer-or-history, end-of-line +end-of-line-hist, vi-end-of-line + moves the mark to the rightmost column + +complete-word, menu-complete, expand-or-complete +expand-or-complete-prefix, menu-expand-or-complete + moves the mark to the next match + +reverse-menu-complete + moves the mark to the previous match + +vi-insert + this toggles between normal and interactive mode; in interactive + mode the keys bound to self-insert and self-insert-unmeta insert + into the command line as in normal editing mode but without leaving + menu selection; after each character completion is tried again and + the list changes to contain only the new matches; the completion + widgets make the longest unambiguous string be inserted in the + command line and undo and backward-delete-char go back to the + previous set of matches + +history-incremental-search-forward +history-incremental-search-backward + this starts incremental searches in the list of completions + displayed; in this mode, accept-line only leaves incremental + search, going back to the normal menu selection mode + + +All movement functions wrap around at the edges; any other zle function +not listed leaves menu selection and executes that function. It is +possible to make widgets in the above list do the same by using the +form of the widget with a `.' in front. For example, the widget +`.accept-line' has the effect of leaving menu selection and accepting +the entire command line. + +During this selection the widget uses the keymap menuselect. Any key +that is not defined in this keymap or that is bound to undefined-key is +looked up in the keymap currently selected. This is used to ensure +that the most important keys used during selection (namely the cursor +keys, return, and TAB) have sensible defaults. However, keys in the +menuselect keymap can be modified directly using the bindkey builtin +command (see *Note The zsh/zle Module::). For example, to make the +return key leave menu selection without accepting the match currently +selected one could call + + + bindkey -M menuselect '^M' send-break + +after loading the zsh/complist module. + + +File: zsh.info, Node: The zsh/computil Module, Next: The zsh/curses Module, Prev: The zsh/complist Module, Up: Zsh Modules + +22.8 The zsh/computil Module +============================ + + + + The zsh/computil module adds several builtin commands that are used +by some of the completion functions in the completion system based on +shell functions (see *Note Completion System:: ). Except for compquote +these builtin commands are very specialised and thus not very +interesting when writing your own completion functions. In summary, +these builtin commands are: + + +comparguments + This is used by the _arguments function to do the argument and + command line parsing. Like compdescribe it has an option -i to do + the parsing and initialize some internal state and various options + to access the state information to decide what should be completed. + +compdescribe + This is used by the _describe function to build the displays for + the matches and to get the strings to add as matches with their + options. On the first call one of the options -i or -I should be + supplied as the first argument. In the first case, display + strings without the descriptions will be generated, in the second + case, the string used to separate the matches from their + descriptions must be given as the second argument and the + descriptions (if any) will be shown. All other arguments are like + the definition arguments to _describe itself. + + Once compdescribe has been called with either the -i or the -I + option, it can be repeatedly called with the -g option and the + names of four parameters as its arguments. This will step through + the different sets of matches and store the value of + compstate[list] in the first scalar, the options for compadd in + the second array, the matches in the third array, and the strings + to be displayed in the completion listing in the fourth array. + The arrays may then be directly given to compadd to register the + matches with the completion code. + +compfiles + Used by the _path_files function to optimize complex recursive + filename generation (globbing). It does three things. With the + -p and -P options it builds the glob patterns to use, including + the paths already handled and trying to optimize the patterns with + respect to the prefix and suffix from the line and the match + specification currently used. The -i option does the directory + tests for the ignore-parents style and the -r option tests if a + component for some of the matches are equal to the string on the + line and removes all other matches if that is true. + +compgroups + Used by the _tags function to implement the internals of the + group-order style. This only takes its arguments as names of + completion groups and creates the groups for it (all six types: + sorted and unsorted, both without removing duplicates, with + removing all duplicates and with removing consecutive duplicates). + +compquote [ -p ] NAMES ... + There may be reasons to write completion functions that have to add + the matches using the -Q option to compadd and perform quoting + themselves. Instead of interpreting the first character of the + all_quotes key of the compstate special association and using the + q flag for parameter expansions, one can use this builtin command. + The arguments are the names of scalar or array parameters and the + values of these parameters are quoted as needed for the innermost + quoting level. If the -p option is given, quoting is done as if + there is some prefix before the values of the parameters, so that + a leading equal sign will not be quoted. + + The return status is non-zero in case of an error and zero + otherwise. + +comptags +comptry + These implement the internals of the tags mechanism. + +compvalues + Like comparguments, but for the _values function. + + + +File: zsh.info, Node: The zsh/curses Module, Next: The zsh/datetime Module, Prev: The zsh/computil Module, Up: Zsh Modules + +22.9 The zsh/curses Module +========================== + + + + The zsh/curses module makes available one builtin command and +various parameters. + + + +22.9.1 Builtin +-------------- + + +zcurses init +zcurses end +zcurses addwin TARGETWIN NLINES NCOLS BEGIN_Y BEGIN_X [ PARENTWIN ] +zcurses delwin TARGETWIN +zcurses refresh [ TARGETWIN ... ] +zcurses touch TARGETWIN ... +zcurses move TARGETWIN NEW_Y NEW_X +zcurses clear TARGETWIN [ redraw | eol | bot ] +zcurses position TARGETWIN ARRAY +zcurses char TARGETWIN CHARACTER +zcurses string TARGETWIN STRING +zcurses border TARGETWIN BORDER +zcurses attr TARGETWIN [ [+|-]ATTRIBUTE | FG_COL/BG_COL ] [...] +zcurses bg TARGETWIN [ [+|-]ATTRIBUTE | FG_COL/BG_COL | @CHAR ] [...] +zcurses scroll TARGETWIN [ on | off | [+|-]LINES ] +zcurses input TARGETWIN [ PARAM [ KPARAM [ MPARAM ] ] ] +zcurses mouse [ delay NUM | [+|-]motion ] +zcurses timeout TARGETWIN INTVAL +zcurses querychar TARGETWIN [ PARAM ] +zcurses resize HEIGHT WIDTH [ endwin | nosave | endwin_nosave ] + Manipulate curses windows. All uses of this command should be + bracketed by `zcurses init' to initialise use of curses, and + `zcurses end' to end it; omitting `zcurses end' can cause the + terminal to be in an unwanted state. + + The subcommand addwin creates a window with NLINES lines and NCOLS + columns. Its upper left corner will be placed at row BEGIN_Y and + column BEGIN_X of the screen. TARGETWIN is a string and refers to + the name of a window that is not currently assigned. Note in + particular the curses convention that vertical values appear + before horizontal values. + + If addwin is given an existing window as the final argument, the + new window is created as a subwindow of PARENTWIN. This differs + from an ordinary new window in that the memory of the window + contents is shared with the parent's memory. Subwindows must be + deleted before their parent. Note that the coordinates of + subwindows are relative to the screen, not the parent, as with + other windows. + + Use the subcommand delwin to delete a window created with addwin. + Note that end does _not_ implicitly delete windows, and that + delwin does not erase the screen image of the window. + + The window corresponding to the full visible screen is called + stdscr; it always exists after `zcurses init' and cannot be delete + with delwin. + + The subcommand refresh will refresh window TARGETWIN; this is + necessary to make any pending changes (such as characters you have + prepared for output with char) visible on the screen. refresh + without an argument causes the screen to be cleared and redrawn. + If multiple windows are given, the screen is updated once at the + end. + + The subcommand touch marks the TARGETWINs listed as changed. This + is necessary before refreshing windows if a window that was in + front of another window (which may be stdscr) is deleted. + + The subcommand move moves the cursor position in TARGETWIN to new + coordinates NEW_Y and NEW_X. Note that the subcommand string (but + not the subcommand char) advances the cursor position over the + characters added. + + The subcommand clear erases the contents of TARGETWIN. One (and + no more than one) of three options may be specified. With the + option redraw, in addition the next refresh of TARGETWIN will + cause the screen to be cleared and repainted. With the option + eol, TARGETWIN is only cleared to the end of the current cursor + line. With the option bot, TARGETWIN is cleared to the end of the + window, i.e everything to the right and below the cursor is + cleared. + + The subcommand position writes various positions associated with + TARGETWIN into the array named ARRAY. These are, in order: + - + The y and x coordinates of the cursor relative to the top left + of TARGETWIN + + - + The y and x coordinates of the top left of TARGETWIN on the + screen + + - + The size of TARGETWIN in y and x dimensions. + + Outputting characters and strings are achieved by char and string + respectively. + + To draw a border around window TARGETWIN, use border. Note that + the border is not subsequently handled specially: in other words, + the border is simply a set of characters output at the edge of the + window. Hence it can be overwritten, can scroll off the window, + etc. + + The subcommand attr will set TARGETWIN's attributes or + foreground/background color pair for any successive character + output. Each ATTRIBUTE given on the line may be prepended by a + + to set or a - to unset that attribute; + is assumed if absent. The + attributes supported are blink, bold, dim, reverse, standout, and + underline. + + Each FG_COL/BG_COL attribute (to be read as `FG_COL on BG_COL') + sets the foreground and background color for character output. + The color default is sometimes available (in particular if the + library is ncurses), specifying the foreground or background color + with which the terminal started. The color pair default/default + is always available. To use more than the 8 named colors (red, + green, etc.) construct the FG_COL/BG_COL pairs where FG_COL and + BG_COL are decimal integers, e.g 128/200. The maximum color value + is 254 if the terminal supports 256 colors. + + bg overrides the color and other attributes of all characters in + the window. Its usual use is to set the background initially, but + it will overwrite the attributes of any characters at the time + when it is called. In addition to the arguments allowed with + attr, an argument @CHAR specifies a character to be shown in + otherwise blank areas of the window. Owing to limitations of + curses this cannot be a multibyte character (use of ASCII + characters only is recommended). As the specified set of + attributes override the existing background, turning attributes + off in the arguments is not useful, though this does not cause an + error. + + The subcommand scroll can be used with on or off to enabled or + disable scrolling of a window when the cursor would otherwise move + below the window due to typing or output. It can also be used + with a positive or negative integer to scroll the window up or + down the given number of lines without changing the current cursor + position (which therefore appears to move in the opposite + direction relative to the window). In the second case, if + scrolling is off it is temporarily turned on to allow the window + to be scrolled. + + The subcommand input reads a single character from the window + without echoing it back. If PARAM is supplied the character is + assigned to the parameter PARAM, else it is assigned to the + parameter REPLY. + + If both PARAM and KPARAM are supplied, the key is read in `keypad' + mode. In this mode special keys such as function keys and arrow + keys return the name of the key in the parameter KPARAM. The key + names are the macros defined in the curses.h or ncurses.h with the + prefix `KEY_' removed; see also the description of the parameter + zcurses_keycodes below. Other keys cause a value to be set in + PARAM as before. On a successful return only one of PARAM or + KPARAM contains a non-empty string; the other is set to an empty + string. + + If MPARAM is also supplied, input attempts to handle mouse input. + This is only available with the ncurses library; mouse handling + can be detected by checking for the exit status of `zcurses mouse' + with no arguments. If a mouse button is clicked (or double- or + triple-clicked, or pressed or released with a configurable delay + from being clicked) then kparam is set to the string MOUSE, and + MPARAM is set to an array consisting of the following elements: + - + An identifier to discriminate different input devices; this + is only rarely useful. + + - + The x, y and z coordinates of the mouse click relative to the + full screen, as three elements in that order (i.e. the y + coordinate is, unusually, after the x coordinate). The z + coordinate is only available for a few unusual input devices + and is otherwise set to zero. + + - + Any events that occurred as separate items; usually there + will be just one. An event consists of PRESSED, RELEASED, + CLICKED, DOUBLE_CLICKED or TRIPLE_CLICKED followed + immediately (in the same element) by the number of the button. + + - + If the shift key was pressed, the string SHIFT. + + - + If the control key was pressed, the string CTRL. + + - + If the alt key was pressed, the string ALT. + + Not all mouse events may be passed through to the terminal window; + most terminal emulators handle some mouse events themselves. Note + that the ncurses manual implies that using input both with and + without mouse handling may cause the mouse cursor to appear and + disappear. + + The subcommand mouse can be used to configure the use of the mouse. + There is no window argument; mouse options are global. `zcurses + mouse' with no arguments returns status 0 if mouse handling is + possible, else status 1. Otherwise, the possible arguments (which + may be combined on the same command line) are as follows. delay + NUM sets the maximum delay in milliseconds between press and + release events to be considered as a click; the value 0 disables + click resolution, and the default is one sixth of a second. + motion proceeded by an optional `+' (the default) or - turns on or + off reporting of mouse motion in addition to clicks, presses and + releases, which are always reported. However, it appears reports + for mouse motion are not currently implemented. + + The subcommand timeout specifies a timeout value for input from + TARGETWIN. If INTVAL is negative, `zcurses input' waits + indefinitely for a character to be typed; this is the default. If + INTVAL is zero, `zcurses input' returns immediately; if there is + typeahead it is returned, else no input is done and status 1 is + returned. If INTVAL is positive, `zcurses input' waits INTVAL + milliseconds for input and if there is none at the end of that + period returns status 1. + + The subcommand querychar queries the character at the current + cursor position. The return values are stored in the array named + PARAM if supplied, else in the array reply. The first value is + the character (which may be a multibyte character if the system + supports them); the second is the color pair in the usual + FG_COL/BG_COL notation, or 0 if color is not supported. Any + attributes other than color that apply to the character, as set + with the subcommand attr, appear as additional elements. + + The subcommand resize resizes stdscr and all windows to given + dimensions (windows that stick out from the new dimensions are + resized down). The underlying curses extension (resize_term call) + can be unavailable. To verify, zeroes can be used for HEIGHT and + WIDTH. If the result of the subcommand is 0, resize_term is + available (2 otherwise). Tests show that resizing can be normally + accomplished by calling zcurses end and zcurses refresh. The + resize subcommand is provided for versatility. Multiple system + configurations have been checked and zcurses end and zcurses + refresh are still needed for correct terminal state after resize. + To invoke them with resize, use ENDWIN argument. Using NOSAVE + argument will cause new terminal state to not be saved internally + by zcurses. This is also provided for versatility and should + normally be not needed. + + + +22.9.2 Parameters +----------------- + + +ZCURSES_COLORS + Readonly integer. The maximum number of colors the terminal + supports. This value is initialised by the curses library and is + not available until the first time zcurses init is run. + +ZCURSES_COLOR_PAIRS + Readonly integer. The maximum number of color pairs FG_COL/BG_COL + that may be defined in `zcurses attr' commands; note this limit + applies to all color pairs that have been used whether or not they + are currently active. This value is initialised by the curses + library and is not available until the first time zcurses init is + run. + +zcurses_attrs + Readonly array. The attributes supported by zsh/curses; available + as soon as the module is loaded. + +zcurses_colors + Readonly array. The colors supported by zsh/curses; available as + soon as the module is loaded. + +zcurses_keycodes + Readonly array. The values that may be returned in the second + parameter supplied to `zcurses input' in the order in which they + are defined internally by curses. Not all function keys are + listed, only F0; curses reserves space for F0 up to F63. + +zcurses_windows + Readonly array. The current list of windows, i.e. all windows that + have been created with `zcurses addwin' and not removed with + `zcurses delwin'. + + + +File: zsh.info, Node: The zsh/datetime Module, Next: The zsh/db/gdbm Module, Prev: The zsh/curses Module, Up: Zsh Modules + +22.10 The zsh/datetime Module +============================= + + + + The zsh/datetime module makes available one builtin command: + + +strftime [ -s SCALAR ] FORMAT [ EPOCHTIME [ NANOSECONDS ] ] +strftime -r [ -q ] [ -s SCALAR ] FORMAT TIMESTRING + Output the date in the FORMAT specified. With no EPOCHTIME, the + current system date/time is used; optionally, EPOCHTIME may be + used to specify the number of seconds since the epoch, and + NANOSECONDS may additionally be used to specify the number of + nanoseconds past the second (otherwise that number is assumed to + be 0). See man page strftime(3) for details. The zsh extensions + described in *Note Prompt Expansion:: are also available. + + + -q + Run quietly; suppress printing of all error messages + described below. Errors for invalid EPOCHTIME values are + always printed. + + -r + With the option -r (reverse), use FORMAT to parse the input + string TIMESTRING and output the number of seconds since the + epoch at which the time occurred. The parsing is implemented + by the system function strptime; see man page strptime(3). + This means that zsh format extensions are not available, but + for reverse lookup they are not required. + + In most implementations of strftime any timezone in the + TIMESTRING is ignored and the local timezone declared by the + TZ environment variable is used; other parameters are set to + zero if not present. + + If TIMESTRING does not match FORMAT the command returns + status 1 and prints an error message. If TIMESTRING matches + FORMAT but not all characters in TIMESTRING were used, the + conversion succeeds but also prints an error message. + + If either of the system functions strptime or mktime is not + available, status 2 is returned and an error message is + printed. + + -s SCALAR + Assign the date string (or epoch time in seconds if -r is + given) to SCALAR instead of printing it. + + + Note that depending on the system's declared integral time type, + strftime may produce incorrect results for epoch times greater than + 2147483647 which corresponds to 2038-01-19 03:14:07 +0000. + + +The zsh/datetime module makes available several parameters; all are +readonly: + + +EPOCHREALTIME + A floating point value representing the number of seconds since + the epoch. The notional accuracy is to nanoseconds if the + clock_gettime call is available and to microseconds otherwise, but + in practice the range of double precision floating point and shell + scheduling latencies may be significant effects. + +EPOCHSECONDS + An integer value representing the number of seconds since the + epoch. + +epochtime + An array value containing the number of seconds since the epoch in + the first element and the remainder of the time since the epoch in + nanoseconds in the second element. To ensure the two elements are + consistent the array should be copied or otherwise referenced as a + single substitution before the values are used. The following + idiom may be used: + + + for secs nsecs in $epochtime; do + ... + done + + + + +File: zsh.info, Node: The zsh/db/gdbm Module, Next: The zsh/deltochar Module, Prev: The zsh/datetime Module, Up: Zsh Modules + +22.11 The zsh/db/gdbm Module +============================ + + + + The zsh/db/gdbm module is used to create "tied" associative arrays +that interface to database files. If the GDBM interface is not +available, the builtins defined by this module will report an error. +This module is also intended as a prototype for creating additional +database interfaces, so the ztie builtin may move to a more generic +module in the future. + +The builtins in this module are: + + +ztie -d db/gdbm -f FILENAME [ -r ] ARRAYNAME + Open the GDBM database identified by FILENAME and, if successful, + create the associative array ARRAYNAME linked to the file. To + create a local tied array, the parameter must first be declared, + so commands similar to the following would be executed inside a + function scope: + + + local -A sampledb + ztie -d db/gdbm -f sample.gdbm sampledb + + The -r option opens the database file for reading only, creating a + parameter with the readonly attribute. Without this option, using + `ztie' on a file for which the user does not have write permission + is an error. If writable, the database is opened synchronously so + fields changed in ARRAYNAME are immediately written to FILENAME. + + Changes to the file modes FILENAME after it has been opened do not + alter the state of ARRAYNAME, but `typeset -r ARRAYNAME' works as + expected. + +zuntie [ -u ] ARRAYNAME ... + Close the GDBM database associated with each ARRAYNAME and then + unset the parameter. The -u option forces an unset of parameters + made readonly with `ztie -r'. + + This happens automatically if the parameter is explicitly unset or + its local scope (function) ends. Note that a readonly parameter + may not be explicitly unset, so the only way to unset a global + parameter created with `ztie -r' is to use `zuntie -u'. + +zgdbmpath PARAMETERNAME + Put path to database file assigned to PARAMETERNAME into REPLY + scalar. + +zgdbm_tied + Array holding names of all tied parameters. + + +The fields of an associative array tied to GDBM are neither cached nor +otherwise stored in memory, they are read from or written to the +database on each reference. Thus, for example, the values in a +readonly array may be changed by a second writer of the same database +file. + + +File: zsh.info, Node: The zsh/deltochar Module, Next: The zsh/example Module, Prev: The zsh/db/gdbm Module, Up: Zsh Modules + +22.12 The zsh/deltochar Module +============================== + + + + The zsh/deltochar module makes available two ZLE functions: + + +delete-to-char + Read a character from the keyboard, and delete from the cursor + position up to and including the next (or, with repeat count N, + the Nth) instance of that character. Negative repeat counts mean + delete backwards. + +zap-to-char + This behaves like delete-to-char, except that the final occurrence + of the character itself is not deleted. + + + +File: zsh.info, Node: The zsh/example Module, Next: The zsh/files Module, Prev: The zsh/deltochar Module, Up: Zsh Modules + +22.13 The zsh/example Module +============================ + + + + The zsh/example module makes available one builtin command: + + +example [ -flags ] [ ARGS ... ] + Displays the flags and arguments it is invoked with. + + +The purpose of the module is to serve as an example of how to write a +module. + + +File: zsh.info, Node: The zsh/files Module, Next: The zsh/langinfo Module, Prev: The zsh/example Module, Up: Zsh Modules + +22.14 The zsh/files Module +========================== + + + + The zsh/files module makes available some common commands for file +manipulation as builtins; these commands are probably not needed for +many normal situations but can be useful in emergency recovery +situations with constrained resources. The commands do not implement +all features now required by relevant standards committees. + +For all commands, a variant beginning zf_ is also available and loaded +automatically. Using the features capability of zmodload will let you +load only those names you want. Note that it's possible to load only +the builtins with zsh-specific names using the following command: + + + zmodload -m -F zsh/files b:zf_\* + +The commands loaded by default are: + + +chgrp [ -hRs ] GROUP FILENAME ... + Changes group of files specified. This is equivalent to chown with + a USER-SPEC argument of `:GROUP'. + +chmod [ -Rs ] MODE FILENAME ... + Changes mode of files specified. + + The specified MODE must be in octal. + + The -R option causes chmod to recursively descend into directories, + changing the mode of all files in the directory after changing the + mode of the directory itself. + + The -s option is a zsh extension to chmod functionality. It + enables paranoid behaviour, intended to avoid security problems + involving a chmod being tricked into affecting files other than + the ones intended. It will refuse to follow symbolic links, so + that (for example) ``chmod 600 /tmp/foo/passwd'' can't + accidentally chmod /etc/passwd if /tmp/foo happens to be a link to + /etc. It will also check where it is after leaving directories, + so that a recursive chmod of a deep directory tree can't end up + recursively chmoding /usr as a result of directories being moved + up the tree. + +chown [ -hRs ] USER-SPEC FILENAME ... + Changes ownership and group of files specified. + + The USER-SPEC can be in four forms: + + + USER + change owner to USER; do not change group + + USER:: + change owner to USER; do not change group + + USER: + change owner to USER; change group to USER's primary group + + USER:GROUP + change owner to USER; change group to GROUP + + :GROUP + do not change owner; change group to GROUP + + In each case, the `:' may instead be a `.'. The rule is that if + there is a `:' then the separator is `:', otherwise if there is a + `.' then the separator is `.', otherwise there is no separator. + + Each of USER and GROUP may be either a username (or group name, as + appropriate) or a decimal user ID (group ID). Interpretation as a + name takes precedence, if there is an all-numeric username (or + group name). + + If the target is a symbolic link, the -h option causes chown to set + the ownership of the link instead of its target. + + The -R option causes chown to recursively descend into directories, + changing the ownership of all files in the directory after + changing the ownership of the directory itself. + + The -s option is a zsh extension to chown functionality. It + enables paranoid behaviour, intended to avoid security problems + involving a chown being tricked into affecting files other than + the ones intended. It will refuse to follow symbolic links, so + that (for example) ``chown luser /tmp/foo/passwd'' can't + accidentally chown /etc/passwd if /tmp/foo happens to be a link to + /etc. It will also check where it is after leaving directories, + so that a recursive chown of a deep directory tree can't end up + recursively chowning /usr as a result of directories being moved + up the tree. + +ln [ -dfhins ] FILENAME DEST +ln [ -dfhins ] FILENAME ... DIR + Creates hard (or, with -s, symbolic) links. In the first form, the + specified DESTination is created, as a link to the specified + FILENAME. In the second form, each of the FILENAMEs is taken in + turn, and linked to a pathname in the specified DIRectory that has + the same last pathname component. + + Normally, ln will not attempt to create hard links to directories. + This check can be overridden using the -d option. Typically only + the super-user can actually succeed in creating hard links to + directories. This does not apply to symbolic links in any case. + + By default, existing files cannot be replaced by links. The -i + option causes the user to be queried about replacing existing + files. The -f option causes existing files to be silently + deleted, without querying. -f takes precedence. + + The -h and -n options are identical and both exist for + compatibility; either one indicates that if the target is a symlink + then it should not be dereferenced. Typically this is used in + combination with -sf so that if an existing link points to a + directory then it will be removed, instead of followed. If this + option is used with multiple filenames and the target is a + symbolic link pointing to a directory then the result is an error. + +mkdir [ -p ] [ -m MODE ] DIR ... + Creates directories. With the -p option, non-existing parent + directories are first created if necessary, and there will be no + complaint if the directory already exists. The -m option can be + used to specify (in octal) a set of file permissions for the + created directories, otherwise mode 777 modified by the current + umask (see man page umask(2)) is used. + +mv [ -fi ] FILENAME DEST +mv [ -fi ] FILENAME ... DIR + Moves files. In the first form, the specified FILENAME is moved + to the specified DESTination. In the second form, each of the + FILENAMEs is taken in turn, and moved to a pathname in the + specified DIRectory that has the same last pathname component. + + By default, the user will be queried before replacing any file + that the user cannot write to, but writable files will be silently + removed. The -i option causes the user to be queried about + replacing any existing files. The -f option causes any existing + files to be silently deleted, without querying. -f takes + precedence. + + Note that this mv will not move files across devices. Historical + versions of mv, when actual renaming is impossible, fall back on + copying and removing files; if this behaviour is desired, use cp + and rm manually. This may change in a future version. + +rm [ -dfiRrs ] FILENAME ... + Removes files and directories specified. + + Normally, rm will not remove directories (except with the -R or -r + options). The -d option causes rm to try removing directories + with unlink (see man page unlink(2)), the same method used for + files. Typically only the super-user can actually succeed in + unlinking directories in this way. -d takes precedence over -R + and -r. + + By default, the user will be queried before removing any file that + the user cannot write to, but writable files will be silently + removed. The -i option causes the user to be queried about + removing any files. The -f option causes files to be silently + deleted, without querying, and suppresses all error indications. + -f takes precedence. + + The -R and -r options cause rm to recursively descend into + directories, deleting all files in the directory before removing + the directory with the rmdir system call (see man page rmdir(2)). + + The -s option is a zsh extension to rm functionality. It enables + paranoid behaviour, intended to avoid common security problems + involving a root-run rm being tricked into removing files other + than the ones intended. It will refuse to follow symbolic links, + so that (for example) ``rm /tmp/foo/passwd'' can't accidentally + remove /etc/passwd if /tmp/foo happens to be a link to /etc. It + will also check where it is after leaving directories, so that a + recursive removal of a deep directory tree can't end up + recursively removing /usr as a result of directories being moved + up the tree. + +rmdir DIR ... + Removes empty directories specified. + +sync + Calls the system call of the same name (see man page sync(2)), + which flushes dirty buffers to disk. It might return before the + I/O has actually been completed. + + + +File: zsh.info, Node: The zsh/langinfo Module, Next: The zsh/mapfile Module, Prev: The zsh/files Module, Up: Zsh Modules + +22.15 The zsh/langinfo Module +============================= + + + + The zsh/langinfo module makes available one parameter: + + +langinfo + An associative array that maps langinfo elements to their values. + + Your implementation may support a number of the following keys: + + CODESET, D_T_FMT, D_FMT, T_FMT, RADIXCHAR, THOUSEP, YESEXPR, + NOEXPR, CRNCYSTR, ABDAY_{1..7}, DAY_{1..7}, ABMON_{1..12}, + MON_{1..12}, T_FMT_AMPM, AM_STR, PM_STR, ERA, ERA_D_FMT, + ERA_D_T_FMT, ERA_T_FMT, ALT_DIGITS + + + + +File: zsh.info, Node: The zsh/mapfile Module, Next: The zsh/mathfunc Module, Prev: The zsh/langinfo Module, Up: Zsh Modules + +22.16 The zsh/mapfile Module +============================ + + + + The zsh/mapfile module provides one special associative array +parameter of the same name. + + +mapfile + This associative array takes as keys the names of files; the + resulting value is the content of the file. The value is treated + identically to any other text coming from a parameter. The value + may also be assigned to, in which case the file in question is + written (whether or not it originally existed); or an element may + be unset, which will delete the file in question. For example, + `vared mapfile[myfile]' works as expected, editing the file + `myfile'. + + When the array is accessed as a whole, the keys are the names of + files in the current directory, and the values are empty (to save + a huge overhead in memory). Thus ${(k)mapfile} has the same + effect as the glob operator *(D), since files beginning with a dot + are not special. Care must be taken with expressions such as rm + ${(k)mapfile}, which will delete every file in the current + directory without the usual `rm *' test. + + The parameter mapfile may be made read-only; in that case, files + referenced may not be written or deleted. + + A file may conveniently be read into an array as one line per + element with the form `ARRAY=("${(f@)mapfile[FILENAME]}")'. The + double quotes and the `@' are necessary to prevent empty lines + from being removed. Note that if the file ends with a newline, + the shell will split on the final newline, generating an additional + empty field; this can be suppressed by using + `ARRAY=("${(f@)${mapfile[FILENAME]%$'\n'}}")'. + + + +22.16.1 Limitations +------------------- + +Although reading and writing of the file in question is efficiently +handled, zsh's internal memory management may be arbitrarily baroque; +however, mapfile is usually very much more efficient than anything +involving a loop. Note in particular that the whole contents of the +file will always reside physically in memory when accessed (possibly +multiple times, due to standard parameter substitution operations). In +particular, this means handling of sufficiently long files (greater +than the machine's swap space, or than the range of the pointer type) +will be incorrect. + +No errors are printed or flagged for non-existent, unreadable, or +unwritable files, as the parameter mechanism is too low in the shell +execution hierarchy to make this convenient. + +It is unfortunate that the mechanism for loading modules does not yet +allow the user to specify the name of the shell parameter to be given +the special behaviour. + + +File: zsh.info, Node: The zsh/mathfunc Module, Next: The zsh/nearcolor Module, Prev: The zsh/mapfile Module, Up: Zsh Modules + +22.17 The zsh/mathfunc Module +============================= + + + + The zsh/mathfunc module provides standard mathematical functions for +use when evaluating mathematical formulae. The syntax agrees with +normal C and FORTRAN conventions, for example, + + + (( f = sin(0.3) )) + +assigns the sine of 0.3 to the parameter f. + +Most functions take floating point arguments and return a floating point +value. However, any necessary conversions from or to integer type will +be performed automatically by the shell. Apart from atan with a second +argument and the abs, int and float functions, all functions behave as +noted in the manual page for the corresponding C function, except that +any arguments out of range for the function in question will be +detected by the shell and an error reported. + +The following functions take a single floating point argument: acos, +acosh, asin, asinh, atan, atanh, cbrt, ceil, cos, cosh, erf, erfc, exp, +expm1, fabs, floor, gamma, j0, j1, lgamma, log, log10, log1p, log2, +logb, sin, sinh, sqrt, tan, tanh, y0, y1. The atan function can +optionally take a second argument, in which case it behaves like the C +function atan2. The ilogb function takes a single floating point +argument, but returns an integer. + +The function signgam takes no arguments, and returns an integer, which +is the C variable of the same name, as described in man page gamma(3). +Note that it is therefore only useful immediately after a call to gamma +or lgamma. Note also that `signgam()' and `signgam' are distinct +expressions. + +The functions min, max, and sum are defined not in this module but in +the zmathfunc autoloadable function, described in *Note Mathematical +Functions::. + +The following functions take two floating point arguments: copysign, +fmod, hypot, nextafter. + +The following take an integer first argument and a floating point second +argument: jn, yn. + +The following take a floating point first argument and an integer second +argument: ldexp, scalb. + +The function abs does not convert the type of its single argument; it +returns the absolute value of either a floating point number or an +integer. The functions float and int convert their arguments into a +floating point or integer value (by truncation) respectively. + +Note that the C pow function is available in ordinary math evaluation +as the `**' operator and is not provided here. + +The function rand48 is available if your system's mathematical library +has the function erand48(3). It returns a pseudo-random floating point +number between 0 and 1. It takes a single string optional argument. + +If the argument is not present, the random number seed is initialised by +three calls to the rand(3) function -- this produces the same random +numbers as the next three values of $RANDOM. + +If the argument is present, it gives the name of a scalar parameter +where the current random number seed will be stored. On the first +call, the value must contain at least twelve hexadecimal digits (the +remainder of the string is ignored), or the seed will be initialised in +the same manner as for a call to rand48 with no argument. Subsequent +calls to rand48(PARAM) will then maintain the seed in the parameter +PARAM as a string of twelve hexadecimal digits, with no base signifier. +The random number sequences for different parameters are completely +independent, and are also independent from that used by calls to rand48 +with no argument. + +For example, consider + + + print $(( rand48(seed) )) + print $(( rand48() )) + print $(( rand48(seed) )) + +Assuming $seed does not exist, it will be initialised by the first +call. In the second call, the default seed is initialised; note, +however, that because of the properties of rand() there is a +correlation between the seeds used for the two initialisations, so for +more secure uses, you should generate your own 12-byte seed. The third +call returns to the same sequence of random numbers used in the first +call, unaffected by the intervening rand48(). + + +File: zsh.info, Node: The zsh/nearcolor Module, Next: The zsh/newuser Module, Prev: The zsh/mathfunc Module, Up: Zsh Modules + +22.18 The zsh/nearcolor Module +============================== + + + + The zsh/nearcolor module replaces colours specified as hex triplets +with the nearest colour in the 88 or 256 colour palettes that are widely +used by terminal emulators. By default, 24-bit true colour escape codes +are generated when colours are specified using hex triplets. These are +not supported by all terminals. The purpose of this module is to make +it easier to define colour preferences in a form that can work across a +range of terminal emulators. + +Aside from the default colour, the ANSI standard for terminal escape +codes provides for eight colours. The bright attribute brings this to +sixteen. These basic colours are commonly used in terminal applications +due to being widely supported. Expanded 88 and 256 colour palettes are +also common and, while the first sixteen colours vary somewhat between +terminals and configurations, these add a generally consistent and +predictable set of colours. + +In order to use the zsh/nearcolor module, it only needs to be loaded. +Thereafter, whenever a colour is specified using a hex triplet, it will +be compared against each of the available colours and the closest will +be selected. The first sixteen colours are never matched in this +process due to being unpredictable. + +It isn't possible to reliably detect support for true colour in the +terminal emulator. It is therefore recommended to be selective in +loading the zsh/nearcolor module. For example, the following checks the +COLORTERM environment variable: + + + [[ $COLORTERM = *(24bit|truecolor)* ]] || zmodload zsh/nearcolor + +Note that some terminals accept the true color escape codes but map +them internally to a more limited palette in a similar manner to the +zsh/nearcolor module. + + +File: zsh.info, Node: The zsh/newuser Module, Next: The zsh/parameter Module, Prev: The zsh/nearcolor Module, Up: Zsh Modules + +22.19 The zsh/newuser Module +============================ + + + + The zsh/newuser module is loaded at boot if it is available, the RCS +option is set, and the PRIVILEGED option is not set (all three are true +by default). This takes place immediately after commands in the global +zshenv file (typically /etc/zshenv), if any, have been executed. If +the module is not available it is silently ignored by the shell; the +module may safely be removed from $MODULE_PATH by the administrator if +it is not required. + +On loading, the module tests if any of the start-up files .zshenv, +.zprofile, .zshrc or .zlogin exist in the directory given by the +environment variable ZDOTDIR, or the user's home directory if that is +not set. The test is not performed and the module halts processing if +the shell was in an emulation mode (i.e. had been invoked as some other +shell than zsh). + +If none of the start-up files were found, the module then looks for the +file newuser first in a sitewide directory, usually the parent +directory of the site-functions directory, and if that is not found the +module searches in a version-specific directory, usually the parent of +the functions directory containing version-specific functions. (These +directories can be configured when zsh is built using the +-enable-site-scriptdir=DIR and -enable-scriptdir=DIR flags to +configure, respectively; the defaults are PREFIX/share/zsh and +PREFIX/share/zsh/$ZSH_VERSION where the default PREFIX is /usr/local.) + +If the file newuser is found, it is then sourced in the same manner as +a start-up file. The file is expected to contain code to install +start-up files for the user, however any valid shell code will be +executed. + +The zsh/newuser module is then unconditionally unloaded. + +Note that it is possible to achieve exactly the same effect as the +zsh/newuser module by adding code to /etc/zshenv. The module exists +simply to allow the shell to make arrangements for new users without +the need for intervention by package maintainers and system +administrators. + +The script supplied with the module invokes the shell function +zsh-newuser-install. This may be invoked directly by the user even if +the zsh/newuser module is disabled. Note, however, that if the module +is not installed the function will not be installed either. The +function is documented in *Note User Configuration Functions::. + + +File: zsh.info, Node: The zsh/parameter Module, Next: The zsh/pcre Module, Prev: The zsh/newuser Module, Up: Zsh Modules + +22.20 The zsh/parameter Module +============================== + + + + The zsh/parameter module gives access to some of the internal hash +tables used by the shell by defining some special parameters. + + +options + The keys for this associative array are the names of the options + that can be set and unset using the setopt and unsetopt builtins. + The value of each key is either the string on if the option is + currently set, or the string off if the option is unset. Setting + a key to one of these strings is like setting or unsetting the + option, respectively. Unsetting a key in this array is like + setting it to the value off. + +commands + This array gives access to the command hash table. The keys are the + names of external commands, the values are the pathnames of the + files that would be executed when the command would be invoked. + Setting a key in this array defines a new entry in this table in + the same way as with the hash builtin. Unsetting a key as in `unset + "commands[foo]"' removes the entry for the given key from the + command hash table. + +functions + This associative array maps names of enabled functions to their + definitions. Setting a key in it is like defining a function with + the name given by the key and the body given by the value. + Unsetting a key removes the definition for the function named by + the key. + +dis_functions + Like functions but for disabled functions. + +functions_source + This readonly associative array maps names of enabled functions to + the name of the file containing the source of the function. + + For an autoloaded function that has already been loaded, or marked + for autoload with an absolute path, or that has had its path + resolved with `functions -r', this is the file found for + autoloading, resolved to an absolute path. + + For a function defined within the body of a script or sourced file, + this is the name of that file. In this case, this is the exact + path originally used to that file, which may be a relative path. + + For any other function, including any defined at an interactive + prompt or an autoload function whose path has not yet been + resolved, this is the empty string. However, the hash element is + reported as defined just so long as the function is present: the + keys to this hash are the same as those to $functions. + +dis_functions_source + Like functions_source but for disabled functions. + +builtins + This associative array gives information about the builtin commands + currently enabled. The keys are the names of the builtin commands + and the values are either `undefined' for builtin commands that + will automatically be loaded from a module if invoked or `defined' + for builtin commands that are already loaded. + +dis_builtins + Like builtins but for disabled builtin commands. + +reswords + This array contains the enabled reserved words. + +dis_reswords + Like reswords but for disabled reserved words. + +patchars + This array contains the enabled pattern characters. + +dis_patchars + Like patchars but for disabled pattern characters. + +aliases + This maps the names of the regular aliases currently enabled to + their expansions. + +dis_aliases + Like aliases but for disabled regular aliases. + +galiases + Like aliases, but for global aliases. + +dis_galiases + Like galiases but for disabled global aliases. + +saliases + Like raliases, but for suffix aliases. + +dis_saliases + Like saliases but for disabled suffix aliases. + +parameters + The keys in this associative array are the names of the parameters + currently defined. The values are strings describing the type of + the parameter, in the same format used by the t parameter flag, see + *Note Parameter Expansion:: . Setting or unsetting keys in this + array is not possible. + +modules + An associative array giving information about modules. The keys + are the names of the modules loaded, registered to be autoloaded, + or aliased. The value says which state the named module is in and + is one of the strings `loaded', `autoloaded', or `alias:NAME', + where NAME is the name the module is aliased to. + + Setting or unsetting keys in this array is not possible. + +dirstack + A normal array holding the elements of the directory stack. Note + that the output of the dirs builtin command includes one more + directory, the current working directory. + +history + This associative array maps history event numbers to the full + history lines. Although it is presented as an associative array, + the array of all values (${history[@]}) is guaranteed to be + returned in order from most recent to oldest history event, that + is, by decreasing history event number. + +historywords + A special array containing the words stored in the history. These + also appear in most to least recent order. + +jobdirs + This associative array maps job numbers to the directories from + which the job was started (which may not be the current directory + of the job). + + The keys of the associative arrays are usually valid job numbers, + and these are the values output with, for example, ${(k)jobdirs}. + Non-numeric job references may be used when looking up a value; + for example, ${jobdirs[%+]} refers to the current job. + +jobtexts + This associative array maps job numbers to the texts of the + command lines that were used to start the jobs. + + Handling of the keys of the associative array is as described for + jobdirs above. + +jobstates + This associative array gives information about the states of the + jobs currently known. The keys are the job numbers and the values + are strings of the form `JOB-STATE:MARK:PID=STATE...'. The + JOB-STATE gives the state the whole job is currently in, one of + `running', `suspended', or `done'. The MARK is `+' for the current + job, `-' for the previous job and empty otherwise. This is + followed by one `:PID=STATE' for every process in the job. The + PIDs are, of course, the process IDs and the STATE describes the + state of that process. + + Handling of the keys of the associative array is as described for + jobdirs above. + +nameddirs + This associative array maps the names of named directories to the + pathnames they stand for. + +userdirs + This associative array maps user names to the pathnames of their + home directories. + +usergroups + This associative array maps names of system groups of which the + current user is a member to the corresponding group identifiers. + The contents are the same as the groups output by the id command. + +funcfiletrace + This array contains the absolute line numbers and corresponding + file names for the point where the current function, sourced file, + or (if EVAL_LINENO is set) eval command was called. The array is + of the same length as funcsourcetrace and functrace, but differs + from funcsourcetrace in that the line and file are the point of + call, not the point of definition, and differs from functrace in + that all values are absolute line numbers in files, rather than + relative to the start of a function, if any. + +funcsourcetrace + This array contains the file names and line numbers of the points + where the functions, sourced files, and (if EVAL_LINENO is set) + eval commands currently being executed were defined. The line + number is the line where the `function NAME' or `NAME ()' started. + In the case of an autoloaded function the line number is + reported as zero. The format of each element is FILENAME:LINENO. + + For functions autoloaded from a file in native zsh format, where + only the body of the function occurs in the file, or for files + that have been executed by the source or `.' builtins, the trace + information is shown as FILENAME:0, since the entire file is the + definition. The source file name is resolved to an absolute path + when the function is loaded or the path to it otherwise resolved. + + Most users will be interested in the information in the + funcfiletrace array instead. + +funcstack + This array contains the names of the functions, sourced files, and + (if EVAL_LINENO is set) eval commands. currently being executed. + The first element is the name of the function using the parameter. + + The standard shell array zsh_eval_context can be used to determine + the type of shell construct being executed at each depth: note, + however, that is in the opposite order, with the most recent item + last, and it is more detailed, for example including an entry for + toplevel, the main shell code being executed either interactively + or from a script, which is not present in $funcstack. + +functrace + This array contains the names and line numbers of the callers + corresponding to the functions currently being executed. The + format of each element is NAME:LINENO. Callers are also shown for + sourced files; the caller is the point where the source or `.' + command was executed. + + + +File: zsh.info, Node: The zsh/pcre Module, Next: The zsh/param/private Module, Prev: The zsh/parameter Module, Up: Zsh Modules + +22.21 The zsh/pcre Module +========================= + + + + The zsh/pcre module makes some commands available as builtins: + + +pcre_compile [ -aimxs ] PCRE + Compiles a perl-compatible regular expression. + + Option -a will force the pattern to be anchored. Option -i will + compile a case-insensitive pattern. Option -m will compile a + multi-line pattern; that is, ^ and $ will match newlines within + the pattern. Option -x will compile an extended pattern, wherein + whitespace and # comments are ignored. Option -s makes the dot + metacharacter match all characters, including those that indicate + newline. + +pcre_study + Studies the previously-compiled PCRE which may result in faster + matching. + +pcre_match [ -v VAR ] [ -a ARR ] [ -n OFFSET ] [ -b ] STRING + Returns successfully if string matches the previously-compiled + PCRE. + + Upon successful match, if the expression captures substrings + within parentheses, pcre_match will set the array match to those + substrings, unless the -a option is given, in which case it will + set the array ARR. Similarly, the variable MATCH will be set to + the entire matched portion of the string, unless the -v option is + given, in which case the variable VAR will be set. No variables + are altered if there is no successful match. A -n option starts + searching for a match from the byte OFFSET position in STRING. If + the -b option is given, the variable ZPCRE_OP will be set to an + offset pair string, representing the byte offset positions of the + entire matched portion within the STRING. For example, a ZPCRE_OP + set to "32 45" indicates that the matched portion began on byte + offset 32 and ended on byte offset 44. Here, byte offset position + 45 is the position directly after the matched portion. Keep in + mind that the byte position isn't necessarily the same as the + character position when UTF-8 characters are involved. + Consequently, the byte offset positions are only to be relied on + in the context of using them for subsequent searches on STRING, + using an offset position as an argument to the -n option. This is + mostly used to implement the "find all non-overlapping matches" + functionality. + + A simple example of "find all non-overlapping matches": + + + string="The following zip codes: 78884 90210 99513" + pcre_compile -m "\d{5}" + accum=() + pcre_match -b -- $string + while [[ $? -eq 0 ]] do + b=($=ZPCRE_OP) + accum+=$MATCH + pcre_match -b -n $b[2] -- $string + done + print -l $accum + + +The zsh/pcre module makes available the following test condition: + + +EXPR -pcre-match PCRE + Matches a string against a perl-compatible regular expression. + + For example, + + + [[ "$text" -pcre-match ^d+$ ]] && + print text variable contains only "d's". + + If the REMATCH_PCRE option is set, the =~ operator is equivalent to + -pcre-match, and the NO_CASE_MATCH option may be used. Note that + NO_CASE_MATCH never applies to the pcre_match builtin, instead use + the -i switch of pcre_compile. + + + +File: zsh.info, Node: The zsh/param/private Module, Next: The zsh/regex Module, Prev: The zsh/pcre Module, Up: Zsh Modules + +22.22 The zsh/param/private Module +================================== + + + + The zsh/param/private module is used to create parameters whose scope +is limited to the current function body, and _not_ to other functions +called by the current function. + +This module provides a single autoloaded builtin: + +private [ {+|-}AHUahlprtux ] [ {+|-}EFLRZi [ N ] ] [ NAME[=VALUE] ... ] + The private builtin accepts all the same options and arguments as + local (*Note Shell Builtin Commands::) except for the `-T' option. + Tied parameters may not be made private. + + If used at the top level (outside a function scope), private + creates a normal parameter in the same manner as declare or + typeset. A warning about this is printed if WARN_CREATE_GLOBAL is + set (*Note Options::). Used inside a function scope, private + creates a local parameter similar to one declared with local, + except having special properties noted below. + + Special parameters which expose or manipulate internal shell + state, such as ARGC, argv, COLUMNS, LINES, UID, EUID, IFS, PROMPT, + RANDOM, SECONDS, etc., cannot be made private unless the `-h' + option is used to hide the special meaning of the parameter. This + may change in the future. + + +As with other typeset equivalents, private is both a builtin and a +reserved word, so arrays may be assigned with parenthesized word list +NAME=(VALUE...) syntax. However, the reserved word `private' is not +available until zsh/param/private is loaded, so care must be taken with +order of execution and parsing for function definitions which use +private. To compensate for this, the module also adds the option `-P' +to the `local' builtin to declare private parameters. + +For example, this construction fails if zsh/param/private has not yet +been loaded when `bad_declaration' is defined: + bad_declaration() { + zmodload zsh/param/private + private array=( one two three ) + } + +This construction works because local is already a keyword, and the +module is loaded before the statement is executed: + good_declaration() { + zmodload zsh/param/private + local -P array=( one two three ) + } + +The following is usable in scripts but may have trouble with autoload: + zmodload zsh/param/private + iffy_declaration() { + private array=( one two three ) + } + +The private builtin may always be used with scalar assignments and for +declarations without assignments. + +Parameters declared with private have the following properties: + + * Within the function body where it is declared, the parameter + behaves as a local, except as noted above for tied or special + parameters. + + * The type of a parameter declared private cannot be changed in the + scope where it was declared, even if the parameter is unset. Thus + an array cannot be assigned to a private scalar, etc. + + * Within any other function called by the declaring function, the + private parameter does _NOT_ hide other parameters of the same + name, so for example a global parameter of the same name is + visible and may be assigned or unset. This includes calls to + anonymous functions, although that may also change in the future. + + * An exported private remains in the environment of inner scopes but + appears unset for the current shell in those scopes. Generally, + exporting private parameters should be avoided. + +Note that this differs from the static scope defined by compiled +languages derived from C, in that the a new call to the same function +creates a new scope, i.e., the parameter is still associated with the +call stack rather than with the function definition. It differs from +ksh `typeset -S' because the syntax used to define the function has no +bearing on whether the parameter scope is respected. + + +File: zsh.info, Node: The zsh/regex Module, Next: The zsh/sched Module, Prev: The zsh/param/private Module, Up: Zsh Modules + +22.23 The zsh/regex Module +========================== + + + + The zsh/regex module makes available the following test condition: + + +EXPR -regex-match REGEX + Matches a string against a POSIX extended regular expression. On + successful match, matched portion of the string will normally be + placed in the MATCH variable. If there are any capturing + parentheses within the regex, then the match array variable will + contain those. If the match is not successful, then the variables + will not be altered. + + For example, + + + [[ alphabetical -regex-match ^a([^a]+)a([^a]+)a ]] && + print -l $MATCH X $match + + If the option REMATCH_PCRE is not set, then the =~ operator will + automatically load this module as needed and will invoke the + -regex-match operator. + + If BASH_REMATCH is set, then the array BASH_REMATCH will be set + instead of MATCH and match. + + + +File: zsh.info, Node: The zsh/sched Module, Next: The zsh/net/socket Module, Prev: The zsh/regex Module, Up: Zsh Modules + +22.24 The zsh/sched Module +========================== + + + + The zsh/sched module makes available one builtin command and one +parameter. + + +sched [-o] [+]HH:MM[:SS] COMMAND ... +sched [-o] [+]SECONDS COMMAND ... +sched [ -ITEM ] + Make an entry in the scheduled list of commands to execute. The + time may be specified in either absolute or relative time, and + either as hours, minutes and (optionally) seconds separated by a + colon, or seconds alone. An absolute number of seconds indicates + the time since the epoch (1970/01/01 00:00); this is useful in + combination with the features in the zsh/datetime module, see + *Note The zsh/datetime Module::. + + With no arguments, prints the list of scheduled commands. If the + scheduled command has the -o flag set, this is shown at the start + of the command. + + With the argument `-ITEM', removes the given item from the list. + The numbering of the list is continuous and entries are in time + order, so the numbering can change when entries are added or + deleted. + + Commands are executed either immediately before a prompt, or while + the shell's line editor is waiting for input. In the latter case + it is useful to be able to produce output that does not interfere + with the line being edited. Providing the option -o causes the + shell to clear the command line before the event and redraw it + afterwards. This should be used with any scheduled event that + produces visible output to the terminal; it is not needed, for + example, with output that updates a terminal emulator's title bar. + + To effect changes to the editor buffer when an event executes, use + the `zle' command with no arguments to test whether the editor is + active, and if it is, then use `zle WIDGET' to access the editor + via the named WIDGET. + + The sched builtin is not made available by default when the shell + starts in a mode emulating another shell. It can be made available + with the command `zmodload -F zsh/sched b:sched'. + + + +zsh_scheduled_events + A readonly array corresponding to the events scheduled by the + sched builtin. The indices of the array correspond to the numbers + shown when sched is run with no arguments (provided that the + KSH_ARRAYS option is not set). The value of the array consists of + the scheduled time in seconds since the epoch (see *Note The + zsh/datetime Module:: for facilities for using this number), + followed by a colon, followed by any options (which may be empty + but will be preceded by a `-' otherwise), followed by a colon, + followed by the command to be executed. + + The sched builtin should be used for manipulating the events. Note + that this will have an immediate effect on the contents of the + array, so that indices may become invalid. + + + +File: zsh.info, Node: The zsh/net/socket Module, Next: The zsh/stat Module, Prev: The zsh/sched Module, Up: Zsh Modules + +22.25 The zsh/net/socket Module +=============================== + + + + The zsh/net/socket module makes available one builtin command: + + +zsocket [ -altv ] [ -d FD ] [ ARGS ] + zsocket is implemented as a builtin to allow full use of shell + command line editing, file I/O, and job control mechanisms. + + + +22.25.1 Outbound Connections +---------------------------- + + + + +zsocket [ -v ] [ -d FD ] FILENAME + Open a new Unix domain connection to FILENAME. The shell + parameter REPLY will be set to the file descriptor associated with + that connection. Currently, only stream connections are supported. + + If -d is specified, its argument will be taken as the target file + descriptor for the connection. + + In order to elicit more verbose output, use -v. + + File descriptors can be closed with normal shell syntax when no + longer needed, for example: + + + exec {REPLY}>&- + + + +22.25.2 Inbound Connections +--------------------------- + + + + +zsocket -l [ -v ] [ -d FD ] FILENAME + zsocket -l will open a socket listening on FILENAME. The shell + parameter REPLY will be set to the file descriptor associated with + that listener. The file descriptor remains open in subshells and + forked external executables. + + If -d is specified, its argument will be taken as the target file + descriptor for the connection. + + In order to elicit more verbose output, use -v. + +zsocket -a [ -tv ] [ -d TARGETFD ] LISTENFD + zsocket -a will accept an incoming connection to the socket + associated with LISTENFD. The shell parameter REPLY will be set + to the file descriptor associated with the inbound connection. + The file descriptor remains open in subshells and forked external + executables. + + If -d is specified, its argument will be taken as the target file + descriptor for the connection. + + If -t is specified, zsocket will return if no incoming connection + is pending. Otherwise it will wait for one. + + In order to elicit more verbose output, use -v. + + + +File: zsh.info, Node: The zsh/stat Module, Next: The zsh/system Module, Prev: The zsh/net/socket Module, Up: Zsh Modules + +22.26 The zsh/stat Module +========================= + + + + The zsh/stat module makes available one builtin command under two +possible names: + + +zstat [ -gnNolLtTrs ] [ -f FD ] [ -H HASH ] [ -A ARRAY ] [ -F FMT ] + [ +ELEMENT ] [ FILE ... ] +stat ... + The command acts as a front end to the stat system call (see man + page stat(2)). The same command is provided with two names; as + the name stat is often used by an external command it is + recommended that only the zstat form of the command is used. This + can be arranged by loading the module with the command `zmodload + -F zsh/stat b:zstat'. + + If the stat call fails, the appropriate system error message + printed and status 1 is returned. The fields of struct stat give + information about the files provided as arguments to the command. + In addition to those available from the stat call, an extra + element `link' is provided. These elements are: + + + device + The number of the device on which the file resides. + + inode + The unique number of the file on this device (`_inode_' + number). + + mode + The mode of the file; that is, the file's type and access + permissions. With the -s option, this will be returned as a + string corresponding to the first column in the display of + the ls -l command. + + nlink + The number of hard links to the file. + + uid + The user ID of the owner of the file. With the -s option, + this is displayed as a user name. + + gid + The group ID of the file. With the -s option, this is + displayed as a group name. + + rdev + The raw device number. This is only useful for special + devices. + + size + The size of the file in bytes. + + atime + mtime + ctime + The last access, modification and inode change times of the + file, respectively, as the number of seconds since midnight + GMT on 1st January, 1970. With the -s option, these are + printed as strings for the local time zone; the format can be + altered with the -F option, and with the -g option the times + are in GMT. + + blksize + The number of bytes in one allocation block on the device on + which the file resides. + + block + The number of disk blocks used by the file. + + link + If the file is a link and the -L option is in effect, this + contains the name of the file linked to, otherwise it is + empty. Note that if this element is selected (``zstat + +link'') then the -L option is automatically used. + + + A particular element may be selected by including its name + preceded by a `+' in the option list; only one element is allowed. + The element may be shortened to any unique set of leading + characters. Otherwise, all elements will be shown for all files. + + Options: + + + -A ARRAY + Instead of displaying the results on standard output, assign + them to an ARRAY, one struct stat element per array element + for each file in order. In this case neither the name of the + element nor the name of the files appears in ARRAY unless the + -t or -n options were given, respectively. If -t is given, + the element name appears as a prefix to the appropriate array + element; if -n is given, the file name appears as a separate + array element preceding all the others. Other formatting + options are respected. + + -H HASH + Similar to -A, but instead assign the values to HASH. The + keys are the elements listed above. If the -n option is + provided then the name of the file is included in the hash + with key name. + + -f FD + Use the file on file descriptor FD instead of named files; no + list of file names is allowed in this case. + + -F FMT + Supplies a strftime (see man page strftime(3)) string for the + formatting of the time elements. The format string supports + all of the zsh extensions described in *Note Prompt + Expansion::. The -s option is implied. + + -g + Show the time elements in the GMT time zone. The -s option + is implied. + + -l + List the names of the type elements (to standard output or an + array as appropriate) and return immediately; arguments, and + options other than -A, are ignored. + + -L + Perform an lstat (see man page lstat(2)) rather than a stat + system call. In this case, if the file is a link, information + about the link itself rather than the target file is returned. + This option is required to make the link element useful. + It's important to note that this is the exact opposite from + man page ls(1), etc. + + -n + Always show the names of files. Usually these are only shown + when output is to standard output and there is more than one + file in the list. + + -N + Never show the names of files. + + -o + If a raw file mode is printed, show it in octal, which is + more useful for human consumption than the default of + decimal. A leading zero will be printed in this case. Note + that this does not affect whether a raw or formatted file + mode is shown, which is controlled by the -r and -s options, + nor whether a mode is shown at all. + + -r + Print raw data (the default format) alongside string data + (the -s format); the string data appears in parentheses after + the raw data. + + -s + Print mode, uid, gid and the three time elements as strings + instead of numbers. In each case the format is like that of + ls -l. + + -t + Always show the type names for the elements of struct stat. + Usually these are only shown when output is to standard + output and no individual element has been selected. + + -T + Never show the type names of the struct stat elements. + + + + +File: zsh.info, Node: The zsh/system Module, Next: The zsh/net/tcp Module, Prev: The zsh/stat Module, Up: Zsh Modules + +22.27 The zsh/system Module +=========================== + + + + The zsh/system module makes available various builtin commands and +parameters. + + + +22.27.1 Builtins +---------------- + + +syserror [ -e ERRVAR ] [ -p PREFIX ] [ ERRNO | ERRNAME ] + This command prints out the error message associated with ERRNO, a + system error number, followed by a newline to standard error. + + Instead of the error number, a name ERRNAME, for example ENOENT, + may be used. The set of names is the same as the contents of the + array errnos, see below. + + If the string PREFIX is given, it is printed in front of the error + message, with no intervening space. + + If ERRVAR is supplied, the entire message, without a newline, is + assigned to the parameter names ERRVAR and nothing is output. + + A return status of 0 indicates the message was successfully printed + (although it may not be useful if the error number was out of the + system's range), a return status of 1 indicates an error in the + parameters, and a return status of 2 indicates the error name was + not recognised (no message is printed for this). + +sysopen [ -arw ] [ -m PERMISSIONS ] [ -o OPTIONS ] + -u FD FILE + This command opens a file. The -r, -w and -a flags indicate + whether the file should be opened for reading, writing and + appending, respectively. The -m option allows the initial + permissions to use when creating a file to be specified in octal + form. The file descriptor is specified with -u. Either an + explicit file descriptor in the range 0 to 9 can be specified or a + variable name can be given to which the file descriptor number + will be assigned. + + The -o option allows various system specific options to be + specified as a comma-separated list. The following is a list of + possible options. Note that, depending on the system, some may not + be available. + cloexec + mark file to be closed when other programs are executed (else + the file descriptor remains open in subshells and forked + external executables) + + create + creat + create file if it does not exist + + excl + create file, error if it already exists + + noatime + suppress updating of the file atime + + nofollow + fail if FILE is a symbolic link + + sync + request that writes wait until data has been physically + written + + truncate + trunc + truncate file to size 0 + + + To close the file, use one of the following: + + + exec {FD}<&- + exec {FD}>&- + +sysread [ -c COUNTVAR ] [ -i INFD ] [ -o OUTFD ] + [ -s BUFSIZE ] [ -t TIMEOUT ] [ PARAM ] + Perform a single system read from file descriptor INFD, or zero if + that is not given. The result of the read is stored in PARAM or + REPLY if that is not given. If COUNTVAR is given, the number of + bytes read is assigned to the parameter named by COUNTVAR. + + The maximum number of bytes read is BUFSIZE or 8192 if that is not + given, however the command returns as soon as any number of bytes + was successfully read. + + If TIMEOUT is given, it specifies a timeout in seconds, which may + be zero to poll the file descriptor. This is handled by the poll + system call if available, otherwise the select system call if + available. + + If OUTFD is given, an attempt is made to write all the bytes just + read to the file descriptor OUTFD. If this fails, because of a + system error other than EINTR or because of an internal zsh error + during an interrupt, the bytes read but not written are stored in + the parameter named by PARAM if supplied (no default is used in + this case), and the number of bytes read but not written is stored + in the parameter named by COUNTVAR if that is supplied. If it was + successful, COUNTVAR contains the full number of bytes transferred, + as usual, and PARAM is not set. + + The error EINTR (interrupted system call) is handled internally so + that shell interrupts are transparent to the caller. Any other + error causes a return. + + The possible return statuses are + 0 + At least one byte of data was successfully read and, if + appropriate, written. + + 1 + There was an error in the parameters to the command. This is + the only error for which a message is printed to standard + error. + + 2 + There was an error on the read, or on polling the input file + descriptor for a timeout. The parameter ERRNO gives the + error. + + 3 + Data were successfully read, but there was an error writing + them to OUTFD. The parameter ERRNO gives the error. + + 4 + The attempt to read timed out. Note this does not set ERRNO + as this is not a system error. + + 5 + No system error occurred, but zero bytes were read. This + usually indicates end of file. The parameters are set + according to the usual rules; no write to OUTFD is attempted. + + +sysseek [ -u FD ] [ -w start|end|current ] OFFSET + The current file position at which future reads and writes will + take place is adjusted to the specified byte offset. The OFFSET is + evaluated as a math expression. The -u option allows the file + descriptor to be specified. By default the offset is specified + relative to the start or the file but, with the -w option, it is + possible to specify that the offset should be relative to the + current position or the end of the file. + +syswrite [ -c COUNTVAR ] [ -o OUTFD ] DATA + The data (a single string of bytes) are written to the file + descriptor OUTFD, or 1 if that is not given, using the write + system call. Multiple write operations may be used if the first + does not write all the data. + + If COUNTVAR is given, the number of byte written is stored in the + parameter named by COUNTVAR; this may not be the full length of + DATA if an error occurred. + + The error EINTR (interrupted system call) is handled internally by + retrying; otherwise an error causes the command to return. For + example, if the file descriptor is set to non-blocking output, an + error EAGAIN (on some systems, EWOULDBLOCK) may result in the + command returning early. + + The return status may be 0 for success, 1 for an error in the + parameters to the command, or 2 for an error on the write; no + error message is printed in the last case, but the parameter ERRNO + will reflect the error that occurred. + +zsystem flock [ -t TIMEOUT ] [ -f VAR ] [-er] FILE +zsystem flock -u FD_EXPR + The builtin zsystem's subcommand flock performs advisory file + locking (via the man page fcntl(2) system call) over the entire + contents of the given file. This form of locking requires the + processes accessing the file to cooperate; its most obvious use is + between two instances of the shell itself. + + In the first form the named FILE, which must already exist, is + locked by opening a file descriptor to the file and applying a + lock to the file descriptor. The lock terminates when the shell + process that created the lock exits; it is therefore often + convenient to create file locks within subshells, since the lock + is automatically released when the subshell exits. Note that use + of the print builtin with the -u option will, as a side effect, + release the lock, as will redirection to the file in the shell + holding the lock. To work around this use a subshell, e.g. + `(print message) >> FILE'. Status 0 is returned if the lock + succeeds, else status 1. + + In the second form the file descriptor given by the arithmetic + expression FD_EXPR is closed, releasing a lock. The file + descriptor can be queried by using the `-f VAR' form during the + lock; on a successful lock, the shell variable VAR is set to the + file descriptor used for locking. The lock will be released if the + file descriptor is closed by any other means, for example using + `exec {VAR}>&-'; however, the form described here performs a + safety check that the file descriptor is in use for file locking. + + By default the shell waits indefinitely for the lock to succeed. + The option -t TIMEOUT specifies a timeout for the lock in seconds; + currently this must be an integer. The shell will attempt to lock + the file once a second during this period. If the attempt times + out, status 2 is returned. + + If the option -e is given, the file descriptor for the lock is + preserved when the shell uses exec to start a new process; + otherwise it is closed at that point and the lock released. + + If the option -r is given, the lock is only for reading, otherwise + it is for reading and writing. The file descriptor is opened + accordingly. + +zsystem supports SUBCOMMAND + The builtin zsystem's subcommand supports tests whether a given + subcommand is supported. It returns status 0 if so, else status + 1. It operates silently unless there was a syntax error (i.e. the + wrong number of arguments), in which case status 255 is returned. + Status 1 can indicate one of two things: SUBCOMMAND is known but + not supported by the current operating system, or SUBCOMMAND is + not known (possibly because this is an older version of the shell + before it was implemented). + + + +22.27.2 Math Functions +---------------------- + + +systell(FD) + The systell math function returns the current file position for + the file descriptor passed as an argument. + + + +22.27.3 Parameters +------------------ + + +errnos + A readonly array of the names of errors defined on the system. + These are typically macros defined in C by including the system + header file errno.h. The index of each name (assuming the option + KSH_ARRAYS is unset) corresponds to the error number. Error + numbers NUM before the last known error which have no name are + given the name ENUM in the array. + + Note that aliases for errors are not handled; only the canonical + name is used. + +sysparams + A readonly associative array. The keys are: + + + pid + Returns the process ID of the current process, even in + subshells. Compare $$, which returns the process ID of the + main shell process. + + ppid + Returns the process ID of the parent of the current process, + even in subshells. Compare $PPID, which returns the process + ID of the parent of the main shell process. + + procsubstpid + Returns the process ID of the last process started for process + substitution, i.e. the <(...) and >(...) expansions. + + + + +File: zsh.info, Node: The zsh/net/tcp Module, Next: The zsh/termcap Module, Prev: The zsh/system Module, Up: Zsh Modules + +22.28 The zsh/net/tcp Module +============================ + + + + The zsh/net/tcp module makes available one builtin command: + + +ztcp [ -acflLtv ] [ -d FD ] [ ARGS ] + ztcp is implemented as a builtin to allow full use of shell + command line editing, file I/O, and job control mechanisms. + + If ztcp is run with no options, it will output the contents of its + session table. + + If it is run with only the option -L, it will output the contents + of the session table in a format suitable for automatic parsing. + The option is ignored if given with a command to open or close a + session. The output consists of a set of lines, one per session, + each containing the following elements separated by spaces: + + + File descriptor + The file descriptor in use for the connection. For normal + inbound (I) and outbound (O) connections this may be read and + written by the usual shell mechanisms. However, it should + only be close with `ztcp -c'. + + Connection type + A letter indicating how the session was created: + + + Z + A session created with the zftp command. + + L + A connection opened for listening with `ztcp -l'. + + I + An inbound connection accepted with `ztcp -a'. + + O + An outbound connection created with `ztcp HOST ...'. + + + + The local host + This is usually set to an all-zero IP address as the address + of the localhost is irrelevant. + + The local port + This is likely to be zero unless the connection is for + listening. + + The remote host + This is the fully qualified domain name of the peer, if + available, else an IP address. It is an all-zero IP address + for a session opened for listening. + + The remote port + This is zero for a connection opened for listening. + + + + +22.28.1 Outbound Connections +---------------------------- + + + + +ztcp [ -v ] [ -d FD ] HOST [ PORT ] + Open a new TCP connection to HOST. If the PORT is omitted, it + will default to port 23. The connection will be added to the + session table and the shell parameter REPLY will be set to the + file descriptor associated with that connection. + + If -d is specified, its argument will be taken as the target file + descriptor for the connection. + + In order to elicit more verbose output, use -v. + + + +22.28.2 Inbound Connections +--------------------------- + + + + +ztcp -l [ -v ] [ -d FD ] PORT + ztcp -l will open a socket listening on TCP PORT. The socket will + be added to the session table and the shell parameter REPLY will + be set to the file descriptor associated with that listener. + + If -d is specified, its argument will be taken as the target file + descriptor for the connection. + + In order to elicit more verbose output, use -v. + +ztcp -a [ -tv ] [ -d TARGETFD ] LISTENFD + ztcp -a will accept an incoming connection to the port associated + with LISTENFD. The connection will be added to the session table + and the shell parameter REPLY will be set to the file descriptor + associated with the inbound connection. + + If -d is specified, its argument will be taken as the target file + descriptor for the connection. + + If -t is specified, ztcp will return if no incoming connection is + pending. Otherwise it will wait for one. + + In order to elicit more verbose output, use -v. + + + +22.28.3 Closing Connections +--------------------------- + + + + +ztcp -cf [ -v ] [ FD ] +ztcp -c [ -v ] [ FD ] + ztcp -c will close the socket associated with FD. The socket will + be removed from the session table. If FD is not specified, ztcp + will close everything in the session table. + + Normally, sockets registered by zftp (see *Note The zsh/zftp + Module:: ) cannot be closed this way. In order to force such a + socket closed, use -f. + + In order to elicit more verbose output, use -v. + + + +22.28.4 Example +--------------- + +Here is how to create a TCP connection between two instances of zsh. We +need to pick an unassigned port; here we use the randomly chosen 5123. + +On host1, + zmodload zsh/net/tcp + ztcp -l 5123 + listenfd=$REPLY + ztcp -a $listenfd + fd=$REPLY + The second from last command blocks until there is an incoming +connection. + +Now create a connection from host2 (which may, of course, be the same +machine): + zmodload zsh/net/tcp + ztcp host1 5123 + fd=$REPLY + +Now on each host, $fd contains a file descriptor for talking to the +other. For example, on host1: + print This is a message >&$fd + and on host2: + read -r line <&$fd; print -r - $line + prints `This is a message'. + +To tidy up, on host1: + ztcp -c $listenfd + ztcp -c $fd + and on host2 + ztcp -c $fd + + +File: zsh.info, Node: The zsh/termcap Module, Next: The zsh/terminfo Module, Prev: The zsh/net/tcp Module, Up: Zsh Modules + +22.29 The zsh/termcap Module +============================ + + + + The zsh/termcap module makes available one builtin command: + + +echotc CAP [ ARG ... ] + Output the termcap value corresponding to the capability CAP, with + optional arguments. + + +The zsh/termcap module makes available one parameter: + + +termcap + An associative array that maps termcap capability codes to their + values. + + + +File: zsh.info, Node: The zsh/terminfo Module, Next: The zsh/zftp Module, Prev: The zsh/termcap Module, Up: Zsh Modules + +22.30 The zsh/terminfo Module +============================= + + + + The zsh/terminfo module makes available one builtin command: + + +echoti CAP [ ARG ] + Output the terminfo value corresponding to the capability CAP, + instantiated with ARG if applicable. + + +The zsh/terminfo module makes available one parameter: + + +terminfo + An associative array that maps terminfo capability names to their + values. + + + +File: zsh.info, Node: The zsh/zftp Module, Next: The zsh/zle Module, Prev: The zsh/terminfo Module, Up: Zsh Modules + +22.31 The zsh/zftp Module +========================= + + + + The zsh/zftp module makes available one builtin command: + + +zftp SUBCOMMAND [ ARGS ] + The zsh/zftp module is a client for FTP (file transfer protocol). + It is implemented as a builtin to allow full use of shell command + line editing, file I/O, and job control mechanisms. Often, users + will access it via shell functions providing a more powerful + interface; a set is provided with the zsh distribution and is + described in *Note Zftp Function System::. However, the zftp + command is entirely usable in its own right. + + All commands consist of the command name zftp followed by the name + of a subcommand. These are listed below. The return status of + each subcommand is supposed to reflect the success or failure of + the remote operation. See a description of the variable + ZFTP_VERBOSE for more information on how responses from the server + may be printed. + + + +22.31.1 Subcommands +------------------- + + + + +open HOST[:PORT] [ USER [ PASSWORD [ ACCOUNT ] ] ] + Open a new FTP session to HOST, which may be the name of a TCP/IP + connected host or an IP number in the standard dot notation. If + the argument is in the form HOST:PORT, open a connection to TCP + port PORT instead of the standard FTP port 21. This may be the + name of a TCP service or a number: see the description of + ZFTP_PORT below for more information. + + If IPv6 addresses in colon format are used, the HOST should be + surrounded by quoted square brackets to distinguish it from the + PORT, for example '[fe80::203:baff:fe02:8b56]'. For consistency + this is allowed with all forms of HOST. + + Remaining arguments are passed to the login subcommand. Note that + if no arguments beyond HOST are supplied, open will _not_ + automatically call login. If no arguments at all are supplied, + open will use the parameters set by the params subcommand. + + After a successful open, the shell variables ZFTP_HOST, ZFTP_PORT, + ZFTP_IP and ZFTP_SYSTEM are available; see `Variables' below. + +login [ NAME [ PASSWORD [ ACCOUNT ] ] ] +user [ NAME [ PASSWORD [ ACCOUNT ] ] ] + Login the user NAME with parameters PASSWORD and ACCOUNT. Any of + the parameters can be omitted, and will be read from standard + input if needed (NAME is always needed). If standard input is a + terminal, a prompt for each one will be printed on standard error + and PASSWORD will not be echoed. If any of the parameters are not + used, a warning message is printed. + + After a successful login, the shell variables ZFTP_USER, + ZFTP_ACCOUNT and ZFTP_PWD are available; see `Variables' below. + + This command may be re-issued when a user is already logged in, and + the server will first be reinitialized for a new user. + +params [ HOST [ USER [ PASSWORD [ ACCOUNT ] ] ] ] +params - + Store the given parameters for a later open command with no + arguments. Only those given on the command line will be + remembered. If no arguments are given, the parameters currently + set are printed, although the password will appear as a line of + stars; the return status is one if no parameters were set, zero + otherwise. + + Any of the parameters may be specified as a `?', which may need to + be quoted to protect it from shell expansion. In this case, the + appropriate parameter will be read from stdin as with the login + subcommand, including special handling of PASSWORD. If the `?' is + followed by a string, that is used as the prompt for reading the + parameter instead of the default message (any necessary + punctuation and whitespace should be included at the end of the + prompt). The first letter of the parameter (only) may be quoted + with a `\'; hence an argument "\\$word" guarantees that the string + from the shell parameter $word will be treated literally, whether + or not it begins with a `?'. + + If instead a single `-' is given, the existing parameters, if any, + are deleted. In that case, calling open with no arguments will + cause an error. + + The list of parameters is not deleted after a close, however it + will be deleted if the zsh/zftp module is unloaded. + + For example, + + + zftp params ftp.elsewhere.xx juser '?Password for juser: ' + + will store the host ftp.elsewhere.xx and the user juser and then + prompt the user for the corresponding password with the given + prompt. + +test + Test the connection; if the server has reported that it has closed + the connection (maybe due to a timeout), return status 2; if no + connection was open anyway, return status 1; else return status 0. + The test subcommand is silent, apart from messages printed by the + $ZFTP_VERBOSE mechanism, or error messages if the connection + closes. There is no network overhead for this test. + + The test is only supported on systems with either the select(2) or + poll(2) system calls; otherwise the message `not supported on this + system' is printed instead. + + The test subcommand will automatically be called at the start of + any other subcommand for the current session when a connection is + open. + +cd DIRECTORY + Change the remote directory to DIRECTORY. Also alters the shell + variable ZFTP_PWD. + +cdup + Change the remote directory to the one higher in the directory + tree. Note that cd .. will also work correctly on non-UNIX + systems. + +dir [ ARG ... ] + Give a (verbose) listing of the remote directory. The ARGs are + passed directly to the server. The command's behaviour is + implementation dependent, but a UNIX server will typically + interpret ARGs as arguments to the ls command and with no + arguments return the result of `ls -l'. The directory is listed to + standard output. + +ls [ ARG ... ] + Give a (short) listing of the remote directory. With no ARG, + produces a raw list of the files in the directory, one per line. + Otherwise, up to vagaries of the server implementation, behaves + similar to dir. + +type [ TYPE ] + Change the type for the transfer to TYPE, or print the current type + if TYPE is absent. The allowed values are `A' (ASCII), `I' + (Image, i.e. binary), or `B' (a synonym for `I'). + + The FTP default for a transfer is ASCII. However, if zftp finds + that the remote host is a UNIX machine with 8-bit byes, it will + automatically switch to using binary for file transfers upon open. + This can subsequently be overridden. + + The transfer type is only passed to the remote host when a data + connection is established; this command involves no network + overhead. + +ascii + The same as type A. + +binary + The same as type I. + +mode [ S | B ] + Set the mode type to stream (S) or block (B). Stream mode is the + default; block mode is not widely supported. + +remote FILE ... +local [ FILE ... ] + Print the size and last modification time of the remote or local + files. If there is more than one item on the list, the name of the + file is printed first. The first number is the file size, the + second is the last modification time of the file in the format + CCYYMMDDhhmmSS consisting of year, month, date, hour, minutes and + seconds in GMT. Note that this format, including the length, is + guaranteed, so that time strings can be directly compared via the + [[ builtin's < and > operators, even if they are too long to be + represented as integers. + + Not all servers support the commands for retrieving this + information. In that case, the remote command will print nothing + and return status 2, compared with status 1 for a file not found. + + The local command (but not remote) may be used with no arguments, + in which case the information comes from examining file descriptor + zero. This is the same file as seen by a put command with no + further redirection. + +get FILE ... + Retrieve all FILEs from the server, concatenating them and sending + them to standard output. + +put FILE ... + For each FILE, read a file from standard input and send that to + the remote host with the given name. + +append FILE ... + As put, but if the remote FILE already exists, data is appended to + it instead of overwriting it. + +getat FILE POINT +putat FILE POINT +appendat FILE POINT + Versions of get, put and append which will start the transfer at + the given POINT in the remote FILE. This is useful for appending + to an incomplete local file. However, note that this ability is + not universally supported by servers (and is not quite the + behaviour specified by the standard). + +delete FILE ... + Delete the list of files on the server. + +mkdir DIRECTORY + Create a new directory DIRECTORY on the server. + +rmdir DIRECTORY + Delete the directory DIRECTORY on the server. + +rename OLD-NAME NEW-NAME + Rename file OLD-NAME to NEW-NAME on the server. + +site ARG ... + Send a host-specific command to the server. You will probably + only need this if instructed by the server to use it. + +quote ARG ... + Send the raw FTP command sequence to the server. You should be + familiar with the FTP command set as defined in RFC959 before doing + this. Useful commands may include STAT and HELP. Note also the + mechanism for returning messages as described for the variable + ZFTP_VERBOSE below, in particular that all messages from the + control connection are sent to standard error. + +close +quit + Close the current data connection. This unsets the shell + parameters ZFTP_HOST, ZFTP_PORT, ZFTP_IP, ZFTP_SYSTEM, ZFTP_USER, + ZFTP_ACCOUNT, ZFTP_PWD, ZFTP_TYPE and ZFTP_MODE. + +session [ SESSNAME ] + Allows multiple FTP sessions to be used at once. The name of the + session is an arbitrary string of characters; the default session + is called `default'. If this command is called without an + argument, it will list all the current sessions; with an argument, + it will either switch to the existing session called SESSNAME, or + create a new session of that name. + + Each session remembers the status of the connection, the set of + connection-specific shell parameters (the same set as are unset + when a connection closes, as given in the description of close), + and any user parameters specified with the params subcommand. + Changing to a previous session restores those values; changing to + a new session initialises them in the same way as if zftp had just + been loaded. The name of the current session is given by the + parameter ZFTP_SESSION. + +rmsession [ SESSNAME ] + Delete a session; if a name is not given, the current session is + deleted. If the current session is deleted, the earliest existing + session becomes the new current session, otherwise the current + session is not changed. If the session being deleted is the only + one, a new session called `default' is created and becomes the + current session; note that this is a new session even if the + session being deleted is also called `default'. It is recommended + that sessions not be deleted while background commands which use + zftp are still active. + + + +22.31.2 Parameters +------------------ + +The following shell parameters are used by zftp. Currently none of +them are special. + + +ZFTP_TMOUT + Integer. The time in seconds to wait for a network operation to + complete before returning an error. If this is not set when the + module is loaded, it will be given the default value 60. A value + of zero turns off timeouts. If a timeout occurs on the control + connection it will be closed. Use a larger value if this occurs + too frequently. + +ZFTP_IP + Readonly. The IP address of the current connection in dot + notation. + +ZFTP_HOST + Readonly. The hostname of the current remote server. If the host + was opened as an IP number, ZFTP_HOST contains that instead; this + saves the overhead for a name lookup, as IP numbers are most + commonly used when a nameserver is unavailable. + +ZFTP_PORT + Readonly. The number of the remote TCP port to which the + connection is open (even if the port was originally specified as a + named service). Usually this is the standard FTP port, 21. + + In the unlikely event that your system does not have the + appropriate conversion functions, this appears in network byte + order. If your system is little-endian, the port then consists of + two swapped bytes and the standard port will be reported as 5376. + In that case, numeric ports passed to zftp open will also need to + be in this format. + +ZFTP_SYSTEM + Readonly. The system type string returned by the server in + response to an FTP SYST request. The most interesting case is a + string beginning "UNIX Type: L8", which ensures maximum + compatibility with a local UNIX host. + +ZFTP_TYPE + Readonly. The type to be used for data transfers , either `A' or + `I'. Use the type subcommand to change this. + +ZFTP_USER + Readonly. The username currently logged in, if any. + +ZFTP_ACCOUNT + Readonly. The account name of the current user, if any. Most + servers do not require an account name. + +ZFTP_PWD + Readonly. The current directory on the server. + +ZFTP_CODE + Readonly. The three digit code of the last FTP reply from the + server as a string. This can still be read after the connection + is closed, and is not changed when the current session changes. + +ZFTP_REPLY + Readonly. The last line of the last reply sent by the server. + This can still be read after the connection is closed, and is not + changed when the current session changes. + +ZFTP_SESSION + Readonly. The name of the current FTP session; see the + description of the session subcommand. + +ZFTP_PREFS + A string of preferences for altering aspects of zftp's behaviour. + Each preference is a single character. The following are defined: + + + P + Passive: attempt to make the remote server initiate data + transfers. This is slightly more efficient than sendport + mode. If the letter S occurs later in the string, zftp will + use sendport mode if passive mode is not available. + + S + Sendport: initiate transfers by the FTP PORT command. If + this occurs before any P in the string, passive mode will + never be attempted. + + D + Dumb: use only the bare minimum of FTP commands. This + prevents the variables ZFTP_SYSTEM and ZFTP_PWD from being + set, and will mean all connections default to ASCII type. It + may prevent ZFTP_SIZE from being set during a transfer if the + server does not send it anyway (many servers do). + + + If ZFTP_PREFS is not set when zftp is loaded, it will be set to a + default of `PS', i.e. use passive mode if available, otherwise + fall back to sendport mode. + +ZFTP_VERBOSE + A string of digits between 0 and 5 inclusive, specifying which + responses from the server should be printed. All responses go to + standard error. If any of the numbers 1 to 5 appear in the string, + raw responses from the server with reply codes beginning with that + digit will be printed to standard error. The first digit of the + three digit reply code is defined by RFC959 to correspond to: + + + 1. + A positive preliminary reply. + + 2. + A positive completion reply. + + 3. + A positive intermediate reply. + + 4. + A transient negative completion reply. + + 5. + A permanent negative completion reply. + + + It should be noted that, for unknown reasons, the reply `Service + not available', which forces termination of a connection, is + classified as 421, i.e. `transient negative', an interesting + interpretation of the word `transient'. + + The code 0 is special: it indicates that all but the last line of + multiline replies read from the server will be printed to standard + error in a processed format. By convention, servers use this + mechanism for sending information for the user to read. The + appropriate reply code, if it matches the same response, takes + priority. + + If ZFTP_VERBOSE is not set when zftp is loaded, it will be set to + the default value 450, i.e., messages destined for the user and + all errors will be printed. A null string is valid and specifies + that no messages should be printed. + + + +22.31.3 Functions +----------------- + + + + +zftp_chpwd + If this function is set by the user, it is called every time the + directory changes on the server, including when a user is logged + in, or when a connection is closed. In the last case, $ZFTP_PWD + will be unset; otherwise it will reflect the new directory. + +zftp_progress + If this function is set by the user, it will be called during a + get, put or append operation each time sufficient data has been + received from the host. During a get, the data is sent to + standard output, so it is vital that this function should write to + standard error or directly to the terminal, _not_ to standard + output. + + When it is called with a transfer in progress, the following + additional shell parameters are set: + + + ZFTP_FILE + The name of the remote file being transferred from or to. + + ZFTP_TRANSFER + A G for a get operation and a P for a put operation. + + ZFTP_SIZE + The total size of the complete file being transferred: the + same as the first value provided by the remote and local + subcommands for a particular file. If the server cannot + supply this value for a remote file being retrieved, it will + not be set. If input is from a pipe the value may be + incorrect and correspond simply to a full pipe buffer. + + ZFTP_COUNT + The amount of data so far transferred; a number between zero + and $ZFTP_SIZE, if that is set. This number is always + available. + + + The function is initially called with ZFTP_TRANSFER set + appropriately and ZFTP_COUNT set to zero. After the transfer is + finished, the function will be called one more time with + ZFTP_TRANSFER set to GF or PF, in case it wishes to tidy up. It + is otherwise never called twice with the same value of ZFTP_COUNT. + + Sometimes the progress meter may cause disruption. It is up to the + user to decide whether the function should be defined and to use + unfunction when necessary. + + + +22.31.4 Problems +---------------- + + + +A connection may not be opened in the left hand side of a pipe as this +occurs in a subshell and the file information is not updated in the main +shell. In the case of type or mode changes or closing the connection +in a subshell, the information is returned but variables are not +updated until the next call to zftp. Other status changes in subshells +will not be reflected by changes to the variables (but should be +otherwise harmless). + +Deleting sessions while a zftp command is active in the background can +have unexpected effects, even if it does not use the session being +deleted. This is because all shell subprocesses share information on +the state of all connections, and deleting a session changes the +ordering of that information. + +On some operating systems, the control connection is not valid after a +fork(), so that operations in subshells, on the left hand side of a +pipeline, or in the background are not possible, as they should be. +This is presumably a bug in the operating system. + + +File: zsh.info, Node: The zsh/zle Module, Next: The zsh/zleparameter Module, Prev: The zsh/zftp Module, Up: Zsh Modules + +22.32 The zsh/zle Module +======================== + + + + The zsh/zle module contains the Zsh Line Editor. See *Note Zsh Line +Editor::. + + +File: zsh.info, Node: The zsh/zleparameter Module, Next: The zsh/zprof Module, Prev: The zsh/zle Module, Up: Zsh Modules + +22.33 The zsh/zleparameter Module +================================= + + + + The zsh/zleparameter module defines two special parameters that can +be used to access internal information of the Zsh Line Editor (see +*Note Zsh Line Editor::). + + +keymaps + This array contains the names of the keymaps currently defined. + +widgets + This associative array contains one entry per widget. The name of + the widget is the key and the value gives information about the + widget. It is either the string `builtin' for builtin widgets, + a string of the form `user:NAME' for user-defined widgets, + where NAME is the name of the shell function implementing the + widget, a string of the form `completion:TYPE:NAME' for + completion widgets, or a null value if the widget is not yet + fully defined. In the penultimate case, TYPE is the name of the + builtin widget the completion widget imitates in its behavior and + NAME is the name of the shell function implementing the completion + widget. + + + +File: zsh.info, Node: The zsh/zprof Module, Next: The zsh/zpty Module, Prev: The zsh/zleparameter Module, Up: Zsh Modules + +22.34 The zsh/zprof Module +========================== + + + + When loaded, the zsh/zprof causes shell functions to be profiled. +The profiling results can be obtained with the zprof builtin command +made available by this module. There is no way to turn profiling off +other than unloading the module. + + +zprof [ -c ] + Without the -c option, zprof lists profiling results to standard + output. The format is comparable to that of commands like gprof. + + At the top there is a summary listing all functions that were + called at least once. This summary is sorted in decreasing order + of the amount of time spent in each. The lines contain the number + of the function in order, which is used in other parts of the list + in suffixes of the form `[NUM]', then the number of calls made to + the function. The next three columns list the time in + milliseconds spent in the function and its descendants, the average + time in milliseconds spent in the function and its descendants per + call and the percentage of time spent in all shell functions used + in this function and its descendants. The following three columns + give the same information, but counting only the time spent in the + function itself. The final column shows the name of the function. + + After the summary, detailed information about every function that + was invoked is listed, sorted in decreasing order of the amount of + time spent in each function and its descendants. Each of these + entries consists of descriptions for the functions that called the + function described, the function itself, and the functions that + were called from it. The description for the function itself has + the same format as in the summary (and shows the same + information). The other lines don't show the number of the + function at the beginning and have their function named indented to + make it easier to distinguish the line showing the function + described in the section from the surrounding lines. + + The information shown in this case is almost the same as in the + summary, but only refers to the call hierarchy being displayed. + For example, for a calling function the column showing the total + running time lists the time spent in the described function and + its descendants only for the times when it was called from that + particular calling function. Likewise, for a called function, + this columns lists the total time spent in the called function and + its descendants only for the times when it was called from the + function described. + + Also in this case, the column showing the number of calls to a + function also shows a slash and then the total number of + invocations made to the called function. + + As long as the zsh/zprof module is loaded, profiling will be done + and multiple invocations of the zprof builtin command will show the + times and numbers of calls since the module was loaded. With the + -c option, the zprof builtin command will reset its internal + counters and will not show the listing. + + + +File: zsh.info, Node: The zsh/zpty Module, Next: The zsh/zselect Module, Prev: The zsh/zprof Module, Up: Zsh Modules + +22.35 The zsh/zpty Module +========================= + + + + The zsh/zpty module offers one builtin: + + +zpty [ -e ] [ -b ] NAME [ ARG ... ] + The arguments following NAME are concatenated with spaces between, + then executed as a command, as if passed to the eval builtin. The + command runs under a newly assigned pseudo-terminal; this is + useful for running commands non-interactively which expect an + interactive environment. The NAME is not part of the command, but + is used to refer to this command in later calls to zpty. + + With the -e option, the pseudo-terminal is set up so that input + characters are echoed. + + With the -b option, input to and output from the pseudo-terminal + are made non-blocking. + + The shell parameter REPLY is set to the file descriptor assigned to + the master side of the pseudo-terminal. This allows the terminal + to be monitored with ZLE descriptor handlers (see *Note Zle + Builtins::) or manipulated with sysread and syswrite (see *Note + The zsh/system Module::). _Warning_: Use of sysread and syswrite + is _not_ recommended; use zpty -r and zpty -w unless you know + exactly what you are doing. + +zpty -d [ NAME ... ] + The second form, with the -d option, is used to delete commands + previously started, by supplying a list of their NAMEs. If no + NAME is given, all commands are deleted. Deleting a command causes + the HUP signal to be sent to the corresponding process. + +zpty -w [ -n ] NAME [ STRING ... ] + The -w option can be used to send the to command NAME the given + STRINGs as input (separated by spaces). If the -n option is _not_ + given, a newline is added at the end. + + If no STRING is provided, the standard input is copied to the + pseudo-terminal; this may stop before copying the full input if the + pseudo-terminal is non-blocking. The exact input is always copied: + the -n option is not applied. + + Note that the command under the pseudo-terminal sees this input as + if it were typed, so beware when sending special tty driver + characters such as word-erase, line-kill, and end-of-file. + +zpty -r [ -mt ] NAME [ PARAM [ PATTERN ] ] + The -r option can be used to read the output of the command NAME. + With only a NAME argument, the output read is copied to the + standard output. Unless the pseudo-terminal is non-blocking, + copying continues until the command under the pseudo-terminal + exits; when non-blocking, only as much output as is immediately + available is copied. The return status is zero if any output is + copied. + + When also given a PARAM argument, at most one line is read and + stored in the parameter named PARAM. Less than a full line may be + read if the pseudo-terminal is non-blocking. The return status is + zero if at least one character is stored in PARAM. + + If a PATTERN is given as well, output is read until the whole + string read matches the PATTERN, even in the non-blocking case. + The return status is zero if the string read matches the pattern, + or if the command has exited but at least one character could + still be read. If the option -m is present, the return status is + zero only if the pattern matches. As of this writing, a maximum + of one megabyte of output can be consumed this way; if a full + megabyte is read without matching the pattern, the return status + is non-zero. + + In all cases, the return status is non-zero if nothing could be + read, and is 2 if this is because the command has finished. + + If the -r option is combined with the -t option, zpty tests + whether output is available before trying to read. If no output is + available, zpty immediately returns the status 1. When used with + a PATTERN, the behaviour on a failed poll is similar to when the + command has exited: the return value is zero if at least one + character could still be read even if the pattern failed to match. + +zpty -t NAME + The -t option without the -r option can be used to test whether + the command NAME is still running. It returns a zero status if + the command is running and a non-zero value otherwise. + +zpty [ -L ] + The last form, without any arguments, is used to list the commands + currently defined. If the -L option is given, this is done in the + form of calls to the zpty builtin. + + + +File: zsh.info, Node: The zsh/zselect Module, Next: The zsh/zutil Module, Prev: The zsh/zpty Module, Up: Zsh Modules + +22.36 The zsh/zselect Module +============================ + + + + The zsh/zselect module makes available one builtin command: + + +zselect [ -rwe ] [ -t TIMEOUT ] [ -a ARRAY ] [ -A ASSOC ] [ FD ... ] + The zselect builtin is a front-end to the `select' system call, + which blocks until a file descriptor is ready for reading or + writing, or has an error condition, with an optional timeout. If + this is not available on your system, the command prints an error + message and returns status 2 (normal errors return status 1). For + more information, see your systems documentation for man page + select(3). Note there is no connection with the shell builtin of + the same name. + + Arguments and options may be intermingled in any order. Non-option + arguments are file descriptors, which must be decimal integers. By + default, file descriptors are to be tested for reading, i.e. + zselect will return when data is available to be read from the + file descriptor, or more precisely, when a read operation from the + file descriptor will not block. After a -r, -w and -e, the given + file descriptors are to be tested for reading, writing, or error + conditions. These options and an arbitrary list of file + descriptors may be given in any order. + + (The presence of an `error condition' is not well defined in the + documentation for many implementations of the select system call. + According to recent versions of the POSIX specification, it is + really an _exception_ condition, of which the only standard + example is out-of-band data received on a socket. So zsh users + are unlikely to find the -e option useful.) + + The option `-t TIMEOUT' specifies a timeout in hundredths of a + second. This may be zero, in which case the file descriptors will + simply be polled and zselect will return immediately. It is + possible to call zselect with no file descriptors and a non-zero + timeout for use as a finer-grained replacement for `sleep'; note, + however, the return status is always 1 for a timeout. + + The option `-a ARRAY' indicates that ARRAY should be set to + indicate the file descriptor(s) which are ready. If the option is + not given, the array reply will be used for this purpose. The + array will contain a string similar to the arguments for zselect. + For example, + + + zselect -t 0 -r 0 -w 1 + + might return immediately with status 0 and $reply containing `-r 0 + -w 1' to show that both file descriptors are ready for the + requested operations. + + The option `-A ASSOC' indicates that the associative array ASSOC + should be set to indicate the file descriptor(s) which are ready. + This option overrides the option -a, nor will reply be modified. + The keys of assoc are the file descriptors, and the corresponding + values are any of the characters `rwe' to indicate the condition. + + The command returns status 0 if some file descriptors are ready for + reading. If the operation timed out, or a timeout of 0 was given + and no file descriptors were ready, or there was an error, it + returns status 1 and the array will not be set (nor modified in + any way). If there was an error in the select operation the + appropriate error message is printed. + + + +File: zsh.info, Node: The zsh/zutil Module, Prev: The zsh/zselect Module, Up: Zsh Modules + +22.37 The zsh/zutil Module +========================== + + + + The zsh/zutil module only adds some builtins: + + +zstyle [ -L [ METAPATTERN [ STYLE ] ] ] +zstyle [ -e | - | -- ] PATTERN STYLE STRING ... +zstyle -d [ PATTERN [ STYLE ... ] ] +zstyle -g NAME [ PATTERN [ STYLE ] ] +zstyle -{a|b|s} CONTEXT STYLE NAME [ SEP ] +zstyle -{T|t} CONTEXT STYLE [ STRING ... ] +zstyle -m CONTEXT STYLE PATTERN + This builtin command is used to define and lookup styles. Styles + are pairs of names and values, where the values consist of any + number of strings. They are stored together with patterns and + lookup is done by giving a string, called the `_context_', which + is matched against the patterns. The definition stored for the + most specific pattern that matches will be returned. + + A pattern is considered to be more specific than another if it + contains more components (substrings separated by colons) or if + the patterns for the components are more specific, where simple + strings are considered to be more specific than patterns and + complex patterns are considered to be more specific than the + pattern `*'. A `*' in the pattern will match zero or more + characters in the context; colons are not treated specially in + this regard. If two patterns are equally specific, the tie is + broken in favour of the pattern that was defined first. + + _Example_ + + For example, to define your preferred form of precipitation + depending on which city you're in, you might set the following in + your zshrc: + + + zstyle ':weather:europe:*' preferred-precipitation rain + zstyle ':weather:europe:germany:* preferred-precipitation none + zstyle ':weather:europe:germany:*:munich' preferred-precipitation snow + + Then, the fictional `weather' plugin might run under the hood a + command such as + + + zstyle -s ":weather:${continent}:${country}:${county}:${city}" preferred-precipitation REPLY + + in order to retrieve your preference into the scalar variable + $REPLY. + + _Usage_ + + The forms that operate on patterns are the following. + + + zstyle [ -L [ METAPATTERN [ STYLE ] ] ] + Without arguments, lists style definitions. Styles are shown + in alphabetic order and patterns are shown in the order + zstyle will test them. + + If the -L option is given, listing is done in the form of + calls to zstyle. The optional first argument, METAPATTERN, + is a pattern which will be matched against the string + supplied as PATTERN when the style was defined. Note: this + means, for example, `zstyle -L ":completion:*"' will match + any supplied pattern beginning `:completion:', not just + ":completion:*": use ':completion:\*' to match that. The + optional second argument limits the output to a specific + STYLE (not a pattern). -L is not compatible with any other + options. + + zstyle [ - | -- | -e ] PATTERN STYLE STRING ... + Defines the given STYLE for the PATTERN with the STRINGs as + the value. If the -e option is given, the STRINGs will be + concatenated (separated by spaces) and the resulting string + will be evaluated (in the same way as it is done by the eval + builtin command) when the style is looked up. In this case + the parameter `reply' must be assigned to set the strings + returned after the evaluation. Before evaluating the value, + reply is unset, and if it is still unset after the + evaluation, the style is treated as if it were not set. + + zstyle -d [ PATTERN [ STYLE ... ] ] + Delete style definitions. Without arguments all definitions + are deleted, with a PATTERN all definitions for that pattern + are deleted and if any STYLEs are given, then only those + styles are deleted for the PATTERN. + + zstyle -g NAME [ PATTERN [ STYLE ] ] + Retrieve a style definition. The NAME is used as the name of + an array in which the results are stored. Without any further + arguments, all patterns defined are returned. With a PATTERN + the styles defined for that pattern are returned and with + both a PATTERN and a STYLE, the value strings of that + combination is returned. + + + The other forms can be used to look up or test styles for a given + context. + + + zstyle -s CONTEXT STYLE NAME [ SEP ] + The parameter NAME is set to the value of the style + interpreted as a string. If the value contains several + strings they are concatenated with spaces (or with the SEP + string if that is given) between them. + + Return 0 if the style is set, 1 otherwise. + + zstyle -b CONTEXT STYLE NAME + The value is stored in NAME as a boolean, i.e. as the string + `yes' if the value has only one string and that string is + equal to one of `yes', `true', `on', or `1'. If the value is + any other string or has more than one string, the parameter + is set to `no'. + + Return 0 if NAME is set to `yes', 1 otherwise. + + zstyle -a CONTEXT STYLE NAME + The value is stored in NAME as an array. If NAME is declared + as an associative array, the first, third, etc. strings are + used as the keys and the other strings are used as the values. + + Return 0 if the style is set, 1 otherwise. + + zstyle -t CONTEXT STYLE [ STRING ... ] + zstyle -T CONTEXT STYLE [ STRING ... ] + Test the value of a style, i.e. the -t option only returns a + status (sets $?). Without any STRING the return status is + zero if the style is defined for at least one matching + pattern, has only one string in its value, and that is equal + to one of `true', `yes', `on' or `1'. If any STRINGs are + given the status is zero if and only if at least one of the + STRINGs is equal to at least one of the strings in the value. + If the style is defined but doesn't match, the return status + is 1. If the style is not defined, the status is 2. + + The -T option tests the values of the style like -t, but it + returns status zero (rather than 2) if the style is not + defined for any matching pattern. + + zstyle -m CONTEXT STYLE PATTERN + Match a value. Returns status zero if the PATTERN matches at + least one of the strings in the value. + + +zformat -f PARAM FORMAT SPEC ... +zformat -a ARRAY SEP SPEC ... + This builtin provides two different forms of formatting. The first + form is selected with the -f option. In this case the FORMAT + string will be modified by replacing sequences starting with a + percent sign in it with strings from the SPECs. Each SPEC should + be of the form `CHAR:STRING' which will cause every appearance of + the sequence `%CHAR' in FORMAT to be replaced by the STRING. The + `%' sequence may also contain optional minimum and maximum field + width specifications between the `%' and the `CHAR' in the form + `%MIN.MAXc', i.e. the minimum field width is given first and if + the maximum field width is used, it has to be preceded by a dot. + Specifying a minimum field width makes the result be padded with + spaces to the right if the STRING is shorter than the requested + width. Padding to the left can be achieved by giving a negative + minimum field width. If a maximum field width is specified, the + STRING will be truncated after that many characters. After all + `%' sequences for the given SPECs have been processed, the + resulting string is stored in the parameter PARAM. + + The %-escapes also understand ternary expressions in the form used + by prompts. The % is followed by a `(' and then an ordinary + format specifier character as described above. There may be a set + of digits either before or after the `('; these specify a test + number, which defaults to zero. Negative numbers are also + allowed. An arbitrary delimiter character follows the format + specifier, which is followed by a piece of `true' text, the + delimiter character again, a piece of `false' text, and a closing + parenthesis. The complete expression (without the digits) thus + looks like `%(X.TEXT1.TEXT2)', except that the `.' character is + arbitrary. The value given for the format specifier in the + CHAR:STRING expressions is evaluated as a mathematical expression, + and compared with the test number. If they are the same, TEXT1 is + output, else TEXT2 is output. A parenthesis may be escaped in + TEXT2 as %). Either of TEXT1 or TEXT2 may contain nested + %-escapes. + + For example: + + + zformat -f REPLY "The answer is '%3(c.yes.no)'." c:3 + + outputs "The answer is 'yes'." to REPLY since the value for the + format specifier c is 3, agreeing with the digit argument to the + ternary expression. + + The second form, using the -a option, can be used for aligning + strings. Here, the SPECs are of the form `LEFT:RIGHT' where + `LEFT' and `RIGHT' are arbitrary strings. These strings are + modified by replacing the colons by the SEP string and padding the + LEFT strings with spaces to the right so that the SEP strings in + the result (and hence the RIGHT strings after them) are all + aligned if the strings are printed below each other. All strings + without a colon are left unchanged and all strings with an empty + RIGHT string have the trailing colon removed. In both cases the + lengths of the strings are not used to determine how the other + strings are to be aligned. A colon in the LEFT string can be + escaped with a backslash. The resulting strings are stored in the + ARRAY. + +zregexparse + This implements some internals of the _regex_arguments function. + +zparseopts [ -D -E -F -K -M ] [ -a ARRAY ] [ -A ASSOC ] [ - ] SPEC ... + This builtin simplifies the parsing of options in positional + parameters, i.e. the set of arguments given by $*. Each SPEC + describes one option and must be of the form `OPT[=ARRAY]'. If an + option described by OPT is found in the positional parameters it + is copied into the ARRAY specified with the -a option; if the + optional `=ARRAY' is given, it is instead copied into that array, + which should be declared as a normal array and never as an + associative array. + + Note that it is an error to give any SPEC without an `=ARRAY' + unless one of the -a or -A options is used. + + Unless the -E option is given, parsing stops at the first string + that isn't described by one of the SPECs. Even with -E, parsing + always stops at a positional parameter equal to `-' or `--'. See + also -F. + + The OPT description must be one of the following. Any of the + special characters can appear in the option name provided it is + preceded by a backslash. + + + NAME + NAME+ + The NAME is the name of the option without the leading `-'. + To specify a GNU-style long option, one of the usual two + leading `-' must be included in NAME; for example, a `--file' + option is represented by a NAME of `-file'. + + If a `+' appears after NAME, the option is appended to ARRAY + each time it is found in the positional parameters; without + the `+' only the _last_ occurrence of the option is preserved. + + If one of these forms is used, the option takes no argument, + so parsing stops if the next positional parameter does not + also begin with `-' (unless the -E option is used). + + NAME: + NAME:- + NAME:: + If one or two colons are given, the option takes an argument; + with one colon, the argument is mandatory and with two colons + it is optional. The argument is appended to the ARRAY after + the option itself. + + An optional argument is put into the same array element as + the option name (note that this makes empty strings as + arguments indistinguishable). A mandatory argument is added + as a separate element unless the `:-' form is used, in which + case the argument is put into the same element. + + A `+' as described above may appear between the NAME and the + first colon. + + + In all cases, option-arguments must appear either immediately + following the option in the same positional parameter or in the + next one. Even an optional argument may appear in the next + parameter, unless it begins with a `-'. There is no special + handling of `=' as with GNU-style argument parsers; given the SPEC + `-foo:', the positional parameter `--foo=bar' is parsed as `--foo' + with an argument of `=bar'. + + When the names of two options that take no arguments overlap, the + longest one wins, so that parsing for the SPECs `-foo -foobar' + (for example) is unambiguous. However, due to the aforementioned + handling of option-arguments, ambiguities may arise when at least + one overlapping SPEC takes an argument, as in `-foo: -foobar'. In + that case, the last matching SPEC wins. + + The options of zparseopts itself cannot be stacked because, for + example, the stack `-DEK' is indistinguishable from a SPEC for the + GNU-style long option `--DEK'. The options of zparseopts itself + are: + + + -a ARRAY + As described above, this names the default array in which to + store the recognised options. + + -A ASSOC + If this is given, the options and their values are also put + into an associative array with the option names as keys and + the arguments (if any) as the values. + + -D + If this option is given, all options found are removed from + the positional parameters of the calling shell or shell + function, up to but not including any not described by the + SPECs. If the first such parameter is `-' or `--', it is + removed as well. This is similar to using the shift builtin. + + -E + This changes the parsing rules to _not_ stop at the first + string that isn't described by one of the SPECs. It can be + used to test for or (if used together with -D) extract + options and their arguments, ignoring all other options and + arguments that may be in the positional parameters. As + indicated above, parsing still stops at the first `-' or `--' + not described by a SPEC, but it is not removed when used with + -D. + + -F + If this option is given, zparseopts immediately stops at the + first option-like parameter not described by one of the + SPECs, prints an error message, and returns status 1. + Removal (-D) and extraction (-E) are not performed, and + option arrays are not updated. This provides basic + validation for the given options. + + Note that the appearance in the positional parameters of an + option without its required argument always aborts parsing + and returns an error as described above regardless of whether + this option is used. + + -K + With this option, the arrays specified with the -a option and + with the `=ARRAY' forms are kept unchanged when none of the + SPECs for them is used. Otherwise the entire array is + replaced when any of the SPECs is used. Individual elements + of associative arrays specified with the -A option are + preserved by -K. This allows assignment of default values to + arrays before calling zparseopts. + + -M + This changes the assignment rules to implement a map among + equivalent option names. If any SPEC uses the `=ARRAY' form, + the string ARRAY is interpreted as the name of another SPEC, + which is used to choose where to store the values. If no + other SPEC is found, the values are stored as usual. This + changes only the way the values are stored, not the way $* is + parsed, so results may be unpredictable if the `NAME+' + specifier is used inconsistently. + + + For example, + + + set -- -a -bx -c y -cz baz -cend + zparseopts a=foo b:=bar c+:=bar + + will have the effect of + + + foo=(-a) + bar=(-b x -c y -c z) + + The arguments from `baz' on will not be used. + + As an example for the -E option, consider: + + + set -- -a x -b y -c z arg1 arg2 + zparseopts -E -D b:=bar + + will have the effect of + + + bar=(-b y) + set -- -a x -c z arg1 arg2 + + I.e., the option -b and its arguments are taken from the + positional parameters and put into the array bar. + + The -M option can be used like this: + + + set -- -a -bx -c y -cz baz -cend + zparseopts -A bar -M a=foo b+: c:=b + + to have the effect of + + + foo=(-a) + bar=(-a '' -b xyz) + + + +File: zsh.info, Node: Calendar Function System, Next: TCP Function System, Prev: Zsh Modules, Up: Top + +23 Calendar Function System +*************************** + + + +23.1 Description +================ + +The shell is supplied with a series of functions to replace and enhance +the traditional Unix calendar programme, which warns the user of +imminent or future events, details of which are stored in a text file +(typically calendar in the user's home directory). The version +provided here includes a mechanism for alerting the user when an event +is due. + +In addition functions age, before and after are provided that can be +used in a glob qualifier; they allow files to be selected based on +their modification times. + +The format of the calendar file and the dates used there in and in the +age function are described first, then the functions that can be called +to examine and modify the calendar file. + +The functions here depend on the availability of the zsh/datetime +module which is usually installed with the shell. The library function +strptime() must be available; it is present on most recent operating +systems. + + + +* Menu: + +* Calendar File and Date Formats:: +* Calendar System User Functions:: +* Calendar Styles:: +* Calendar Utility Functions:: +* Calendar Bugs:: + + + +File: zsh.info, Node: Calendar File and Date Formats, Next: Calendar System User Functions, Up: Calendar Function System + +23.2 File and Date Formats +========================== + + + +23.2.1 Calendar File Format +--------------------------- + +The calendar file is by default ~/calendar. This can be configured by +the calendar-file style, see *Note Calendar Styles::. The basic format +consists of a series of separate lines, with no indentation, each +including a date and time specification followed by a description of +the event. + +Various enhancements to this format are supported, based on the syntax +of Emacs calendar mode. An indented line indicates a continuation line +that continues the description of the event from the preceding line +(note the date may not be continued in this way). An initial ampersand +(&) is ignored for compatibility. + +An indented line on which the first non-whitespace character is # is +not displayed with the calendar entry, but is still scanned for +information. This can be used to hide information useful to the +calendar system but not to the user, such as the unique identifier used +by calendar_add. + +The Emacs extension that a date with no description may refer to a +number of succeeding events at different times is not supported. + +Unless the done-file style has been altered, any events which have been +processed are appended to the file with the same name as the calendar +file with the suffix .done, hence ~/calendar.done by default. + +An example is shown below. + + + +23.2.2 Date Format +------------------ + +The format of the date and time is designed to allow flexibility without +admitting ambiguity. (The words `date' and `time' are both used in the +documentation below; except where specifically noted this implies a +string that may include both a date and a time specification.) Note +that there is no localization support; month and day names must be in +English and separator characters are fixed. Matching is case +insensitive, and only the first three letters of the names are +significant, although as a special case a form beginning "month" does +not match "Monday". Furthermore, time zones are not handled; all times +are assumed to be local. + +It is recommended that, rather than exploring the intricacies of the +system, users find a date format that is natural to them and stick to +it. This will avoid unexpected effects. Various key facts should be +noted. + + + * In particular, note the confusion between MONTH/DAY/YEAR and + DAY/MONTH/YEAR when the month is numeric; these formats should be + avoided if at all possible. Many alternatives are available. + + * The year must be given in full to avoid confusion, and only years + from 1900 to 2099 inclusive are matched. + +The following give some obvious examples; users finding here a format +they like and not subject to vagaries of style may skip the full +description. As dates and times are matched separately (even though +the time may be embedded in the date), any date format may be mixed +with any format for the time of day provide the separators are clear +(whitespace, colons, commas). + + + 2007/04/03 13:13 + 2007/04/03:13:13 + 2007/04/03 1:13 pm + 3rd April 2007, 13:13 + April 3rd 2007 1:13 p.m. + Apr 3, 2007 13:13 + Tue Apr 03 13:13:00 2007 + 13:13 2007/apr/3 + +More detailed rules follow. + +Times are parsed and extracted before dates. They must use colons to +separate hours and minutes, though a dot is allowed before seconds if +they are present. This limits time formats to the following: + + + * HH:MM[:SS[.FFFFF]] [am|pm|a.m.|p.m.] + + * HH:MM.SS[.FFFFF] [am|pm|a.m.|p.m.] + +Here, square brackets indicate optional elements, possibly with +alternatives. Fractions of a second are recognised but ignored. For +absolute times (the normal format require by the calendar file and the +age, before and after functions) a date is mandatory but a time of day +is not; the time returned is at the start of the date. One variation +is allowed: if a.m. or p.m. or one of their variants is present, an +hour without a minute is allowed, e.g. 3 p.m.. + +Time zones are not handled, though if one is matched following a time +specification it will be removed to allow a surrounding date to be +parsed. This only happens if the format of the timezone is not too +unusual. The following are examples of forms that are understood: + + + +0100 + GMT + GMT-7 + CET+1CDT + +Any part of the timezone that is not numeric must have exactly three +capital letters in the name. + +Dates suffer from the ambiguity between DD/MM/YYYY and MM/DD/YYYY. It +is recommended this form is avoided with purely numeric dates, but use +of ordinals, eg. 3rd/04/2007, will resolve the ambiguity as the ordinal +is always parsed as the day of the month. Years must be four digits +(and the first two must be 19 or 20); 03/04/08 is not recognised. Other +numbers may have leading zeroes, but they are not required. The +following are handled: + + + * YYYY/MM/DD + + * YYYY-MM-DD + + * YYYY/MNM/DD + + * YYYY-MNM-DD + + * DD[th|st|rd] MNM[,] [ YYYY ] + + * MNM DD[th|st|rd][,] [ YYYY ] + + * DD[th|st|rd]/MM[,] YYYY + + * DD[th|st|rd]/MM/YYYY + + * MM/DD[th|st|rd][,] YYYY + + * MM/DD[th|st|rd]/YYYY + +Here, MNM is at least the first three letters of a month name, matched +case-insensitively. The remainder of the month name may appear but its +contents are irrelevant, so janissary, febrile, martial, apricot, +maybe, junta, etc. are happily handled. + +Where the year is shown as optional, the current year is assumed. There +are only two such cases, the form Jun 20 or 14 September (the only two +commonly occurring forms, apart from a "the" in some forms of English, +which isn't currently supported). Such dates will of course become +ambiguous in the future, so should ideally be avoided. + +Times may follow dates with a colon, e.g. 1965/07/12:09:45; this is in +order to provide a format with no whitespace. A comma and whitespace +are allowed, e.g. 1965/07/12, 09:45. Currently the order of these +separators is not checked, so illogical formats such as 1965/07/12, : +,09:45 will also be matched. For simplicity such variations are not +shown in the list above. Otherwise, a time is only recognised as being +associated with a date if there is only whitespace in between, or if the +time was embedded in the date. + +Days of the week are not normally scanned, but will be ignored if they +occur at the start of the date pattern only. However, in contexts +where it is useful to specify dates relative to today, days of the week +with no other date specification may be given. The day is assumed to +be either today or within the past week. Likewise, the words yesterday, +today and tomorrow are handled. All matches are case-insensitive. +Hence if today is Monday, then Sunday is equivalent to yesterday, +Monday is equivalent to today, but Tuesday gives a date six days ago. +This is not generally useful within the calendar file. Dates in this +format may be combined with a time specification; for example Tomorrow, +8 p.m.. + +For example, the standard date format: + + + Fri Aug 18 17:00:48 BST 2006 + +is handled by matching HH:MM:SS and removing it together with the +matched (but unused) time zone. This leaves the following: + + + Fri Aug 18 2006 + +Fri is ignored and the rest is matched according to the standard rules. + + + +23.2.3 Relative Time Format +--------------------------- + +In certain places relative times are handled. Here, a date is not +allowed; instead a combination of various supported periods are +allowed, together with an optional time. The periods must be in order +from most to least significant. + +In some cases, a more accurate calculation is possible when there is an +anchor date: offsets of months or years pick the correct day, rather +than being rounded, and it is possible to pick a particular day in a +month as `(1st Friday)', etc., as described in more detail below. + +Anchors are available in the following cases. If one or two times are +passed to the function calendar, the start time acts an anchor for the +end time when the end time is relative (even if the start time is +implicit). When examining calendar files, the scheduled event being +examined anchors the warning time when it is given explicitly by means +of the WARN keyword; likewise, the scheduled event anchors a repetition +period when given by the RPT keyword, so that specifications such as +RPT 2 months, 3rd Thursday are handled properly. Finally, the -R +argument to calendar_scandate directly provides an anchor for relative +calculations. + +The periods handled, with possible abbreviations are: + + +Years + years, yrs, ys, year, yr, y, yearly. A year is 365.25 days unless + there is an anchor. + +Months + months, mons, mnths, mths, month, mon, mnth, mth, monthly. Note + that m, ms, mn, mns are ambiguous and are _not_ handled. A month + is a period of 30 days rather than a calendar month unless there + is an anchor. + +Weeks + weeks, wks, ws, week, wk, w, weekly + +Days + days, dys, ds, day, dy, d, daily + +Hours + hours, hrs, hs, hour, hr, h, hourly + +Minutes + minutes, mins, minute, min, but _not_ m, ms, mn or mns + +Seconds + seconds, secs, ss, second, sec, s + + +Spaces between the numbers are optional, but are required between items, +although a comma may be used (with or without spaces). + +The forms yearly to hourly allow the number to be omitted; it is +assumed to be 1. For example, 1 d and daily are equivalent. Note that +using those forms with plurals is confusing; 2 yearly is the same as 2 +years, _not_ twice yearly, so it is recommended they only be used +without numbers. + +When an anchor time is present, there is an extension to handle regular +events in the form of the Nth SOMEday of the month. Such a +specification must occur immediately after any year and month +specification, but before any time of day, and must be in the form +N(th|st|rd) DAY, for example 1st Tuesday or 3rd Monday. As in other +places, days are matched case insensitively, must be in English, and +only the first three letters are significant except that a form +beginning `month' does not match `Monday'. No attempt is made to +sanitize the resulting date; attempts to squeeze too many occurrences +into a month will push the day into the next month (but in the obvious +fashion, retaining the correct day of the week). + +Here are some examples: + + + 30 years 3 months 4 days 3:42:41 + 14 days 5 hours + Monthly, 3rd Thursday + 4d,10hr + + +23.2.4 Example +-------------- + +Here is an example calendar file. It uses a consistent date format, as +recommended above. + + + Feb 1, 2006 14:30 Pointless bureaucratic meeting + Mar 27, 2006 11:00 Mutual recrimination and finger pointing + Bring water pistol and waterproofs + Mar 31, 2006 14:00 Very serious managerial pontification + # UID 12C7878A9A50 + Apr 10, 2006 13:30 Even more pointless blame assignment exercise WARN 30 mins + May 18, 2006 16:00 Regular moaning session RPT monthly, 3rd Thursday + +The second entry has a continuation line. The third entry has a +continuation line that will not be shown when the entry is displayed, +but the unique identifier will be used by the calendar_add function when +updating the event. The fourth entry will produce a warning 30 minutes +before the event (to allow you to equip yourself appropriately). The +fifth entry repeats after a month on the 3rd Thursday, i.e. June 15, +2006, at the same time. + + + |
