mirror of
https://github.com/zsh-users/zsh
synced 2024-11-02 20:47:49 +00:00
1249 lines
54 KiB
Text
1249 lines
54 KiB
Text
-------------------------------------
|
|
CHANGES FROM PREVIOUS VERSIONS OF ZSH
|
|
-------------------------------------
|
|
|
|
Note also the list of incompatibilities in the README file.
|
|
|
|
Changes from 5.2 to 5.3.1
|
|
-------------------------
|
|
|
|
There are only minor compatibility fixes between 5.3 and 5.3.1.
|
|
|
|
It is possible to enable character width support for Unicode 9 by
|
|
configuring with `--enable-unicode9'; this compiles in some additional
|
|
tables. At some point this support may move into a module, in which
|
|
case the configure option will be changed to cause the module to be
|
|
permanently loaded. This option is not useful unless your terminal also
|
|
supports Unicode 9.
|
|
|
|
The new word modifier ':P' computes the physical path of the argument.
|
|
It is different from the existing ':a' modifier which always resolves
|
|
'/before/here/../after' to '/before/after', and differs from the
|
|
existing ':A' modifier which resolves symlinks only after 'here/..' is
|
|
removed, even when /before/here is itself a symbolic link. It is
|
|
recommended to review uses of ':A' and, if appropriate, convert them
|
|
to ':P' as soon as compatibility with 5.2 is no longer a requirement.
|
|
|
|
The output of "typeset -p" uses "export" commands or the "-g" option
|
|
for parameters that are not local to the current scope. Previously,
|
|
all output was in the form of "typeset" commands, never using "-g".
|
|
|
|
vi-repeat-change can repeat user-defined widgets if the widget calls
|
|
zle -f vichange.
|
|
|
|
The parameter $registers now makes the contents of vi register buffers
|
|
available to user-defined widgets.
|
|
|
|
New vi-up-case and vi-down-case builtin widgets bound to gU/gu (or U/u
|
|
in visual mode) for doing case conversion.
|
|
|
|
A new select-word-match function provides vim-style text objects with
|
|
configurable word boundaries using the existing match-words-by-style
|
|
mechanism.
|
|
|
|
Support for the conditional expression [[ -v var ]] to test if a
|
|
variable is set for compatibility with other shells.
|
|
|
|
The print and printf builtins have a new option -v to assign the output
|
|
to a variable. This is for bash compatibility but with the additional
|
|
feature that, for an array, a separate element is used each time the
|
|
format is reused.
|
|
|
|
New x: syntax in completion match specifications make it possible to
|
|
disable match specifications hardcoded in completion functions.
|
|
|
|
Changes from 5.1.1 to 5.2
|
|
-------------------------
|
|
|
|
The new module zsh/param/private can be loaded to allow the shell
|
|
to define parameters that are private to a function scope (i.e. are
|
|
not propagated to nested functions called within this function).
|
|
|
|
The parameter flag ${(P)...} is now more useful when it appears in
|
|
a nested expansion. For example,
|
|
|
|
typeset -A assoc=(one un two deux three trois)
|
|
name=assoc
|
|
print ${${(P)name}[one]}
|
|
|
|
now prints "un". In previous versions of the shell the value of the
|
|
substitution was fully expanded on return from ${(P)name}, making
|
|
associative array subscripting difficult. As a side effect, flags
|
|
for formatting appearing in the inner substitution now affect the
|
|
substitution of the name (into "assoc" in this case), which is not
|
|
normally useful: flags that should apply to the value must be in the
|
|
outer substitution.
|
|
|
|
The GLOB_STAR_SHORT option allows the pattern **/* to be shortened to
|
|
just ** if no / follows. so **.c searches recursively for a file whose
|
|
name has the suffix ".c".
|
|
|
|
The effect of the WARN_CREATE_GLOBAL option has been significantly
|
|
extended, so expect it to cause additional warning messages about
|
|
parameters created globally within function scope.
|
|
|
|
Paste highlighting (added in 5.1) is now enabled by default to signal
|
|
that accept-line hasn't occurred. Paste highlighting may be disabled
|
|
via
|
|
zle_highlight+=(paste:none)
|
|
. Disabling paste highlighting will retain the "bracketed paste"
|
|
behaviour, unless that is separately disabled via zle_bracketed_paste.
|
|
|
|
Changes from 5.1 to 5.1.1
|
|
-------------------------
|
|
|
|
5.1.1 is primarily a bug fix release; however, a few minor features were
|
|
added.
|
|
|
|
The ZLE variables YANK_ACTIVE, YANK_START and YANK_END have been added
|
|
and are useful for managing highlighting.
|
|
|
|
The zsh-specific pattern match range tests have been supplemented with
|
|
[:INCOMPLETE:] and [:INVALID:] to help detect the state of partially
|
|
read multibyte character strings.
|
|
|
|
Changes from 5.0.8 to 5.1
|
|
-------------------------
|
|
|
|
The builtins declare, export, local, readonly and typeset
|
|
now have corresponding reserved words. When used in
|
|
this form, the builtin syntax is extended so that assignments
|
|
following the reserved word are treated similarly to
|
|
assignments that appear at the start of the command line.
|
|
For example,
|
|
local scalar=`echo one word` array=(several words)
|
|
creates a local "scalar" containing the text "one word"
|
|
and an array "array" containing the words "several"
|
|
"words".
|
|
|
|
- The print builtin has new options -x and -X to expand tabs.
|
|
|
|
- Several new command completions and numerous updates to others.
|
|
|
|
- Options to "fc" to segregate internal and shared history.
|
|
|
|
- All emulations including "sh" use multibyte by default; several
|
|
repairs to multibyte handling.
|
|
|
|
- ZLE supports "bracketed paste" mode to avoid interpreting pasted
|
|
newlines as accept-line. Pastes can be highlighted for visibility
|
|
and to make it more obvious whether accept-line has occurred.
|
|
|
|
- Improved (though still not perfect) POSIX compatibility for getopts
|
|
builtin when POSIX_BUILTINS is set.
|
|
|
|
- New setopt APPEND_CREATE for POSIX-compatible NO_CLOBBER behaviour.
|
|
|
|
- Completion of date values now displays in a calendar format when
|
|
the complist module is available. Controllable by zstyle.
|
|
|
|
- New parameter UNDO_LIMIT_NO for more control over ZLE undo repeat.
|
|
|
|
- Several repairs/improvements to the contributed narrow-to-region
|
|
ZLE function.
|
|
|
|
- Many changes to child-process and signal handling to eliminate race
|
|
conditions and avoid deadlocks on descriptor and memory management.
|
|
|
|
- New builtin sysopen in zsh/system module for detailed control of
|
|
file descriptor modes.
|
|
|
|
|
|
Changes from 5.0.0 to 5.0.8
|
|
---------------------------
|
|
|
|
- Global aliases can be created for syntactic tokens such as command
|
|
separators (";", "&", "|", "&&", "||"), redirection operators, etc.
|
|
Use at your own risk! The POSIX_ALIASES option is interpreted more
|
|
strictly to prevent expansion of these and other alias names containing
|
|
quotes, glob metacharacters, parameter references, etc.
|
|
|
|
- There have been various further improvements to builtin handling
|
|
with the POSIX_BUILTINS option (off by default) for compatibility with
|
|
the POSIX standard.
|
|
|
|
- 'whence -v' is now more informative, and 'whence -S' shows you
|
|
how a full chain of symbolic links resolves to a command.
|
|
|
|
- The 'p' parameter flag now allows an argument to be specified
|
|
as a reference to a variable, e.g. ${(ps.$sep.)foo} to split $foo
|
|
on a string given by $sep.
|
|
|
|
- The option FORCE_FLOAT now forces variables, not just constants,
|
|
to floating point in arithmetic expressions.
|
|
|
|
- The type of an assignment in arithmetic expressions, e.g. the
|
|
type seen by the variable res in $(( res = a = b )), is now
|
|
more logical and C-like.
|
|
|
|
- The default binding of 'u' in vi command mode has changed to undo
|
|
multiple changes when invoked repeatedly. '^R' is now bound to redo
|
|
changes. To revert to toggling of the last edit use:
|
|
bindkey -a u vi-undo-change
|
|
|
|
- Compatibility with Vim has been improved for vi editing mode. Most
|
|
notably, Vim style text objects are supported and the region can be
|
|
manipulated with vi commands in the same manner as Vim's visual mode.
|
|
|
|
- Elements of the watch variable may now be patterns.
|
|
|
|
- The logic for retrying history locking has been improved.
|
|
|
|
- Some rationalisations have been made to the zsh/db/gdbm module that
|
|
should make it more useful and predictable in operation.
|
|
|
|
- Numeric constants encountered in mathematical expressions (but not other
|
|
contexts) can contain underscores as separators that will be ignored on
|
|
evaluation, as allowed in other scripting languages. For example,
|
|
0xFFFF_FFFF, or 3.141_592_654. From 5.0.6 this is also available
|
|
in output, e.g.
|
|
setopt cbases
|
|
zmodload zsh/mathfunc
|
|
print $(( [#16_4] 2**32 - 1 )) $(( [#_3] 4 * atan(1.0) ))
|
|
|
|
- "functions -T" turns on tracing for the specified function(s) only,
|
|
similar to "functions -t" except that tracing is turned off for any
|
|
functions called from the specified one(s) that don't also have the -t
|
|
or -T flag.
|
|
|
|
- The option FORCE_FLOAT has been added to force all arithmetic constants
|
|
to be treated as floating point. This is most useful locally within
|
|
functions or scripts performing floating point calculations.
|
|
|
|
- The default $fpath/$FPATH is now designed to include
|
|
/usr/local/share/zsh/site-functions unless the installer has
|
|
specifically decided to use another path, i.e. regardless of
|
|
the standard installation location. This directory does not need to
|
|
exist. Sites that set an explicit site directory can put that in
|
|
/etc/zshenv as before. The intention of the new path element is to
|
|
increase the likelihood that locally added functions can be found with
|
|
the shell running "out of the box", unless the shell has been
|
|
deliberately configured differently by the installer for some special
|
|
purpose.
|
|
|
|
- Individual pattern characters can be disabled. For example, to allow '^'
|
|
to be an ordinary character even if the option EXTENDED_GLOB is set, use
|
|
"disable -p '^'".
|
|
|
|
- The variable editing builtin vared can be given custom editing widgets
|
|
for initialisation and finishing.
|
|
|
|
- The line editor's capability for listening on file descriptors
|
|
additional to the terminal has been enhanced so that the handler for
|
|
such file descriptors can be a line editor widget. Previously the
|
|
handler always behaved as a standard shell function.
|
|
|
|
- Hooks for adding history (the function zshaddhistory and the
|
|
array zshaddhistory_functions) can return status 2 to indicate that
|
|
history is to be saved internally within the shell but not written.
|
|
|
|
- In file completion, the recursive-files style can be set to an array of
|
|
patterns to match against "$PWD/". In any matched location, it is
|
|
possible to complete files in arbitrarily deep subdirectories without
|
|
needing to type the directory prefix. See example in the zshcompsys
|
|
manual.
|
|
|
|
- The _user_expand completer now allows expansion functions in the
|
|
user-expand files to return a string in REPLY that will be used to name
|
|
the set of expansions returned.
|
|
|
|
- The parameter HISTORY_IGNORE may be set to a pattern which matches
|
|
lines in the internal history that are to be omitted from the history
|
|
file at file write time. This differs from history changes made in
|
|
the zshaddhistory hook or by the HIST_IGNORE_* options, all of which
|
|
take effect immediately on the internal history list itself.
|
|
|
|
- The parameter ZLE_RPROMPT_INDENT can be set to 0 to remove the space
|
|
before the right hand side of the screen (this causes problems with
|
|
some terminals). It is not special and is not set by default; the
|
|
effect in that case is as if it was 1, as in previous versions.
|
|
|
|
- If the option EXTENDED_GLOB is in effect, it is possible to force
|
|
globbing within conditional code using the [[ ... ]] syntax by flagging
|
|
that a certain string is a glob using the (#q) glob qualifier syntax.
|
|
The resulting glob is treated as a single argument. For example,
|
|
[[ -n *.c(#qN) ]] tests whether there are any .c files in the current
|
|
directory.
|
|
|
|
- In prompt strings, the %N(l.true.false) conditional (line length) and
|
|
the %N<..< and %N>..> truncation operators now accept negative values
|
|
of N, which count the remaining space to the opposite margin (positive
|
|
values of N still count the space used since the start of the prompt).
|
|
In PS1 and PROMPT, this counts to the right margin, whereas in RPS1 and
|
|
RPROMPT, it counts to the left margin (not to the opposite prompt).
|
|
|
|
- Also in prompt strings, %e or the equivalent test %(e..) are used to
|
|
output or test the execution / evaluation depth of a shell
|
|
construct within functions etc. This is useful in $PS4.
|
|
|
|
- Another new prompt feature is the %. escape within time strings, for
|
|
example %D{%H:%M:%S.%.}. It provides zero-padded decimal fractions of a
|
|
second; by default milliseconds are shown, but the number of digits may
|
|
be indicated from 1 to 6, e.g. "%6.". (Note this is part of the
|
|
extensions to strftime() formats rather than basic prompt escapes.)
|
|
|
|
- The operators :^ and :^^ in parameter substitution allow for array
|
|
zipping in the form ${name:^array}. With the :^ operator, all entries
|
|
in $name and $array will be output in alternating order. With :^ the
|
|
longer array is trimmed whereas the :^^ operator repeats the shorter
|
|
array enough to match the longer array.
|
|
|
|
- The value of $? when a job becomes stopped is now the signal number plus
|
|
128, for compatibility with other shells. Note that different operating
|
|
systems use different values e.g. for SIGTSTP, so it is not possible in
|
|
portable scripts to detect stopped jobs by comparing to a fixed number.
|
|
Also, the value of $pipestatus is now updated when a job stops, not just
|
|
when it exits.
|
|
|
|
- Redirections applied to function definitions take effect when the
|
|
function is executed, not when it is defined. Other shells already
|
|
work this way. For example,
|
|
fn() { echo hello } >~/logfile
|
|
Running fn writes "hello" to logfile. In older versions of the shell
|
|
it would create an empty file at the point of definition.
|
|
|
|
Changes between 4.2 and 5.0.0
|
|
-----------------------------
|
|
|
|
The following changes first appeared in the 4.3 series of releases;
|
|
see also the file Etc/NEWS-4.3.
|
|
|
|
Here is a summary of the most significant changes:
|
|
|
|
- Multibyte characters strings are supported throughout the shell.
|
|
Various options, editor features, and expansion flags have been
|
|
added to aid in using them.
|
|
|
|
- The following new options have appeared: COMBINING_CHARS,
|
|
DEBUG_BEFORE_CMD, HASH_EXECUTABLES_ONLY, HIST_FCNTL_LOCK,
|
|
HIST_LEX_WORDS, HIST_SAVE_BY_COPY, MULTIBYTE, NO_MULTI_FUNCDEF,
|
|
PATH_SCRIPT, POSIX_ALIASES, POSIX_CD, POSIX_JOBS, POSIX_STRINGS,
|
|
POSIX_TRAPS, PROMPT_SP, SOURCE_TRACE.
|
|
|
|
- Highlighting and colouring of the command line is supported.
|
|
|
|
- Job control is supported in non-interactive shells and subshells.
|
|
|
|
- The zshroadmap manual page provides a slightly more helpful
|
|
introduction to the shell manual than was previously available.
|
|
|
|
- There have been some notable enhancements to POSIX comptability
|
|
when the shell is in a corresponding emulation (e.g. "emulate sh").
|
|
|
|
Expansion (parameters, globbing, etc.) and redirection
|
|
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
- The character group tests [[:IDENT:]], [[:IFS:]], [[:IFSSPACE:]],
|
|
[[:WORD:]] in patterns allow testing if a character can be
|
|
part of an identifier, is an IFS character, is an IFS whitespace
|
|
character, or is considered part of the word using the line editor's
|
|
logic based on the shell variable WORDCHARS.
|
|
|
|
- In extended globbing, "(#cN,M)" means "match the preceding group
|
|
at least N but no more than M times".
|
|
|
|
- The glob qualifier P can be used with an argument to add an extra
|
|
word before each glob match.
|
|
|
|
- The syntax ~[...] provides dynamic directory naming by means
|
|
of the shell function zsh_directory_name or associated hook functions.
|
|
This is useful for expanding paths with many variable components as
|
|
commonly found in software development.
|
|
|
|
- Parameter substitution has the ${NAME:OFFSET} and ${NAME:OFFSET:LENGTH}
|
|
syntax for compatibility with other shells (and zero-based indexing
|
|
is used to enhance compatibility). LENGTH may be negative to count
|
|
from the end.
|
|
|
|
- The arbitrary limit on parameter subscripts (262144) has been removed.
|
|
As it was not configurable and tested in an inconvenient place it
|
|
was deemed preferable to remove it completely. The limit was originally
|
|
introduced to prevent accidental creation of a large parameter array
|
|
by typos that generated assignments along the lines of "12345678=0".
|
|
The general advice is not to do that.
|
|
|
|
- The parameter substitution flag (D) abbreviates directories in parameters
|
|
using the familiar ~ form.
|
|
|
|
- The parameter substitution flag (g) can take delimited arguments o, e and
|
|
c to provide echo- and print-style expansion: (g::) provides basic
|
|
echo-style expansion; (g:e:) provides the extended capabilities of
|
|
print; (g:o:) provides octal escapes without a leading zero; (g:c:)
|
|
additionally expands "^c" style control characters as for bindkey.
|
|
Options may be combined, e.g. (g:eoc:).
|
|
|
|
- The parameter substitution flag (m) indicates that string lengths used
|
|
calculated by the (l) and (r) flags or the # operator should take
|
|
account of the printing width of characters in multibyte mode, whether
|
|
0, 1 or more. (mm) causes printing characters to count as 1 and
|
|
non-printing chracters to count as 0.
|
|
|
|
- The parameter substitution flag (q-) picks the most minimal way of
|
|
quoting the parameter words, to make the result as readable as possible.
|
|
|
|
- The parameter substitution flag (Z), a variant of (z), takes arguments
|
|
describing how to split a variable using shell syntax: (Z:c:) parses
|
|
comments as strings (the default is not to treat comment characters
|
|
specially); (Z:C:) parses comments and strips them; (Z:n:) treats
|
|
newlines as ordinary whitespace (the default is to turn unquoted
|
|
newlines into semicolons; this is now documented).
|
|
|
|
- The parameter subscript flag (e) forces the argument to be treated
|
|
as a string, never a pattern, e.g. ${array[(ie)*]} looks for the
|
|
index of the array element containing the literal string "*".
|
|
|
|
- The operators :| and :* in parameter substitution allow for array
|
|
subtraction and intersection in the form ${name:|array}. With the :|
|
|
operator, all entries in $name that are also in $array will be removed
|
|
from the substitution. Conversely for the :* operation only the
|
|
entries that are in both arrays will be substituted.
|
|
|
|
- Numeric expansions can have a positive or negative step
|
|
e.g. "{3..9..2}". Negative start and end of ranges are also now
|
|
supported.
|
|
|
|
- =(<<<...) is optimised to eliminate the need for an external process.
|
|
It writes the given string to a file and substitutes the name on the
|
|
command line.
|
|
|
|
- The redirection operations "{myfd}>file" and "{myfd}>&-" open and
|
|
close a new file descriptor (at least 10) contained in the shell
|
|
variable myfd, which can be written to with ">&$myfd". This allows
|
|
arbitrary file descriptors rather than the explicit range 0 to 9.
|
|
|
|
- New prompt escapes:
|
|
%x and %I show source file and line number, useful in $PS4 (the
|
|
existing %N and %i show names and lines in the execution environment
|
|
rather than the source file).
|
|
%F, %K, %f, %k allow colouring of prompts both using ANSI colour names
|
|
and values supported by individual terminal emulators.
|
|
|
|
Builtins and shell functions
|
|
-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
- Directory-changing builtins take an option -q to suppress side
|
|
effects such as printing directories or calling the chpwd hook functions.
|
|
|
|
- Various enhancements have been made to traps:
|
|
- The option DEBUG_BEFORE_CMD is on by default, so DEBUG traps
|
|
can be used to debug code about to be run
|
|
- $ZSH_DEBUG_CMD in such a trap gives the code to be run
|
|
- "setopt ERR_EXIT" in a DEBUG trap causes the code not to be executed
|
|
|
|
- The "fc" builtin is now more useful non-interactively.
|
|
|
|
Shell variables (parameters)
|
|
-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
- New variables:
|
|
CORRECT_IGNORE can be set to a pattern to be ignored in spelling correction.
|
|
KEYBOARD_HACK defines characters to be ignored if typed unmatched at
|
|
the end of the line (an extension of the SUN_KEYBOARD_HACK option,
|
|
but note that setting the option will override the variable).
|
|
ZSH_PATCHLEVEL provides a unique indication of the code compiled to
|
|
make the shell, even between releases.
|
|
ZSH_SUBSHELL indicates the subshell level, incremented once per fork, at
|
|
which the code is being run.
|
|
|
|
Options
|
|
-+-+-+-
|
|
|
|
- New options:
|
|
COMBINING_CHARS: assume that the terminal displays combining
|
|
characters correctly. The shell cannot determine this by itself,
|
|
hence the option. This is highly recommended for MacOS X where
|
|
file names are stored with accented characters split into basic
|
|
and combining characters.
|
|
DEBUG_BEFORE_CMD (on by default): execute debug traps before the
|
|
code they refer to. This is a change of the default behaviour
|
|
as the new behaviour is much more useful.
|
|
HASH_EXECUTABLES_ONLY: don't insert non-executable files into the
|
|
command hash used e.g. by completion; this is optional as the
|
|
resulting behaviour may be very slow on network paths.
|
|
HIST_FCNTL_LOCK: Use the system's file locking mechanism instead
|
|
of an ad-hoc mechanism for locking history files.
|
|
HIST_LEX_WORDS: Perform lexical analysis on history lines read from
|
|
files, so the words are more accurately determined. May be very slow.
|
|
HIST_SAVE_BY_COPY (on by default): if unset, write a history file in
|
|
place by truncating the old one. Only needs to be turned off in
|
|
special circumstances.
|
|
MULTIBYTE (on by default if available): both variables and editor
|
|
command lines are treated as sequences of multibyte characters
|
|
rather than raw bytes depending on the locale. May be turned off
|
|
within functions to perform bytewise operations.
|
|
MULTI_FUNCDEF (on by default): "foo bar () { ... }" defines two
|
|
functions. This is often found to be confusing and bug-prone,
|
|
so you may want to unset it.
|
|
PATH_SCRIPT: search the path for a script specified as the first
|
|
argument to the shell on invocation.
|
|
POSIX_ALIASES: reserved words are not candidates for alias expansion.
|
|
POSIX_CD: make directory changing more POSIX-compatible.
|
|
POSIX_JOBS: make job control more POSIX compliant.
|
|
POSIX_STRINGS: $'...\0...' always processes \0 as a NULL, but if the
|
|
option is set the remainder of the string is ignored.
|
|
POSIX_TRAPS: EXIT traps are not executed on return from shell functions.
|
|
PROMPT_SP: improves display of lines not ending with newlines when
|
|
PROMPT_CR is in effect.
|
|
SOURCE_TRACE: print information as files are executed with ".",
|
|
"source", or as startup or shutdown files.
|
|
|
|
Line editor
|
|
-+-+-+-+-+-
|
|
|
|
- Supports multibyte characters, including characters wider than one
|
|
screen cell and (with the COMBINING_CHARS option) combining characters.
|
|
|
|
- New builtin widgets:
|
|
arguments-base: allow non-decimal numeric arguments
|
|
history-incremental-pattern-search-{backward,forward}: support
|
|
patterns in incremental searches.
|
|
|
|
- New special variables:
|
|
region_highlight allows arbitrary highlighting of parts of the
|
|
command line; it is maintained dynamically.
|
|
UNDO_CHANGE_NO gives a unique record of the current change state of
|
|
the command line, for undoing back to a particular point using
|
|
the undo widget.
|
|
zle_highlight provides master control of highlighting for special
|
|
modes, e.g. unprintable characters.
|
|
ZLE_LINE_ABORTED records an editor line that was aborted by an error
|
|
or C-g. It can be used to recover aborted lines.
|
|
ZLE_STATE give miscellaneous information, currently whether the line
|
|
editor is in insert or overwrite mode.
|
|
|
|
- The undo widget takes an argument, a previous value of $UNDO_CHANGE_NO.
|
|
|
|
Completion
|
|
-+-+-+-+-+
|
|
|
|
- Many new and enhanced completion functions
|
|
|
|
- New styles:
|
|
accept-exact-dirs: suppress path expansion of directory components
|
|
that already exist, speeding up completion significantly on slow
|
|
network directories.
|
|
path-completion: can be used to suppress directory components before
|
|
the current one completely, so e.g. /u/b<TAB> only completes after the
|
|
"b", not the "u".
|
|
|
|
- New special variables:
|
|
ZLE_REMOVE_SUFFIX_CHARS, ZLE_SPACE_SUFFIX_CHARS provide enhanced
|
|
flexibility over suffix removal.
|
|
|
|
- Matching control, typically handled with the matcher-list style,
|
|
supports named character ranges, such as [:upper:], wherever
|
|
ranges were allowed, for example 'm:{[:upper:]}={[:lower:]}'.
|
|
However, matching control does not yet handle multibyte characters
|
|
properly, so this is currently limited to ASCII.
|
|
|
|
Syntax and compatibility
|
|
-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
- Substitutions of the form ${var:-"$@"} and ${var:+"$@"} now behave
|
|
much more like other shells when appropriate (e.g. with the
|
|
SH_WORD_SPLIT option).
|
|
|
|
- Assignments within variable substitutions, such as ${var=value},
|
|
are also more compatible with other shells where appropriate.
|
|
|
|
- The emulate command can now be passed an expression to be evaluated
|
|
in a "sticky" emulation, so that functions defined there always
|
|
behave in the appropriate emulation.
|
|
|
|
- "emulate sh" and similar modes have improved compatibility with
|
|
respect to deciding whether the shell should exit on errors.
|
|
|
|
- Signals now accept SIG as part of the name.
|
|
|
|
Modules
|
|
-+-+-+-
|
|
|
|
- Modules now present "features", specific builtins (b:), parameters
|
|
(p:), conditions (c:) and math functions (f:), allowing more control
|
|
over what is imported from a module.
|
|
|
|
- The zsh/curses module provides access to the "curses" screen
|
|
manipulation package.
|
|
|
|
- The zsh/datetime module has a calendar utility, although it is not
|
|
as robust as standalone calendar utilities.
|
|
|
|
- The zsh/newuser module and associated functions has facilities for
|
|
setting up startup files for a first-time user.
|
|
|
|
- The zsh/parameter module contains some new arrays to aid in tracing
|
|
of the shell's call stack: $funcsourcetrace and $funcfiletrace.
|
|
|
|
- The zsh/parameter module provides $usergroups, an associative arrays
|
|
whose keys are the names of groups the current user belongs to, with
|
|
the group identifier as the corresponding value.
|
|
|
|
- The zsh/system module has a zsystem builtin which provides file
|
|
locking and also a forward-compatible means for testing subcommands
|
|
supported.
|
|
|
|
Internal improvements
|
|
-+-+-+-+-+-+-+-+-+-+-
|
|
|
|
- High resolution timestamps are used internally for certain
|
|
comparisons when available.
|
|
|
|
Add-on functions
|
|
-+-+-+-+-+-+-+-+
|
|
|
|
- The VCS_Info system provides a way of keeping track of the state
|
|
of numerous version control systems within the shell.
|
|
|
|
- cdr etc.: change to a directory from a list that persists between
|
|
shell instances, with completion support.
|
|
|
|
- regexp-replace replaces text in variables using regular expressions;
|
|
it may be used by zle function widgets based on the functions
|
|
replace-string and replace-string-again to provide regular expression
|
|
replacements in the line editor.
|
|
|
|
|
|
Changes in 4.2 since version 4.2.0
|
|
----------------------------------
|
|
|
|
- The autoload and related builtins take options -k and -z to indicate
|
|
ksh or zsh autoloading style for given functions, making it possible
|
|
to mix and match.
|
|
|
|
- Assignments to associative arrays can use the i and r index flags.
|
|
For example,
|
|
assoc[(i)alpha*]=bravo
|
|
sets the value for the element whose key matches the pattern `alpha*';
|
|
assoc[(r)activ*]=passive
|
|
sets the value for the element whose current value matches the pattern
|
|
`activ*'.
|
|
|
|
- The glob qualifier F indicates a non-empty directory. Hence *(F)
|
|
indicates all subdirectories with entries, *(/^F) means all
|
|
subdirectories with no entries.
|
|
|
|
- fc -p and fc -P provide push/pop for the status of the shell's
|
|
history (both internal and using the history file). With automatic
|
|
scoping (fc -ap) it becomes easy to use a temporary history in a
|
|
function. This has been added to the calculator function zcalc to make
|
|
its internal history work more seamlessly.
|
|
|
|
- A new `try block' and `always block' syntax has been introduced
|
|
to make it easier to ensure the shell runs important tidy-up code
|
|
in the event of an error. It also runs after a break, continue, or
|
|
return, including a return forced by the ERR_RETURN option
|
|
(but not an exit, which is immediate). The syntax is:
|
|
`{' try-block-list `}' `always' `{' always-block-list `}'
|
|
where no newline or semicolon may appear between `}' and `always'.
|
|
This is compatible with all previous valid zsh syntax as an `always'
|
|
at that point used to be a syntax error. For example,
|
|
{ echo Code run in current shell } always { echo Tidy-up code }
|
|
|
|
- A new zle widget reset-prompt has been added to re-expand the current
|
|
prompt. Changes to the variable in use as well as changes in its
|
|
expansions are both taken into account. The same effect is now forced by
|
|
a job change notification, making the %j prompt escape and %(j..) ternary
|
|
expression more useful.
|
|
|
|
- The zftp module supports ports following the hostname in the normal suffix
|
|
notation, `host:port'. This requires IPv6 colon-style addresses to be
|
|
specified in suitably quoted square brackets, for example:
|
|
|
|
zftp open '[f000::baaa]'
|
|
zftp open '[f000::baaa]:ftp'
|
|
|
|
(the two are equivalent).
|
|
|
|
- Special traps, those that don't correspond to signals, i.e. ZERR, DEBUG
|
|
and EXIT are no longer executed inside other traps. This caused
|
|
unnecessary confusion if, for example, both DEBUG and EXIT traps
|
|
were set. The new behaviour is more compatible with other shells.
|
|
|
|
- New option TRAPS_ASYNC which if set allows traps to run while the
|
|
shell is waiting for a child process. This is the traditional zsh
|
|
behaviour; POSIX requires the option to be unset. In sh/ksh
|
|
compatibility mode the option is turned off by default and the option
|
|
letter -T turns it on, for compatibility with FreeBSD sh.
|
|
|
|
- New WIDGETSTYLE, WIDGETFUNC parameters in ZLE.
|
|
|
|
- Glob qualifier (+func) is shorthand for (e:func:) (calls a command,
|
|
typically a shell function, with no argument).
|
|
|
|
|
|
New features between zsh versions 4.0 and 4.2
|
|
---------------------------------------------
|
|
|
|
Configuration:
|
|
- upgraded to use autoconf post-2.50
|
|
- improved compatibility with other shells through shell options,
|
|
builtin arguments and improved builtin option parsing
|
|
|
|
Syntax and builtins:
|
|
- new printf builtin
|
|
- `+=' to append to parameters which works for scalars, arrays and (with
|
|
pairs) associative arrays.
|
|
- enhanced multiple parameter `for' loops:
|
|
for key value in key1 value1 key2 value2 ...
|
|
maintaining full compatibility with POSIX syntax.
|
|
- Suffix aliases allow the shell to run a command on a file by suffix,
|
|
e.g `alias -s ps=gv' makes `foo.ps' execute `gv foo.ps'. Supplied
|
|
function zsh-mime-setup uses existing mailcap and mime.types files
|
|
to set up suitable aliases. Supplied function pick-web-browser is
|
|
suitable for finding a browser to show .html etc. files by suffix alias.
|
|
- new option `no_case_glob' for case-insensitive globbing.
|
|
|
|
Add-on modules and functions:
|
|
- zsh/datetime modules makes date formatting and seconds since EPOCH
|
|
available inside the shell.
|
|
- zsh/net/tcp module provides builtin interface to TCP through ztcp
|
|
builtin. Function suite for interactive and script use with expect-style
|
|
pattern matching.
|
|
- zsh/net/socket module provides zsocket builtin.
|
|
- zcalc calculator function with full line editing.
|
|
- builtin interface to pcre library
|
|
- zsh/zselect module provides zselect builtin as interface to select
|
|
system call
|
|
|
|
Completion system:
|
|
- general improvements to command and context support, low-level functions,
|
|
display code.
|
|
- in verbose mode, matches with the same description are grouped
|
|
- highly configurable completions for values of specific parameters,
|
|
specific redirections for specific commands
|
|
- support for bash completion functions (typically zsh native functions are
|
|
more powerful where available)
|
|
- New completions provided for (some of these may be in later 4.0
|
|
releases): valgrind, tidy, texinfo, infocmp, Java classes, larch, limit,
|
|
locale parameters, netcat, mysqldiff, mt, lsof, elinks, ant, debchange
|
|
(dch), email addresses, file system types, Perforce, xsltproc.
|
|
Plus many others.
|
|
|
|
Line editor:
|
|
- special parameters $PREDISPLAY, $POSTDISPLAY available in function
|
|
widgets to configure uneditable text (for narrowing)
|
|
- recursive editing
|
|
- supplied widgets read-from-minibuffer, replace-string use these features
|
|
(more intuitive prompting and argument reading than 4.0)
|
|
- access to killed text via $CUTBUFFER and $killring
|
|
- supplied highly configurable word widgets forward-word-match etc., can
|
|
set what constitutes a word interactively or in startup script
|
|
(implement bash-style behaviour, replacing previous bash-* word widgets)
|
|
- interface to incremental search via $LASTSEARCH
|
|
- better handling of keymaps in zle and widgets
|
|
- better support for output from user-defined widgets while zle is active
|
|
- tetris game which runs entirely in zle
|
|
- several other contributed widgets
|
|
|
|
Local internal improvements:
|
|
- disowned jobs are automatically restarted
|
|
- \u and \U print escapes for Unicode
|
|
- read -d <delimiter> allows a custom line ending.
|
|
- read -t <timeout>.
|
|
- line numbers in error messages and $PS4 output are more consistent
|
|
- `=prog' expands only paths, no longer aliases for consistency
|
|
- job display in prompts; `jobs' command output can be piped
|
|
- prompts: new $RPROMPT2, %^, %j, %y, enhanced %{, %}, %_.
|
|
- rand48() function in zsh/mathfunc for better randomness in arithmetic
|
|
(if the corresponding math library function is present)
|
|
- $SECONDS parameter can be made floating point via `typeset -F SECONDS'
|
|
for better timing accuracy
|
|
- improvements to command line history mechanism
|
|
- job table is dynamically sized, preventing overflow (typically seen
|
|
previously in complex completions).
|
|
- many bugfixes
|
|
|
|
|
|
New features in zsh version 4.0.1
|
|
---------------------------------
|
|
|
|
Compared with 3.1.9, there are mostly incremental improvements to
|
|
- the new completion system --- more functions, completers, styles...
|
|
- the line editor
|
|
- handling of signals and traps
|
|
- the configuration system, particularly for modules
|
|
- Cygwin support (now essentially complete)
|
|
- arithmetic evaluation
|
|
- the zpty (pseudoterminal handling) module
|
|
- the test suite
|
|
plus various bug fixes and compatibility improvements.
|
|
|
|
The alias modules (zle.so as an alias for zsh/zle.so, etc.) have been
|
|
removed; use `zmodload -A' to load modules under other names. This is
|
|
irrelevant if you are upgrading from 3.0.
|
|
|
|
Compared with the 3.0 series of releases (the last stable set), the most
|
|
significant of a large number of improvements in the shell are:
|
|
- Dynamically loadable modules with hierarchical naming system
|
|
- Shell functions as editor functions, with much additional builtin support
|
|
- Incredibly rich new completion system; just needs a single
|
|
initialization command to provide completion for all sorts of commands
|
|
and contexts
|
|
- Associative arrays
|
|
- Lots of new features in parameter substitution and globbing; more
|
|
logical handling of nested parameter substitutions
|
|
- Rewritten pattern-matching (globbing) code supports approximate
|
|
and case-insensitive matching and backreferences
|
|
- Various custom modules for pty's, FTP, special parameters, etc.
|
|
- Rewrites of many internal parts of the code: execution code to
|
|
provide compilation to internal representation, pattern matching
|
|
- Floating point arithmetic and mathematical functions module
|
|
- A test suite
|
|
- Various new options for compatibility with this, that and the other
|
|
See the 3.1.x changes below for more detail.
|
|
|
|
|
|
New features in zsh version 3.1.8 and 3.1.9
|
|
-------------------------------------------
|
|
These are primarily bug-fix versions. There are only a few user-visible
|
|
changes.
|
|
- Array slices ${array[a,b]} with b < a now correctly have zero length.
|
|
|
|
|
|
New features in zsh version 3.1.7
|
|
---------------------------------
|
|
Further enhancements to new completion system:
|
|
- Comprehensive context-sensitive configuration via `styles', which
|
|
can be set by the menu-driven front end in compinstall
|
|
- General mechanism for setting patterns to be ignored in a completion;
|
|
overriding of patterns to be matched for functions
|
|
- New completers: _prefix to complete word before cursor, _ignored
|
|
to complete using words so far ignored (like $fignore but more
|
|
powerful), _history to complete words from shell history
|
|
- Multiple use of completers with different options, similarly splitting
|
|
of different types of completion (`tags') so they are considered with
|
|
different styles
|
|
- Many more supplied completions for standard commands which work out of
|
|
the box, and better handling of command line options/arguments which
|
|
behave in the usual way
|
|
- $fpath now set up to use installed functions by default; functions
|
|
can be loaded just by `autoload -U compinit; compinit'
|
|
- Much improved handling of nested quoting and nested braces
|
|
- New LIST_PACKED and LIST_ROWS_FIRST completion options and corresponding
|
|
styles
|
|
- compctl library separated out (frozen but still supported)
|
|
- User-friendly introduction available at zsh website
|
|
http://zsh.sourceforge.net/
|
|
|
|
Additions to complist listing library (coloured completion and menu
|
|
selection):
|
|
- Listings can be shown page by page (are by default for new completion)
|
|
- Menu selection allows full up and down scrolling of long lists
|
|
|
|
Other editing features:
|
|
- new parameters $PENDING, $MARK, $BUFFERLINES
|
|
- Easy display of a prompt from within an editing widget
|
|
|
|
Code parsing, storing and execution:
|
|
- Completely new system of storing code internally, greatly optimised
|
|
- Much less memory for shell functions etc.
|
|
- Can compile shell functions to .zwc `wordcode' functions for fast
|
|
loading
|
|
- Can create `digest' files of entire directories in .zwc format
|
|
|
|
Parameters:
|
|
- Floating point support added, similar to ksh93, `typeset -F' and
|
|
`typeset -E' declare floating point variables; usual C/Fortran-like
|
|
rules for integer/float conversion
|
|
- Mathematical library zsh/mathfunc contains all the standard mathematical
|
|
functions for use in arithmetical expressions
|
|
- Improved parsing of arithmetical expressions and better error messages
|
|
- Special parameters can be made local
|
|
- `typeset -h' hides specialness of parameters, either as parameter
|
|
attribute or when declaring new local variable
|
|
- Local parameters can now be exported as in other shells; new option
|
|
GLOBAL_EXPORTS on by default provides old behaviour that `typeset -x'
|
|
referred to global parameters.
|
|
- zsh/parameter module enhanced: now needed for new completion; parameters
|
|
provided have `-h' flag set so that they are hidden by `typeset', so
|
|
that existing functions don't need to be changed
|
|
- Quotes can be stripped from parameter values with ${(Q)...}, providing
|
|
reverse of ${(q...)...} facility
|
|
|
|
Globbing and pattern matching:
|
|
- Pattern matching rewritten for efficiency
|
|
- Supports `backreferences', i.e. extracting parenthesised chunks of
|
|
matches, e.g.
|
|
[[ $foo = (#b)(*/)[^/]* ]]
|
|
stores the part of $foo up to the last / in $match[1] and the indexes of
|
|
the match in $mbegin[1], $mend[1]. (#m) is also available to set $MATCH
|
|
to the entire match and corresponding $MBEGIN, $MEND: useful in
|
|
parameter substitutions like ${.../.../...}.
|
|
- (#s) and (#e) match start and end of pattern like ^ and $ in regular
|
|
expression, useful in complex expressions such as ((#s)|/)dirname((#e)|/)
|
|
and in parameter expressions.
|
|
|
|
- Depth-first/last listing of recursive glob lists
|
|
|
|
Functions etc.:
|
|
- `autoload -X' inside a function body instructs the shell to
|
|
bootstrap the function at that point
|
|
- `autoload +X fn' says load the function fn but don't execute it
|
|
- Prompt `themes' make customization of prompts easier
|
|
|
|
Modules:
|
|
- New hierarchical naming scheme for modules; supplied modules go into
|
|
zsh subdirectory, so zle becomes zsh/zle etc.; aliases supplied for
|
|
compatibility for existing code, but the new format should be used in
|
|
future.
|
|
- zmodload is more consistent between dynamically and statically linked
|
|
shells
|
|
- zsh/zftp and its function suite support multiple sessions (zfsession
|
|
command); zftransfer allows transfer of files between two ftp sessions
|
|
with no local file; use styles for e.g. progress style; IPv6 supported;
|
|
recursive put `zfput -r' for uploads
|
|
- zsh/zpty module creates pseudoterminal and allows builtin `expect'-like
|
|
behaviour
|
|
|
|
Other:
|
|
- Test suite, not yet complete (`make test')
|
|
- use of Linux task limits
|
|
- Many fixes including output redirection with `setopt xtrace' and
|
|
other redirection fixes; NIS+ problem.
|
|
- Better null-command behaviour in sh and csh emulation
|
|
- Internal memory usage optimisations
|
|
|
|
|
|
New features in zsh version 3.1.6 (beta version)
|
|
------------------------------------------------
|
|
Note also the changes for 3.0.6, which include changes between 3.1.5. and
|
|
3.1.6.
|
|
|
|
New completion system via shell functions; massive degree of
|
|
programmability and configurability:
|
|
- ready-made function suite to use, see zshcompsys(1)
|
|
- approximate completion and spelling correction via completion
|
|
- control over matching for case-independence, partial word completion, etc.
|
|
- menu selection: choose a completion by moving the cursor
|
|
- coloured completion lists
|
|
- completion of filenames in quotes is now more reliable; splitting
|
|
quoted strings into command arguments is also possible.
|
|
|
|
Other editing changes:
|
|
- enhancements to function/editing interface: new parameters, numeric
|
|
arguments, string argument passing, reading keys from widgets.
|
|
- the old history-search-{back,for}ward behaviour and bindings have
|
|
returned (up to minor details).
|
|
- BASH_AUTO_LIST option to show completion list only on second key press.
|
|
- the ZBEEP parameter gives a string to output instead of beeping,
|
|
allowing you to have a visual bell.
|
|
|
|
History changes: new options HIST_NO_FUNCTIONS, HIST_EXPIRE_DUPS_FIRST,
|
|
HIST_FIND_NO_DUPS, HIST_IGNORE_ALL_DUPS, INC_APPEND_HISTORY,
|
|
HIST_SAVE_NO_DUPS, SHARE_HISTORY, allow better control of when history is
|
|
read and written and how duplicates are handled. New format for history
|
|
saves.
|
|
|
|
Associative arrays plus enhanced parameter substitutions to retrieve keys
|
|
and values.
|
|
|
|
Globbing changes:
|
|
- Case-insensitive and approximate globbing.
|
|
- Ordering and indexing of globbing matches, e.g. *(om[1]) picks
|
|
most recently modified file.
|
|
- General file mode qualifier with chmod(1)-like syntax, e.g. *(f:u+wx:)
|
|
|
|
New loadable modules:
|
|
- zftp, plus associated function suite, for turning your zsh session
|
|
into an FTP session too
|
|
- parameter, for examining and altering shell hash tables via an
|
|
associative array interface.
|
|
- mapfile, for reading and writing external files via an associative
|
|
array interface.
|
|
|
|
Debugging and prompt enhancements:
|
|
- $PS4 can contain %i for $LINENO as well as %N for script or function
|
|
names (default PS4 changed), also %_ for current shell structure
|
|
executing;
|
|
- Prompt truncation %<...< is now more flexible: it applies to a
|
|
whole section of the prompt, not just one escape. You need to put
|
|
%<< after the truncated escape to get the old behaviour.
|
|
- %20(l.yes.no) in prompts prints yes if at least 20 characters have
|
|
been output, else no (e.g. for outputting extra newlines).
|
|
|
|
Parameter and expansion changes
|
|
- `typeset -t MYPATH mypath' creates tied path/PATH-like variables
|
|
- `typeset -g' allows operations on parameters without making them local
|
|
- New expansions
|
|
- ${(t)param} prints type information for $param
|
|
- ${(P)param} treats value of $param as the name of a param to
|
|
substitute
|
|
- ${foo:q} can quote replaced parameter text from expansion
|
|
- ${foo/old/new} substitution, like bash; also (S) flag for shortest
|
|
match
|
|
- $foo[(b.2.i)bar] starts searching $foo for bar starting at 2nd match
|
|
|
|
Builtin and function changes
|
|
- stat module: `stat -H hash foo' gives you e.g. $hash[mtime]
|
|
- `autoload -U' autoloads functions without alias expansion.
|
|
|
|
Other new options:
|
|
- LOCAL_TRAPS allows signal traps to be local to functions (as in ksh).
|
|
- NO_RCS can now be turned on at any point in initialization files.
|
|
- NO_GLOBAL_RCS can force /etc/z* files after /etc/zshenv to be skipped.
|
|
(Please don't use this as an excuse to stuff more into /etc/zshenv!)
|
|
- Existing MAGIC_EQUAL_SUBST option is more useful; any argument containing
|
|
...=~...:~... will perform filename expansion on the ~ (previously,
|
|
the string before `=' had to look like a parameter name).
|
|
|
|
Configuration changes:
|
|
- Generation of signal names should be more reliable
|
|
- Customizable installation of shell functions from distribution.
|
|
|
|
|
|
New features in zsh version 3.0.6
|
|
---------------------------------
|
|
|
|
Most of these changes are designed to improve compatibility with zsh
|
|
version 3.1.6, the latest development release. However, this release also
|
|
fixes all known Year 2000 (Y2K) bugs in zsh 3.0.
|
|
|
|
History changes:
|
|
- whitespace between words is ignored in history searches.
|
|
- new option HIST_REDUCE_BLANKS removes extra whitespace in the stored
|
|
history.
|
|
- support for reading (but not writing) version 3.1.6 history files.
|
|
|
|
Globbing changes:
|
|
- the a, c, and m glob qualifiers can now test time in seconds.
|
|
- globbing of number ranges behaves more like character ranges in that
|
|
it can match a prefix of a number, e.g. `<1-5>*' matches 1, 2, 3, 4,
|
|
5, 17, 23skiddoo, 5986, etc., but not 6, 7, 8ball, 911, etc.
|
|
|
|
Parameter and expansion changes:
|
|
- expansion of ~ and other globbing flags via ${~param} do not depend
|
|
upon EXTENDED_GLOB (bug fix).
|
|
- nested parameter substitutions require braces (this was always the
|
|
documented behaviour, but previous parsers didn't enforce it).
|
|
- quote only nested expansion, e.g. ${(f)"$(<file)"} reads complete
|
|
`file', then splits lines into array.
|
|
|
|
Builtin and function changes:
|
|
- `typeset -U' works on the colon-array version of linked parameters.
|
|
- `typeset +f' and `functions +' output the names (only) of functions.
|
|
- `emulate -L' has the effect of `setopt localoptions'.
|
|
- in fn1() { local foo; unset foo; foo=bar; }, foo is restored at local
|
|
level, whereas if the `unset foo' appeared in a nested function it
|
|
would have been restored at global level, which was presumably wrong.
|
|
- `foo=bar >&file' is a redirection, not a NULLCMD.
|
|
- any single complex command, such as `case ... esac', parses as if
|
|
semicolon-terminated (bug fix).
|
|
- the shell function `preexec', if defined, is run after parsing each
|
|
command line but before executing the command.
|
|
|
|
Other changes:
|
|
- the option PRINT_EIGHT_BIT causes zsh to emit raw bytes in prompts
|
|
and completion lists even if the system ctype(3) package says that
|
|
those bytes are not "printable."
|
|
|
|
Debugging enhancements:
|
|
- LINENO is now very much more useful in scripts and functions and is
|
|
reported correctly in most error messages.
|
|
- ERREXIT behaviour is now consistent with newer Bourne-like shells,
|
|
e.g. with respect to `if' tests that fail.
|
|
|
|
Configuration changes:
|
|
- Large file and 64-bit integers on 32-bit machines supported where
|
|
provided by OS.
|
|
- a few more system features, such as getpwnam/getpwuid, are tested for.
|
|
|
|
|
|
New features in zsh version 3.1 (beta version)
|
|
----------------------------------------------
|
|
|
|
On most operating systems zsh can load binary modules dynamically at
|
|
run-time. ZLE and the compctl builtin are now reside in a separate
|
|
module which is loaded automatically on demand.
|
|
|
|
for ((expr; expr; expr)) do ... done loop syntax from AT&T ksh93 is
|
|
now supported.
|
|
|
|
POSIX globbing character classes ([:alnum:] etc.) are now supported.
|
|
|
|
ksh's case fall-through feature (;&) is supported.
|
|
|
|
ksh93's $'' quoting syntax is supported.
|
|
|
|
Restricted mode is now supported. This is controlled by the new option
|
|
RESTRICTED (-r).
|
|
|
|
New options BARE_GLOB_QUAL, HIST_NO_FUNCTIONS (alias NO_LOG), KSH_GLOB,
|
|
PRINT_EIGHT_BIT, PROMPT_BANG, PROMPT_PERCENT, RM_STAR_WAIT.
|
|
|
|
Options ALWAYS_LAST_PROMPT, APPEND_HISTORY, AUTO_LIST, AUTO_MENU,
|
|
AUTO_PARAM_KEYS, AUTO_PARAM_SLASH, AUTO_REMOVE_SLASH, LIST_AMBIGUOUS
|
|
and LIST_TYPES are now on by default.
|
|
|
|
In ZLE, arbitrarily many keymaps can be defined. Multi-character
|
|
keybindings now work.
|
|
|
|
Completion can be performed within a brace expansion.
|
|
|
|
EMACS-like universal-argument function.
|
|
|
|
|
|
New features in zsh version 3.0
|
|
-------------------------------
|
|
|
|
Trailing "/" in a glob pattern now works like in other shell thus it
|
|
can no longer be used as a shorthand for "(/)".
|
|
|
|
Much improved sh/ksh emulation. When zsh is invoked as sh it mostly
|
|
conforms to POSIX 1003.2.
|
|
|
|
Enhanced parameter expansion features: new flags: A, @, e, W, p, f, F.
|
|
Expansions can be nested. For example,
|
|
"${${(M)${(f@)$(<builtin.pro)}:#char*}[2][(w)3]}" expands to the third
|
|
word of the second line of builtin.pro which begins with char. See
|
|
zshexpn(1) for the details.
|
|
|
|
***/foo glob does recursive directory search following symbolic links.
|
|
|
|
Traps defined by the trap builtin are now executed in the current shell
|
|
environment and not as a shell function. This means that $1 is not set
|
|
to the signal number. Of course the TRAPxxx functions continue working
|
|
as before.
|
|
|
|
Traps defined by the trap builtin are reset to their default values in
|
|
subshells.
|
|
|
|
Option names can be prefixed by `no' to unset an option.
|
|
setopt no_option_name is the same as unsetopt option_name.
|
|
This change affects the output of the setopt and unsetopt
|
|
builtins when these are invoked without arguments. See
|
|
the zshoptions manual page for more explanation.
|
|
|
|
!, {, } and [[ are now reserved words. Things like [[-z $foo]] or {foo}
|
|
should not be used. {foo} still works if the IGNORE_BRACES option is not
|
|
set but this feature may be removed in the future. [[ -z $foo ]] and
|
|
{ foo } should be used instead.
|
|
|
|
HOSTTYPE special parameter is removed. The new OSTYPE, MACHTYPE and
|
|
VENDOR parameters should be used instead.
|
|
|
|
VERSION parameter is renamed to ZSH_VERSION
|
|
|
|
exec now saves the history in interactive shells. If you do not like this
|
|
behaviour you can alias exec to 'unset HISTFILE ; exec'.
|
|
|
|
${~spec}, ${=spec} and ${^spec} used to toggle the effect of
|
|
globsubst/shwordsplit/rcexpandparam. Now these force the corresponding
|
|
option on. ~, = or ^ can be doubled to force the relevant option off for
|
|
the substitution.
|
|
|
|
Explicitly requested word splitting like ${=spec} or ${(s:delim:)spec}
|
|
will be executed even if the substitution is double quoted.
|
|
|
|
The right-hand side of assignments are no longer globbed by default hence
|
|
assignment foo=* will assign '*' as a value of foo. Use the foo=( * )
|
|
array assignment syntax to get the old behaviour. Alternatively the
|
|
GLOB_ASSIGN can be set to emulate the old behaviour but the usage of this
|
|
option is strongly discouraged and this option may be completely removed in
|
|
the future.
|
|
|
|
foo=$bar no longer creates an array even if bar is an array. Use
|
|
foo=( $bar ) or even better, foo=( "$bar[@]" ) instead.
|
|
|
|
When foo is an array parameter ${#foo} will always return the length of the
|
|
array even if the substitution is double quoted. ${(c)#foo} should be used
|
|
to get back the old behaviour.
|
|
|
|
When the prompt_subst option is set prompts are fully expanded using
|
|
parameter expansion, command substitution and arithmetic expansion.
|
|
In 2.5 backquote substitution was not performed in the prompts so this
|
|
change might cause problems in some startup scripts if ` is used literally
|
|
in prompts.
|
|
|
|
History substitution is now not performed if the history escape character
|
|
appears in a single-quoted string. This may break some interactive shell
|
|
functions which use \! in single-quoted strings.
|
|
|
|
The UID, EUID, GID, EGID parameters can be assigned now. The assignment
|
|
executes the setuid(), seteuid(), setgid(), setegid() respectively. On
|
|
systems where setuid and seteuid is not supported these functions are
|
|
emulated using setreuid or setresuid which may result in a different
|
|
behaviour.
|
|
|
|
Assigning the USERNAME parameter will call setuid(uid) where uid is the
|
|
user id of the specified user.
|
|
|
|
The privileged (-p) option is automatically set on invocation if euid != uid
|
|
or egid != gid. If this option is set no user startup files are sourced.
|
|
The shell will drop privileges when this option is unset by resetting its
|
|
euid to uid and its egid to gid.
|
|
|
|
The =number substitution for accessing the directory stack is changed to
|
|
~number to allow =command substitution when a command name begins with a
|
|
digit.
|
|
|
|
<> is a redirection operator which opens the standard input for both
|
|
reading and writing. To match a number use <->.
|
|
|
|
Option letters -1 and -C for PRINT_EXIT_VALUE and NO_CLOBBER are swapped:
|
|
`set -C' sets NO_CLOBBER and `set -1' sets PRINT_EXIT_VALUE.
|
|
|
|
AUTO_PUSHD behaviour is changed. Now cd without arguments will always go
|
|
to the $HOME directory even if AUTO_PUSHD is set and PUSHD_TO_HOME is not
|
|
set. If you preferred the old behaviour you can alias cd to pushd.
|
|
|
|
IFS word splitting with SH_WORD_SPLIT and the splitting of the input in the
|
|
read builtin has changed in cases when IFS contains characters other than
|
|
<space>, <tab>, <newline>. See the description of IFS in the zshparam
|
|
manual page for more details.
|
|
|
|
|
|
New features in zsh version 2.5
|
|
-------------------------------
|
|
|
|
Greatly expanded completion possibilities. Programmable completion
|
|
allows detailed control over what arguments of what commands can be
|
|
completed to what. See dots/zcomp in the distribution for examples.
|
|
|
|
Expand filenames with ~ and = on the right hand side of parameter
|
|
assignments. New option MAGIC_EQUAL_SUBST to do it in all
|
|
identifier=expression arguments.
|
|
|
|
${+name} becomes 1 or 0 if name is set or unset. ${~spec} toggles
|
|
GLOB_SUBST in substitution. Parameter substitution takes lots
|
|
of flags in the format ${(flags)name}.
|
|
|
|
New glob qualifiers for block/character special files, times in glob
|
|
qualifiers can be in months, weeks, days, hours, minutes. Qualifiers can
|
|
work on links or on what they point to. Qualifiers separated by commas
|
|
are or-ed.
|
|
|
|
New parameter substitution modifiers (fFwW) to repeat actions. New
|
|
option CSH_JUNKIE_HISTORY.
|
|
|
|
New line editor functions history-beginning-search-backward,
|
|
history-beginning-search-forward, expand-or-complete-prefix, push-input,
|
|
push-line-or-edit.
|
|
|
|
Assign to part of a string, use qualifiers on string subscription with
|
|
$foo[(qual)2,5]
|
|
|
|
New parameters: EGID, EUID, KEYTIMEOUT
|
|
|
|
New prompt escape sequence %_ to get constructs like for and while in
|
|
the secondary prompt. %E in prompt clears to end of screen.
|
|
|
|
Conditional expressions in PROMPT and WATCHFMT.
|
|
|
|
New options ALWAYS_LAST_PROMPT, ALWAYS_TO_END, AUTO_PARAM_KEYS,
|
|
COMPLETE_ALIASES, COMPLETE_IN_WORD, CSH_JUNKIE_HISTORY, GLOB_SUBST,
|
|
LIST_AMBIGUOUS, MAGIC_EQUAL_SUBST, NO_FLOW_CONTROL, PROMPT_SUBST
|
|
|
|
New option -m to many builtins makes arguments subject to pattern
|
|
matching.
|
|
|
|
Bindkey can now bind both key sequences and prefixes of those. You can
|
|
for example bind ESC and function keys sending ESC sequences.
|
|
|
|
Additional options to read builtin to use in functions called by
|
|
completion.
|
|
|
|
New options to print to sort arguments and print them in columns.
|
|
|
|
Some additional resource limits can be specified.
|
|
|
|
Some editor functions now work in the minibuffer.
|