Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
The README file
- X-seq: zsh-workers 5921
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: The README file
- Date: Wed, 24 Mar 1999 12:33:31 +0100 (MET)
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
Sorry if this is just noise to you, but I was asked to post the
complete README file (by Helmut) because the patch for the _list
completer didn't apply to his README. Maybe that was just a missing
5916, but maybe I've made the patch to some non-canonical version of it.
Bye
Sven
The subdirectories contain code for the new function-based completion
system. Broadly speaking, this uses shell functions defined for each
command to determine how the arguments of a command should be completed.
You should copy all the files you need or want to a directory of your own,
which should be included in your autoload path as defined by $fpath. Then
in your .zshrc you should source the file which appears here in
Core/compinit. It is recommnded that you use the -d option, which outputs
a file containing the necessary variables, bindkeys etc., making later
loading much faster. For example,
[[ -f ~/completion/compinit ]] && . ~/completion/compinit -d
The name of the file to use may be given as an extra argument.
This will rebind any keys which do completion to use the new system.
For more detailed instructions, including how to add new completions, see
the top of Core/compinit. For information about how to configure the code,
see the section below.
The subdirectories contain:
Core:
The basic functions and files to be sourced. You will certainly need
these, and will most likely not want to alter them --- if you do, it
would probably help to give your version a different name. The files
are:
compinit
As already described, this is not a function, but is sourced once
(with the `source' or `.' commands) to set up the completion system.
compdump
This dumps the completions status for faster initialisation. The
easiest way of doing this is to use the -d option to compinit rather
than calling compdump directly.
_approximate
A completer function that does correcting completion.
_compalso
Utility for calling a function to add additional completions to an
already existing set.
_complete
The main completer function that generates the completions by calling
the context and command specific functions.
_correct
A completer function that attempts correction on the word from the
line. Unlike _approximate this does only correction, not completion.
_expand
A completer function for expanding the word on the line.
_files
A frontend to _path_files which will default to any old file if the
specified file was not found.
_list
A completer function that allows showing only a list on the first
TAB and insert completions on the second one.
_match
A completer function that temporarily swicthes on pattern matching
when comparing the string from the line with possible completions.
_main_complete
The main entry point called by the key bindings which compinit sets
up (the main `completion widget' in zsh jargon). This mainly calls
completer functions like _complete, either those given as arguments
or (if it is called without arguments) those from the completer
configuration key (see below).
_multi_parts
Utility for completion parts of words given a separator character and
a list of words.
_normal
The function called by _main_complete to handle the most common
cases, such as completing a command name or its arguments. This
function dispatches to the various other functions for individual
commands. (Actually, the system is fairly context-sensitive, so
it is wider than just command+argument.)
_path_files
The function usually called to complete filenames and directories. It
replaces the standard -f, -g and -/ options for the basic completion
commands: it can do various extra tricks, such as expanding a whole
path at once, e.g. F/C/C/_p<TAB> -> Functions/Completion/Core/_path_files
_sep_parts
Utility used for completing words with multiple separate parts, such as
`<user>@<host>'
Base:
You will almost certainly want these files, too, which handle standard
tasks like completing files. However, you may want to edit them for
your own particular setup. Files are:
_command_names
This handles completion of the command word, i.e. the first thing
on the command line. You may want to alter this, for example,
to complete parameters to assign to.
_condition
This handles completing inside [[ ... ]] .
_default
This handles completion of command arguments when no special function
exists. Usually this means completing files, but you can modify this
as you wish.
_long_options
This handles options beginning with `--', as in many GNU commands.
The command must accept the --help option to list the possible options.
__long_options can also take arguments to help it decide what to
complete as the value of the option. Note that this is potentially
dangerous because the command from the line will be called with the
--help option and hence could cause damage if used with a command
that does not support it.
_match_pattern
_match_test
These are used by Base/_path_files (and hence also Base/_files)
and Base/_sep_parts for file completion with control over
matching (whether to complete case-insensitively, or to allow
insertion before `.', etc.) See _match_test for instructions.
Note _path_files expects these files to be present.
_precommand
Allows completion when the first word on the line has to be ignored,
for example `noglob ...' should ignore the noglob and just complete
as if it wasn't there. Add other such commands to the top line.
_redirect
Completes after `<' or `>': this version calls _files.
_subscript
For completion in subscripts of parameters, e.g $foo[...].
_vars
Completion for commands which need variables (so this could also be in
the Builtins directory), but also in math environments such as ((...)).
_tilde
Completion after `~', defaults to user names and named directories.
_equal
Completion after `=', normally command and alias names are used.
_parameter
_brace_parameter
For completion inside parameter expansions ($... and ${...).
Builtins:
Define completions for various shell builtins. The top line of each file
says which builtins they apply to; in many cases you can guess from the
name. Note in particular that _zftp defines completions for all commands
beginning `zf', not just for the module command zftp. This is only
really useful if you use zftp with the zf* function suite (zfopen, zfget,
...).
User:
This contains a pot pourri of completions for various external commands.
Not all will work unmodified on your system.
Commands:
These functions define separate completion commands which do not use
the usual context information, and hence have to be bound separately
to keys. As they appear, they have bindings which you can change or
delete by altering the top line of the file. To bind a function
(strictly speaking, the corresponding completion widget) yourself
after completion is loaded, use `bindkey '<key-string>' <_function_name>'.
The files are:
_correct_filename, bound to \C-xc
Correct the word under the cursor as a filename. This is significantly
more powerful than the standard \e$ (spell-word) binding.
_most_recent_file, bound to \C-xm
Insert the name of the most recent file matching the pattern
so far on the command line.
Configuration
You can configure several aspects of the completion functions and the
overall completion behavior using the compconf shell function defined
in compinit. This function get any number of arguments of the form
`key=value', where `key' is one of the keys described below and `value'
is any string. Most configuration keys are defined by the completer
functions.
The completion widget function _main_complete currently understands
one configuration key:
completer
This should be set to the names of the functions to generate the
matches separated by colons. E.g. with
compconf completer=_complete:_correct:_approximate
the code will first try normal completion. If that doesn't yield
any matches, correction is tried and if that doesn't yield
anything either, correcting completion is attempted.
The keys understood by the _approximate completer function are:
approximate_accept
This should be set to a number, specifying the maximum number
of errors that should be accepted. If the string also contains
a `n' or `N', the code will use the numeric argument as the
maximum number of errors if a numeric argument was given. If no
numeric argument was given, the number from the value of this
key will be used. E.g. with `compconf approximate_accept=2n' two
errors will be accepted, but if the user gives another number
with the numeric argument, this will be prefered. Also, with
`compconf approximate_accept=0n', normally no correction will be
tried, but if a numeric argument is given, automatic correction
will be used. On the other hand, if the string contains an `!'
and a `n' or `N', correction is not attempted if a numeric
argument is given. Once the number of errors to accept is
determined, the code will repeatedly try to generate matches by
allowing one error, two errors, and so on. Independent of the
number of errors the user wants to accept, the code will allow
only fewer errors than there are characters in the string from
the line.
approximate_original
This value is used to determine if the original string should
be included in the list (and thus be presented to the user when
cycling through the corrections). If it is set to any non-empty
value, the original string will be offered. If it contains the
sub-string `last', the original string will appear as the last
string when cycling through the corrections, otherwise it will
appear as the first one (so that the command line does not
change immediately). Also, if the value contains the sub-string
`always', the original string will always be included, whereas
normally it is included only if more than one possible
correction was generated.
approximate_prompt
This can be set to a string that should be printed before the
list of corrected strings when cycling through them. This string
may contain the control sequences `%n', `%B', etc. known from
the `-X' option of `compctl'. Also, the sequence `%e' will be
replaced by the number of errors accepted to generate the
corrected strings.
approximate_insert
If this is set to a string starting with `unambig', the code
will try to insert a usable unambiguous string in the command
line instead of always cycling through the corrected strings.
If such a unambiguous string could be found, the original
string is not used, independent of the setting of
`approximate_original'. If no sensible string could be found,
one can cycle through the corrected strings as usual.
If any of these keys is not set, but the the same key with the
prefix `correct' instead of `approximate' is set, that value will
be used. The forms beginning with `correct' are also used by the
_correct completer function, and this function uses only them, not
the ones starting with `approximate'. This allows one to give
different value to be used with correction and correcting
completion. For example, with:
compconf completer=_complete:_correct:_approximate
compconf correct_accept='2n!' approximate_accept=3n
correction will accept up to two errors. If a numeric argument is
given, correction will not be used, but correcting completion will
and it will accept as many errors as given by the numeric argument.
Without a numeric argument first correction and then correcting
completion will be tried, with the first one accepting two errors
and the second one accepting three errors.
The _match completer function, which allows to give patterns on the
command line and complete all strings matching it from the set of
possible completions, understands the following key:
match_original
If this is set to a `only', pattern matching will only be tried
with the string from the line. If it is set to any other non-empty
string, the original pattern will be tried first and if that yields
no completions, matching will be tried again with a `*' inserted
at the cursor position. If this key is not set or set to an empty
string, matching will only be attempted with the `*' inserted.
The _expand completer allows one to do expansion on the word from the
line. Note that you may either want to use the configuration keys or
not use this completer at all if you also use the _match completer
because the _expand completer will otherwise expand patterns before
they are seen by the _match completer.
Configuration keys supported are:
expand_substitute
If this is unset or set to the empty string, the code will first
try to expand all substitutions in the string (such as $(...) and
${...}). If this is set to an non-empty string it should be
an expression usable inside a $[...] arithmetical expression.
In this case, expansion of substitutions will be done if the
expression evaluates to `1'. For example, with
compconf expand_substitute='NUMERIC != 1'
substitution will be performed only if given an explicit numeric
argument other than `1', as by typing ESC 2 TAB.
expand_glob
If this is unset or set to an empty string, globbing will be
attempted on the word resulting from substitution or the
original string. The values accepted for this key are the same
as for expand_substitute.
expand_menu
If this is unset or set to the empty string, the words resulting
from expansion (if any) will simply be inserted in the ommand line,
replacing the original string. However, if this key is set to an
non-empty string, the user can cycle through the expansion as in
a menucompletion. Unless the value contains the sub-string `only',
the user will still be offered all expansions at once as one of
the strings to insert in the command line. Also, if the value
contains the sub-string `last', the string with all expansion will
be offered first, whereas normally it is offered as the last string
to insert. Finally, if the value contains the sub-string `sort',
the expansions will be sorted alphabetically, normally they are
kept in the order the expansion produced them in.
expand_original
If this is set to an non-empty string, the original string from the
line will be included in the list of strings the user can cycle
through as in a menucompletion. If the value contains the sub-string
`last', the original string will appear as the last string, with
other values it is inserted as the first one (so that the command
line does not change immediatly).
expand_prompt
This may be set to a string that should be displayed before the
possible expansions. This is given to the -X option and thus may
contain the control sequences `%n', `%B', etc. Also, the sequence
`%o' in this string will be replaced by the original string.
The _list completer allows one to delay the insertion of matches until
completion is attempted a second time without the word on the line
being changed. On the first attempt, only the list of matches will
be shown. Configuration keys understood are:
list_condition
If this key is unset or set to the empty string, this completer
will delay the insertion of matches unconditionally. However,
if this value is set, it should be set to an expression usable
inside a $[...] arithmetical expression. In this case, delaying
will be done if the expression evaluates to `1'.
For example, with
compconf list_condition='NUMERIC != 1'
delaying will be done only if given an explicit numeric argument
other than `1'.
list_word
To find out if only listing should be done, the code normally
compares the contents of the line with the contents the line
had at the time of the last invocation. If this key is set to
an non-empty string comparison is done using only the current
word. So if it is set, attempting completion on a word equal
to the one completion was called on the last time will not
delay the generation of matches.
For more information about what the completers do, see the files
containing them (_complete, _correct, _approximate, _match, and
_expand in the Core directory).
--
Sven Wischnowsky wischnow@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author