This is zsh.info, produced by makeinfo version 4.0 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: Miscellaneous Features,  Prev: Zftp Functions,  Up: Zftp Function System

Miscellaneous Features
======================

Configuration
-------------

Various styles are available using the standard shell style mechanism,
described in *Note The zsh/zutil Module::. Briefly, the command `zstyle
':zftp:*' STYLE VALUE ...'.  defines the STYLE to have value VALUE;
more than one value may be given, although that is not useful in the
cases described here.  These values will then be used throughout the
zftp function system.  For more precise control, the first argument,
which gives a context in which the style applies, can be modified to
include a particular function, as for example `:zftp:zfget': the style
will then have the given value only in the zfget function.  Values for
the same style in different contexts may be set; the most specific
function will be used, where strings are held to be more specific than
patterns, and longer patterns and shorter patterns.  Note that only the
top level function name, as called by the user, is used; calling of
lower level functions is transparent to the user.  Hence modifications
to the title bar in zftp_chpwd use the contexts :zftp:zfopen,
:zftp:zfcd, etc., depending where it was called from.  The following
styles are understood:

progress
     Controls the way that zftp_progress reports on the progress of a
     transfer.  If empty, unset, or `none', no progress report is made;
     if `bar' a growing bar of inverse video is shown; if `percent' (or
     any other string, though this may change in future), the
     percentage of the file transferred is shown.  The bar meter
     requires that the width of the terminal be available via the
     $COLUMNS parameter (normally this is set automatically).  If the
     size of the file being transferred is not available, bar and
     percent meters will simply show the number of bytes transferred so
     far.

     When zfinit is run, if this style is not defined for the context
     :zftp:*, it will be set to `bar'.

update
     Specifies the minimum time interval between updates of the
     progress meter in seconds.  No update is made unless new data has
     been received, so the actual time interval is limited only by
     $ZFTP_TIMEOUT.

     As described for progress, zfinit will force this to default to 1.

remote-glob
     If set to `1', `yes' or `true', filename generation (globbing) is
     performed on the remote machine instead of by zsh itself; see
     below.

titlebar
     If set to `1', `yes' or `true', zftp_chpwd will put the remote
     host and remote directory into the titlebar of terminal emulators
     such as xterm or sun-cmd that allow this.

     As described for progress, zfinit will force this to default to 1.

chpwd
     If set to `1' `yes' or `true', zftp_chpwd will call the function
     chpwd when a connection is closed.  This is useful if the remote
     host details were put into the terminal title bar by zftp_chpwd
     and your usual chpwd also modifies the title bar.

     When zfinit is run, it will determine whether chpwd exists and if
     so it will set the default value for the style to 1 if none exists
     already.

Note that there is also an associative array zfconfig which contains
values used by the function system.  This should not be modified or
overwritten.

Remote globbing
---------------

The commands for retrieving files usually perform filename generation
(globbing) on their arguments; this can be turned off by passing the
option -G to each of the commands.  Normally this operates by
retrieving a complete list of files for the directory in question, then
matching these locally against the pattern supplied.  This has the
advantage that the full range of zsh patterns (respecting the setting
of the option EXTENDED_GLOB) can be used.  However, it means that the
directory part of a filename will not be expanded and must be given
exactly.  If the remote server does not support the UNIX directory
semantics, directory handling is problematic and it is recommended that
globbing only be used within the current directory.  The list of files
in the current directory, if retrieved, will be cached, so that
subsequent globs in the same directory without an intervening zfcd are
much faster.

If the remote-glob style (see above) is set, globbing is instead
performed on the remote host: the server is asked for a list of matching
files.  This is highly dependent on how the server is implemented,
though typically UNIX servers will provide support for basic glob
patterns.  This may in some cases be faster, as it avoids retrieving
the entire list of directory contents.

Automatic and temporary reopening
---------------------------------

As described for the zfopen command, a subsequent zfopen with no
parameters will reopen the connection to the last host (this includes
connections made with the zfanon command).  Opened in this fashion, the
connection starts in the default remote directory and will remain open
until explicitly closed.

Automatic re-opening is also available.  If a connection is not
currently open and a command requiring a connection is given, the last
connection is implicitly reopened.  In this case the directory which
was current when the connection was closed again becomes the current
directory (unless, of course, the command given changes it).  Automatic
reopening will also take place if the connection was close by the
remote server for whatever reason (e.g. a timeout).  It is not
available if the -1 option to zfopen or zfanon was used.

Furthermore, if the command issued is a file transfer, the connection
will be closed after the transfer is finished, hence providing a
one-shot mode for transfers.  This does not apply to directory changing
or listing commands; for example a zfdir may reopen a connection but
will leave it open.  Also, automatic closure will only ever happen in
the same command as automatic opening, i.e a zfdir directly followed by
a zfget will never close the connection automatically.

Information about the previous connection is given by the zfstat
function.  So, for example, if that reports:

     Session:        default
     Not connected.
     Last session:   ftp.bar.com:/pub/textfiles

then the command zfget file.txt will attempt to reopen a connection to
ftp.bar.com, retrieve the file /pub/textfiles/file.txt, and immediately
close the connection again.  On the other hand, zfcd ..  will open the
connection in the directory /pub and leave it open.

Note that all the above is local to each session; if you return to a
previous session, the connection for that session is the one which will
be reopened.

Completion
----------

Completion of local and remote files, directories, sessions and
bookmarks is supported.  The older, compctl-style completion is defined
when zfinit is called; support for the new widget-based completion
system is provided in the function Completion/Zsh/Command/_zftp, which
should be installed with the other functions of the completion system
and hence should automatically be available.


File: zsh.info,  Node: User Contributions,  Prev: Zftp Function System,  Up: Top

User Contributions
******************

Description
===========

The Zsh source distribution includes a number of items contributed by
the user community.  These are not inherently a part of the shell, and
some may not be available in every zsh installation.  The most
significant of these are documented here.  For documentation on other
contributed items such as shell functions, look for comments in the
function source files.

* Menu:

* Utilities::
* Prompt Themes::
* ZLE Functions::
* Other Functions::


File: zsh.info,  Node: Utilities,  Next: Prompt Themes,  Up: User Contributions

Utilities
=========

Accessing On-Line Help
----------------------

The key sequence ESC h is normally bound by ZLE to execute the run-help
widget (see *Note Zsh Line Editor::).  This invokes the run-help
command with the command word from the current input line as its
argument.  By default, run-help is an alias for the man command, so
this often fails when the command word is a shell builtin or a
user-defined function.  By redefining the run-help alias, one can
improve the on-line help provided by the shell.

The helpfiles utility, found in the Util directory of the distribution,
is a Perl program that can be used to process the zsh manual to produce
a separate help file for each shell builtin and for many other shell
features as well.  The autoloadable run-help function, found in
Functions/Misc, searches for these helpfiles and performs several other
tests to produce the most complete help possible for the command.

There may already be a directory of help files on your system; look in
/usr/share/zsh or /usr/local/share/zsh and subdirectories below those,
or ask your system administrator.

To create your own help files with helpfiles, choose or create a
directory where the individual command help files will reside.  For
example, you might choose ~/zsh_help.  If you unpacked the zsh
distribution in your home directory, you would use the commands:

     mkdir ~/zsh_help
     cd ~/zsh_help
     man zshall | colcrt - | \
     perl ~/zsh-4.1.1/Util/helpfiles

Next, to use the run-help function, you need to add lines something
like the following to your .zshrc or equivalent startup file:

     unalias run-help
     autoload run-help
     HELPDIR=~/zsh_help

The HELPDIR parameter tells run-help where to look for the help files.
If your system already has a help file directory installed, set HELPDIR
to the path of that directory instead.

Note that in order for `autoload run-help' to work, the run-help file
must be in one of the directories named in your fpath array (see *Note
Parameters Used By The Shell::).  This should already be the case if
you have a standard zsh installation; if it is not, copy
Functions/Misc/run-help to an appropriate directory.

Recompiling Functions
---------------------

If you frequently edit your zsh functions, or periodically update your
zsh installation to track the latest developments, you may find that
function digests compiled with the zcompile builtin are frequently out
of date with respect to the function source files.  This is not usually
a problem, because zsh always looks for the newest file when loading a
function, but it may cause slower shell startup and function loading.
Also, if a digest file is explicitly used as an element of fpath, zsh
won't check whether any of its source files has changed.

The zrecompile autoloadable function, found in Functions/Misc, can be
used to keep function digests up to date.

zrecompile [ -qt ] [ NAME ... ]
zrecompile [ -qt ] -p ARGS [ -- ARGS ... ]
     This tries to find *.zwc files and automatically re-compile them
     if at least one of the original files is newer than the compiled
     file.  This works only if the names stored in the compiled files
     are full paths or are relative to the directory that contains the
     .zwc file.

     In the first form, each NAME is the name of a compiled file or a
     directory containing *.zwc files that should be checked.  If no
     arguments are given, the directories and *.zwc files in fpath are
     used.

     When -t is given, no compilation is performed, but a return status
     of zero (true) is set if there are files that need to be
     re-compiled and non-zero (false) otherwise.  The -q option quiets
     the chatty output that describes what zrecompile is doing.

     Without the -t option, the return status is zero if all files that
     needed re-compilation could be compiled and non-zero if
     compilation for at least one of the files failed.

     If the -p option is given, the ARGS are interpreted as one or more
     sets of arguments for zcompile, separated by `--'.  For example:

          zrecompile -p \
                     -R ~/.zshrc -- \
                     -M ~/.zcompdump -- \
                     ~/zsh/comp.zwc ~/zsh/Completion/*/_*

     This compiles ~/.zshrc into ~/.zshrc.zwc if that doesn't exist or
     if it is older than ~/.zshrc. The compiled file will be marked for
     reading instead of mapping. The same is done for ~/.zcompdump and
     ~/.zcompdump.zwc, but this compiled file is marked for mapping. The
     last line re-creates the file ~/zsh/comp.zwc if any of the files
     matching the given pattern is newer than it.

     Without the -p option, zrecompile does not create function digests
     that do not already exist, nor does it add new functions to the
     digest.

The following shell loop is an example of a method for creating function
digests for all functions in your fpath, assuming that you have write
permission to the directories:

     for ((i=1; i <= $#fpath; ++i)); do
       dir=$fpath[i]
       zwc=${dir:t}.zwc
       if [[ $dir == (.|..) || $dir == (.|..)/* ]]; then
         continue
       fi
       files=($dir/*(N-.))
       if [[ -w $dir:h && -n $files ]]; then
         files=(${${(M)files%/*/*}#/})
         if ( cd $dir:h &&
              zrecompile -p -U -z $zwc $files ); then
           fpath[i]=$fpath[i].zwc
         fi
       fi
     done

The -U and -z options are appropriate for functions in the default zsh
installation fpath; you may need to use different options for your
personal function directories.

Once the digests have been created and your fpath modified to refer to
them, you can keep them up to date by running zrecompile with no
arguments.

Keyboard Definition
-------------------

The large number of possible combinations of keyboards, workstations,
terminals, emulators, and window systems makes it impossible for zsh to
have built-in key bindings for every situation.  The zkbd utility,
found in Functions/Misc, can help you quickly create key bindings for
your configuration.

Run zkbd either as an autoloaded function, or as a shell script:

     zsh -f ~/zsh-4.1.1/Functions/Misc/zkbd

When you run zkbd, it first asks you to enter your terminal type; if
the default it offers is correct, just press return.  It then asks you
to press a number of different keys to determine characteristics of your
keyboard and terminal; zkbd warns you if it finds anything out of the
ordinary, such as a Delete key that sends neither ^H nor ^?.

The keystrokes read by zkbd are recorded as a definition for an
associative array named key, written to a file in the subdirectory
.zkbd within either your HOME or ZDOTDIR directory.  The name of the
file is composed from the TERM, VENDOR and OSTYPE parameters, joined by
hyphens.

You may read this file into your .zshrc or another startup file with
the "source" or "." commands, then reference the key parameter in
bindkey commands, like this:

     source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE
     [[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
     [[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
     # etc.

Note that in order for `autoload zkbd' to work, the zkdb file must be
in one of the directories named in your fpath array (see *Note
Parameters Used By The Shell::).  This should already be the case if
you have a standard zsh installation; if it is not, copy
Functions/Misc/zkbd to an appropriate directory.

Dumping Shell State
-------------------

Occasionally you may encounter what appears to be a bug in the shell,
particularly if you are using a beta version of zsh or a development
release.  Usually it is sufficient to send a description of the problem
to one of the zsh mailing lists (see *Note Mailing Lists::), but
sometimes one of the zsh developers will need to recreate your
environment in order to track the problem down.

The script named reporter, found in the Util directory of the
distribution, is provided for this purpose.  (It is also possible to
autoload reporter, but reporter is not installed in fpath by default.)
This script outputs a detailed dump of the shell state, in the form of
another script that can be read with `zsh -f' to recreate that state.

To use reporter, read the script into your shell with the `.'  command
and redirect the output into a file:

     . ~/zsh-4.1.1/Util/reporter > zsh.report

You should check the zsh.report file for any sensitive information such
as passwords and delete them by hand before sending the script to the
developers.  Also, as the output can be voluminous, it's best to wait
for the developers to ask for this information before sending it.

You can also use reporter to dump only a subset of the shell state.
This is sometimes useful for creating startup files for the first time.
Most of the output from reporter is far more detailed than usually is
necessary for a startup file, but the aliases, options, and zstyles
states may be useful because they include only changes from the
defaults.  The bindings state may be useful if you have created any of
your own keymaps, because reporter arranges to dump the keymap creation
commands as well as the bindings for every keymap.

As is usual with automated tools, if you create a startup file with
reporter, you should edit the results to remove unnecessary commands.
Note that if you're using the new completion system, you should _not_
dump the functions state to your startup files with reporter; use the
compdump function instead (see *Note Completion System::).

reporter [ STATE ... ]
     Print to standard output the indicated subset of the current shell
     state.  The STATE arguments may be one or more of:

    all
          Output everything listed below.

    aliases
          Output alias definitions.

    bindings
          Output ZLE key maps and bindings.

    completion
          Output old-style compctl commands.  New completion is covered
          by functions and zstyles.

    functions
          Output autoloads and function definitions.

    limits
          Output limit commands.

    options
          Output setopt commands.

    styles
          Same as zstyles.

    variables
          Output shell parameter assignments, plus export commands for
          any environment variables.

    zstyles
          Output zstyle commands.

     If the STATE is omitted, all is assumed.

     With the exception of `all', every STATE can be abbreviated by any
     prefix, even a single letter; thus a is the same as aliases, z is
     the same as zstyles, etc.


File: zsh.info,  Node: Prompt Themes,  Next: ZLE Functions,  Prev: Utilities,  Up: User Contributions

Prompt Themes
=============

Installation
------------

You should make sure all the functions from the Functions/Prompts
directory of the source distribution are available; they all begin with
the string `prompt_' except for the special function`promptinit'.  You
also need the `colors' function from Functions/Misc.  All of these
functions may already have been installed on your system; if not, you
will need to find them and copy them.  The directory should appear as
one of the elements of the fpath array (this should already be the case
if they were installed), and at least the function promptinit should be
autoloaded; it will autoload the rest.  Finally, to initialize the use
of the system you need to call the promptinit function.  The following
code in your .zshrc will arrange for this; assume the functions are
stored in the directory ~/myfns:

     fpath=(~/myfns $fpath)
     autoload -U promptinit
     promptinit

Theme Selection
---------------

Use the prompt command to select your preferred theme.  This command
may be added to your .zshrc following the call to promptinit in order
to start zsh with a theme already selected.

prompt [ -c | -l ]
prompt [ -p | -h ] [ THEME ... ]
prompt [ -s ] THEME [ ARG ... ]
     Set or examine the prompt theme.  With no options and a THEME
     argument, the theme with that name is set as the current theme.
     The available themes are determined at run time; use the -l option
     to see a list.  The special THEME `random' selects at random one
     of the available themes and sets your prompt to that.

     In some cases the THEME may be modified by one or more arguments,
     which should be given after the theme name.  See the help for each
     theme for descriptions of these arguments.

     Options are:

    -c
          Show the currently selected theme and its parameters, if any.

    -l
          List all available prompt themes.

    -p
          Preview the theme named by THEME, or all themes if no THEME
          is given.

    -h
          Show help for the theme named by THEME, or for the prompt
          function if no THEME is given.

    -s
          Set THEME as the current theme and save state.

prompt_THEME_setup
     Each available THEME has a setup function which is called by the
     prompt function to install that theme.  This function may define
     other functions as necessary to maintain the prompt, including
     functions used to preview the prompt or provide help for its use.
     You should not normally call a theme's setup function directly.


File: zsh.info,  Node: ZLE Functions,  Next: Other Functions,  Prev: Prompt Themes,  Up: User Contributions

ZLE Functions
=============

Widgets
-------

These functions all implement user-defined ZLE widgets (see *Note Zsh
Line Editor::) which can be bound to keystrokes in interactive shells.
To use them, your .zshrc should contain lines of the form

     autoload FUNCTION
     zle -N FUNCTION

followed by an appropriate bindkey command to associate the function
with a key sequence.  Suggested bindings are described below.

bash-style word functions
     If you are looking for functions to implement moving over and
     editing words in the manner of bash, where only alphanumeric
     characters are considered word characters, you can use the
     functions described in the next section.  The following is
     sufficient:

          autoload -U select-word-style
          select-word-style bash

forward-word-match, backward-word-match
kill-word-match, backward-kill-word-match
transpose-words-match, capitalize-word-match
up-case-word-match, down-case-word-match
select-word-style, match-word-by-style
     The eight `-match' functions are drop-in replacements for the
     builtin widgets without the suffix.  By default they behave in a
     similar way.  However, by the use of styles and the function
     select-word-style, the way words are matched can be altered.

     The simplest way of configuring the functions is to use
     select-word-style, which can either be called as a normal function
     with the appropriate argument, or invoked as a user-defined widget
     that will prompt for the first character of the word style to be
     used.  The first time it is invoked, the eight -match functions
     will automatically replace the builtin versions, so they do not
     need to be loaded explicitly.

     The word styles available are as follows.  Only the first character
     is examined.

    bash
          Word characters are alphanumeric characters only.

    normal
          As in normal shell operation:  word characters are
          alphanumeric characters plus any characters present in the
          string given by the parameter $WORDCHARS.

    shell
          Words are complete shell command arguments, possibly
          including complete quoted strings, or any tokens special to
          the shell.

    whitespace
          Words are any set of characters delimited by whitespace.

    default
          Restore the default settings; this is usually the same as
          `normal'.

     More control can be obtained using the zstyle command, as
     described in *Note The zsh/zutil Module::.  Each style is looked
     up in the context :zle:WIDGET where WIDGET is the name of the
     user-defined widget, not the name of the function implementing it,
     so in the case of the definitions supplied by select-word-style the
     appropriate contexts are :zle:forward-word, and so on.  The
     function select-word-style itself always defines styles for the
     context `:zle:*' which can be overridden by more specific (longer)
     patterns as well as explicit contexts.

     The style word-style specifies the rules to use.  This may have the
     following values.

    normal
          Use the standard shell rules, i.e. alphanumerics and
          $WORDCHARS, unless overridden by the styles word-chars or
          word-class.

    specified
          Similar to normal, but _only_ the specified characters, and
          not also alphanumerics, are considered word characters.

    unspecified
          The negation of specified.  The given characters are those
          which will _not_ be considered part of a word.

    shell
          Words are obtained by using the syntactic rules for
          generating shell command arguments.  In addition, special
          tokens which are never command arguments such as `()' are
          also treated as words.

    whitespace
          Words are whitespace-delimited strings of characters.

     The first three of those styles usually use $WORDCHARS, but the
     value in the parameter can be overridden by the style word-chars,
     which works in exactly the same way as $WORDCHARS.  In addition,
     the style word-class uses character class syntax to group
     characters and takes precedence over word-chars if both are set.
     The word-class style does not include the surrounding brackets of
     the character class; for example, `-:[:alnum:]' is a valid
     word-class to include all alphanumerics plus the characters `-'
     and `:'.  Be careful including `]', `^' and `-' as these are
     special inside character classes.

     The final style is skip-chars.  This is mostly useful for
     transpose-words and similar functions.  If set, it gives a count of
     characters starting at the cursor position which will not be
     considered part of the word and are treated as space, regardless
     of what they actually are.  For example, if

          zstyle ':zle:transpose-words' skip-chars 1

     has been set, and transpose-words-match is called with the cursor
     on the X of fooXbar, where X can be any character, then the
     resulting expression is barXfoo.

     The word matching and all the handling of zstyle settings is
     actually implemented by the function match-word-by-style.  This
     can be used to create new user-defined widgets.  The calling
     function should set the local parameter curcontext to :zle:WIDGET,
     create the local parameter matched_words and call
     match-word-by-style with no arguments.  On return, matched_words
     will be set to an array with the elements: (1) the start of the
     line (2) the word before the cursor (3) any non-word characters
     between that word and the cursor (4) any non-word character at the
     cursor position plus any remaining non-word characters before the
     next word, including all characters specified by the skip-chars
     style, (5) the word at or following the cursor (6) any non-word
     characters following that word (7) the remainder of the line.  Any
     of the elements may be an empty string; the calling function
     should test for this to decide whether it can perform its function.

copy-earlier-word
     This widget works like a combination of insert-last-word and
     copy-prev-shell-word.  Repeated invocations of the widget retrieve
     earlier words on the relevant history line.  With a numeric
     argument N, insert the Nth word from the history line; N may be
     negative to count from the end of the line.

     If insert-last-word has been used to retrieve the last word on a
     previous history line, repeated invocations will replace that word
     with earlier words from the same line.

     Otherwise, the widget applies to words on the line currently being
     edited.  The widget style can be set to the name of another widget
     that should be called to retrieve words.  This widget must accept
     the same three arguments as insert-last-word.

cycle-completion-positions
     After inserting an unambiguous string into the command line, the
     new function based completion system may know about multiple
     places in this string where characters are missing or differ from
     at least one of the possible matches.  It will then place the
     cursor on the position it considers to be the most interesting
     one, i.e. the one where one can disambiguate between as many
     matches as possible with as little typing as possible.

     This widget allows the cursor to be easily moved to the other
     interesting spots.  It can be invoked repeatedly to cycle between
     all positions reported by the completion system.

edit-command-line
     Edit the command line using your visual editor, as in ksh.

          bindkey -M vicmd v edit-command-line

history-search-end
     This function implements the widgets
     history-beginning-search-backward-end and
     history-beginning-search-forward-end.  These commands work by first
     calling the corresponding builtin widget (see *Note History
     Control::) and then moving the cursor to the end of the line.  The
     original cursor position is remembered and restored before calling
     the builtin widget a second time, so that the same search is
     repeated to look farther through the history.

     Although you autoload only one function, the commands to use it are
     slightly different because it implements two widgets.

          zle -N history-beginning-search-backward-end \
                 history-search-end
          zle -N history-beginning-search-forward-end \
                 history-search-end
          bindkey '\e^P' history-beginning-search-backward-end
          bindkey '\e^N' history-beginning-search-forward-end

up-line-or-beginning-search, down-line-or-beginning-search
     These widgets are similar to the builtin functions
     up-line-or-search and down-line-or-search:  if in a multiline
     buffer they move up or down within the buffer, otherwise they
     search for a history line matching the start of the current line.
     In this case, however, they search for a line which matches the
     current line up to the current cursor position, in the manner of
     history-beginning-search-backward and -forward, rather than the
     first word on the line.

incarg
     Typing the keystrokes for this widget with the cursor placed on or
     to the left of an integer causes that integer to be incremented by
     one.  With a numeric prefix argument, the number is incremented by
     the amount of the argument (decremented if the prefix argument is
     negative).  The shell parameter incarg may be set to change the
     default increment something other than one.

          bindkey '^X+' incarg

incremental-complete-word
     This allows incremental completion of a word.  After starting this
     command, a list of completion choices can be shown after every
     character you type, which you can delete with ^H or DEL.  Pressing
     return accepts the completion so far and returns you to normal
     editing (that is, the command line is _not_ immediately executed).
     You can hit TAB to do normal completion, ^G to abort back to the
     state when you started, and ^D to list the matches.

     This works only with the new function based completion system.

          bindkey '^Xi' incremental-complete-word

insert-files
     This function allows you type a file pattern, and see the results
     of the expansion at each step.  When you hit return, all
     expansions are inserted into the command line.

          bindkey '^Xf' insert-files

narrow-to-region [ -p PRE ] [ -P POST ]
[ -S STATEPM | -R STATEPM ] [ -n ] [ START END ])
narrow-to-region-invisible
     Narrow the editable portion of the buffer to the region between
     the cursor and the mark, which may be in either order.  The region
     may not be empty.

     narrow-to-region may be used as a widget or called as a function
     from a user-defined widget; by default, the text outside the
     editable area remains visible.  A recursive-edit is performed and
     the original widening status is then restored.  Various options
     and arguments are available when it is called as a function.

     The options -p PRETEXT and -P POSTTEXT may be used to replace the
     text before and after the display for the duration of the
     function; either or both may be an empty string.

     If the option -n is also given, PRETEXT or POSTTEXT will only be
     inserted if there is text before or after the region respectively
     which will be made invisible.

     Two numeric arguments may be given which will be used instead of
     the cursor and mark positions.

     The option -S STATEPM is used to narrow according to the other
     options while saving the original state in the parameter with name
     STATEPM, while the option -R STATEPM is used to restore the state
     from the parameter; note in both cases the _name_ of the parameter
     is required.  In the second case, other options and arguments are
     irrelevant.  When this method is used, no recursive-edit is
     performed; the calling widget should call this function with the
     option -S, perform its own editing on the command line or pass
     control to the user via `zle recursive-edit', then call this
     function with the option -R.  The argument STATEPM must be a
     suitable name for an ordinary parameter, except that parameters
     beginning with the prefix _ntr_ are reserved for use within
     narrow-to-region.  Typically the parameter will be local to the
     calling function.

     narrow-to-region-invisible is a simple widget which calls
     narrow-to-region with arguments which replace any text outside the
     region with `...'.

     The display is restored (and the widget returns) upon any zle
     command which would usually cause the line to be accepted or
     aborted.  Hence an additional such command is required to accept
     or abort the current line.

     The return status of both widgets is zero if the line was
     accepted, else non-zero.

     Here is a trivial example of a widget using this feature.
          local state
          narrow-to-region -p $'Editing restricted region\n' \
            -P '' -S state
          zle recursive-edit
          narrow-to-region -R state

predict-on
     This set of functions implements predictive typing using history
     search.  After predict-on, typing characters causes the editor to
     look backward in the history for the first line beginning with
     what you have typed so far.  After predict-off, editing returns to
     normal for the line found.  In fact, you often don't even need to
     use predict-off, because if the line doesn't match something in
     the history, adding a key performs standard completion, and then
     inserts itself if no completions were found.  However, editing in
     the middle of a line is liable to confuse prediction; see the
     toggle style below.

     With the function based completion system (which is needed for
     this), you should be able to type TAB at almost any point to
     advance the cursor to the next ``interesting'' character position
     (usually the end of the current word, but sometimes somewhere in
     the middle of the word).  And of course as soon as the entire line
     is what you want, you can accept with return, without needing to
     move the cursor to the end first.

     The first time predict-on is used, it creates several additional
     widget functions:

    delete-backward-and-predict
          Replaces the backward-delete-char widget.  You do not need to
          bind this yourself.

    insert-and-predict
          Implements predictive typing by replacing the self-insert
          widget.  You do not need to bind this yourself.

    predict-off
          Turns off predictive typing.

     Although you autoload only the predict-on function, it is
     necessary to create a keybinding for predict-off as well.

          zle -N predict-on
          zle -N predict-off
          bindkey '^X^Z' predict-on
          bindkey '^Z' predict-off

read-from-minibuffer
     This is most useful when called as a function from inside a
     widget, but will work correctly as a widget in its own right.  It
     prompts for a value below the current command line; a value may be
     input using all of the standard zle operations (and not merely the
     restricted set available when executing, for example,
     execute-named-cmd).  The value is then returned to the calling
     function in the parameter $REPLY and the editing buffer restored
     to its previous state.  If the read was aborted by a keyboard
     break (typically ^G), the function returns status 1 and $REPLY is
     not set.  If an argument is supplied to the function it is taken
     as a prompt, otherwise `? ' is used.

     One option is available: `-k NUM' specifies that NUM characters
     are to be read instead of a whole line.  The line editor is not
     invoked recursively in this case.  Note that unlike the read
     builtin NUM must be given; there is no default.

     The name is a slight misnomer, as in fact the shell's own
     minibuffer is not used.  Hence it is still possible to call
     executed-named-cmd and similar functions while reading a value.

replace-string, replace-pattern
     The function replace-string implements two widgets.  If defined
     under the same name as the function, it prompts for two strings;
     the first (source) string will be replaced by the second
     everywhere it occurs in the line editing buffer.

     If the widget name contains the word `pattern', for example by
     defining the widget using the command `zle -N replace-pattern
     replace-string', then the replacement is done by pattern matching.
     All zsh extended globbing patterns can be used in the source
     string; note that unlike filename generation the pattern does not
     need to match an entire word, nor do glob qualifiers have any
     effect.  In addition, the replacement string can contain parameter
     or command substitutions.  Furthermore, a `&' in the replacement
     string will be replaced with the matched source string, and a
     backquoted digit `\N' will be replaced by the Nth parenthesised
     expression matched.  The form `\{N}' may be used to protect the
     digit from following digits.

     For example, starting from the line:

          print This line contains fan and fond

     and invoking replace-pattern with the source string `f(?)n' and
     the replacment string `c\1r' produces the not very useful line:

          print This line contains car and cord

     The range of the replacement string can be limited by using the
     narrow-to-region-invisible widget.  One limitation of the current
     version is that undo will cycle through changes to the replacement
     and source strings before undoing the replacement itself.

smart-insert-last-word
     This function may replace the insert-last-word widget, like so:

          zle -N insert-last-word smart-insert-last-word

     With a numeric prefix, or when passed command line arguments in a
     call from another widget, it behaves like insert-last-word, except
     that words in comments are ignored when INTERACTIVE_COMMENTS is
     set.

     Otherwise, the rightmost ``interesting'' word from the previous
     command is found and inserted.  The default definition of
     ``interesting'' is that the word contains at least one alphabetic
     character, slash, or backslash.  This definition may be overridden
     by use of the match style.  The context used to look up the style
     is the widget name, so usually the context is :insert-last-word.
     However, you can bind this function to different widgets to use
     different patterns:

          zle -N insert-last-assignment smart-insert-last-word
          zstyle :insert-last-assignment match '[[:alpha:]][][[:alnum:]]#=*'
          bindkey '\e=' insert-last-assignment

Styles
------

The behavior of several of the above widgets can be controlled by the
use of the zstyle mechanism.  In particular, widgets that interact with
the completion system pass along their context to any completions that
they invoke.

break-keys
     This style is used by the incremental-complete-word widget. Its
     value should be a pattern, and all keys matching this pattern will
     cause the widget to stop incremental completion without the key
     having any further effect. Like all styles used directly by
     incremental-complete-word, this style is looked up using the
     context `:incremental'.

completer
     The incremental-complete-word and insert-and-predict widgets set
     up their top-level context name before calling completion.  This
     allows one to define different sets of completer functions for
     normal completion and for these widgets.  For example, to use
     completion, approximation and correction for normal completion,
     completion and correction for incremental completion and only
     completion for prediction one could use:

          zstyle ':completion:*' completer \
                  _complete _correct _approximate
          zstyle ':completion:incremental:*' completer \
                  _complete _correct
          zstyle ':completion:predict:*' completer \
                  _complete

     It is a good idea to restrict the completers used in prediction,
     because they may be automatically invoked as you type.  The _list
     and _menu completers should never be used with prediction.  The
     _approximate, _correct, _expand, and _match completers may be
     used, but be aware that they may change characters anywhere in the
     word behind the cursor, so you need to watch carefully that the
     result is what you intended.

cursor
     The insert-and-predict widget uses this style, in the context
     `:predict', to decide where to place the cursor after completion
     has been tried.  Values are:

    complete
          The cursor is left where it was when completion finished, but
          only if it is after a character equal to the one just
          inserted by the user.  If it is after another character, this
          value is the same as `key'.

    key
          The cursor is left after the Nth occurrence of the character
          just inserted, where N is the number of times that character
          appeared in the word before completion was attempted.  In
          short, this has the effect of leaving the cursor after the
          character just typed even if the completion code found out
          that no other characters need to be inserted at that position.

     Any other value for this style unconditionally leaves the cursor
     at the position where the completion code left it.

list
     When using the incremental-complete-word widget, this style says
     if the matches should be listed on every key press (if they fit on
     the screen).  Use the context prefix `:completion:incremental'.

     The insert-and-predict widget uses this style to decide if the
     completion should be shown even if there is only one possible
     completion.  This is done if the value of this style is the string
     always.  In this case the context is `:predict' (_not_
     `:completion:predict').

match
     This style is used by smart-insert-last-word to provide a pattern
     (using full EXTENDED_GLOB syntax) that matches an interesting word.
     The context is the name of the widget to which
     smart-insert-last-word is bound (see above).  The default behavior
     of smart-insert-last-word is equivalent to:

          zstyle :insert-last-word match '*[[:alpha:]/\\]*'

     However, you might want to include words that contain spaces:

          zstyle :insert-last-word match '*[[:alpha:][:space:]/\\]*'

     Or include numbers as long as the word is at least two characters
     long:

          zstyle :insert-last-word match '*([[:digit:]]?|[[:alpha:]/\\])*'

     The above example causes redirections like "2>" to be included.

prompt
     The incremental-complete-word widget shows the value of this style
     in the status line during incremental completion.  The string
     value may contain any of the following substrings in the manner of
     the PS1 and other prompt parameters:

    %c
          Replaced by the name of the completer function that generated
          the matches (without the leading underscore).

    %l
          When the list style is set, replaced by `...' if the list of
          matches is too long to fit on the screen and with an empty
          string otherwise.  If the list style is `false' or not set,
          `%l' is always removed.

    %n
          Replaced by the number of matches generated.

    %s
          Replaced by `-no match-', `-no prefix-', or an empty string
          if there is no completion matching the word on the line, if
          the matches have no common prefix different from the word on
          the line, or if there is such a common prefix, respectively.

    %u
          Replaced by the unambiguous part of all matches, if there is
          any, and if it is different from the word on the line.

     Like `break-keys', this uses the `:incremental' context.

stop-keys
     This style is used by the incremental-complete-word widget.  Its
     value is treated similarly to the one for the break-keys style
     (and uses the same context: `:incremental').  However, in this
     case all keys matching the pattern given as its value will stop
     incremental completion and will then execute their usual function.

toggle
     This boolean style is used by predict-on and its related widgets in
     the context `:predict'.  If set to one of the standard `true'
     values, predictive typing is automatically toggled off in
     situations where it is unlikely to be useful, such as when editing
     a multi-line buffer or after moving into the middle of a line and
     then deleting a character.  The default is to leave prediction
     turned on until an explicit call to predict-off.

verbose
     This boolean style is used by predict-on and its related widgets in
     the context `:predict'.  If set to one of the standard `true'
     values, these widgets display a message below the prompt when the
     predictive state is toggled.  This is most useful in combination
     with the toggle style.  The default does not display these
     messages.

widget
     This style is similar to the command style: For widget functions
     that use zle to call other widgets, this style can sometimes be
     used to override the widget which is called.  The context for this
     style is the name of the calling widget (_not_ the name of the
     calling function, because one function may be bound to multiple
     widget names).

          zstyle :copy-earlier-word widget smart-insert-last-word

     Check the documentation for the calling widget or function to
     determine whether the widget style is used.

