mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
356 lines
16 KiB
Groff
356 lines
16 KiB
Groff
This file describes changes made during the 4.3 series of releases;
|
|
it is superseded by the description of changes between 4.2 and 5.0
|
|
in the main NEWS file.
|
|
|
|
|
|
Changes since 4.3.15
|
|
--------------------
|
|
|
|
The option HASH_EXECUTABLES_ONLY has been added. When this is set,
|
|
directories in the command path will be checked for executables before
|
|
they are added to the command table (hash); otherwise, all files in the
|
|
directory are added. The effect of this option was present in 4.3.15,
|
|
which could cause significant delays when hashing on systems with
|
|
network directories in the path.
|
|
|
|
Changes since 4.3.12
|
|
--------------------
|
|
|
|
There are no significant feature changes to the shell itself, although
|
|
many bug fixes and improvements to functions.
|
|
|
|
Changes since 4.3.11
|
|
--------------------
|
|
|
|
The zsh/parameter module has a new readonly associative array
|
|
$usergroups whose keys are the names of system groups of which the
|
|
current user is a member and whose values are the corresponding
|
|
group identifiers.
|
|
|
|
The region_highlight array, which controls highlighting of the
|
|
command line from zle widgets, is now updated dynamically as
|
|
the command line is edited.
|
|
|
|
In POSIX emulation ("emulate sh") the shell is more accurate about
|
|
when it should or should not exit on errors.
|
|
|
|
The ${NAME:OFFSET:LENGTH} syntax now supports negative LENGTH, which
|
|
counts back from the end of the string.
|
|
|
|
The (g:opts:) flag in parameter expansion processes escape sequences like
|
|
the echo and print builtins. opts can be any combination of o, e and c.
|
|
With e, acts like print rather than echo except for octal escapes which
|
|
are controlled separately by the o option. With c, interpret control
|
|
sequences like "^X" as bindkey does. Regardless of the opts, \c is not
|
|
interpreted.
|
|
|
|
Changes between versions 4.3.10 and 4.3.11
|
|
------------------------------------------
|
|
|
|
When the shell is invoked with the base name of a script, for example as
|
|
`zsh scriptname', previous versions of zsh have used the name directly,
|
|
whereas other shells use the value of $PATH to find the script. The
|
|
option PATH_SCRIPT has been added to provide the alternative behaviour.
|
|
This is turned on where appropriate in compatibility modes.
|
|
|
|
Parameters, globbing, etc.
|
|
-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
Parameter expansion has been enhanced to provide the ${NAME:OFFSET} and
|
|
${NAME:OFFSET:LENGTH} syntax for substrings and subarrays present in
|
|
several other shells. OFFSET always uses zero-based indexing. The only
|
|
clash with existing zsh syntax occurs if OFFSET begins with an
|
|
alphabetic character or `&', which is not likely.
|
|
|
|
The (D) flag in parameter expansion abbreviates directories in the
|
|
substituted value. The (q-) flag does minimal shell quotation of arguments
|
|
for maximum human readability of the result.
|
|
|
|
The (Z) flag in parameter expansion is an enhanced version of the (z)
|
|
flag that takes an argument indicating how the string to be split
|
|
is treated. (Z:c:) parses comments as strings; (Z:C:) parses comments
|
|
and strips them; (Z:n:) treats newlines as ordinary whitespace: (z)
|
|
has always treated unquoted newlines as shell delimiters and turned them
|
|
into semicolons, though this was not previously documented.
|
|
|
|
Numeric expansion with braces has been extended so that a step may be
|
|
given, as in {3..9..2}. The step may be negative as may the start and
|
|
end of the range (this is also new).
|
|
|
|
The glob qualifier P can be used to add a separate word before each
|
|
match. For example, *(P:-f:) produces the command line
|
|
`-f file1 -f file2 ...'.
|
|
|
|
Regular expression matches now use the same variables for storing matched
|
|
components as shell pattern matching. The function system now provides the
|
|
function regexp-replace for replacing text using regular expressions. The
|
|
zle widget functions replace-string, replace-string-again, if defined with
|
|
regex in the name (e.g. "zle -N replace-regexp replace-string"), perform
|
|
regular expression matches. In replacement text \& and \1 have the
|
|
standard meaning.
|
|
|
|
Line editor and completion
|
|
-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
The completion system now has a style path-completion. Setting this to
|
|
false inhibits completion of paths before the current path component,
|
|
e.g. /u/b/z no longer completes to /usr/bin/zsh. This is useful on systems
|
|
where this form of completion is pathologically slow due to network
|
|
performance.
|
|
|
|
With the MULTIBYTE option, the line editor now highlights bytes in the
|
|
input that are not part of a valid character in the current locale in hex
|
|
as <XX> for hex digits X; highlighting is controlled by the "special"
|
|
keyword in the zle_highlight array. These can be distinguished from
|
|
unprintable Unicode characters which also use "special" highlighting as the
|
|
latter are always two or four bytes long, e.g. <XXXX>, <XXXXXXXX>.
|
|
|
|
zle_highlight also controls highlighting of a removable completion
|
|
suffix, e.g. the "/" automatically appended to directories. This uses
|
|
the keyword "suffix".
|
|
|
|
The line editor now sets the variable ZLE_LINE_ABORTED if there is
|
|
an error when editing the line. The following code can be used
|
|
to create a bindable editor widget to restore the aborted line:
|
|
recover-line() { LBUFFER=$ZLE_LINE_ABORTED RBUFFER=; }
|
|
zle -N recover-line
|
|
and then either bind recover-line to a key sequence or use
|
|
`M-x recover-line <RET>'.
|
|
|
|
The parameter ZLE_STATE, available in user-defined line editor widgets,
|
|
gives information on the state of the line editor. Currently this is
|
|
whether the line editor is in insert or overwrite mode.
|
|
|
|
Miscellaneous options
|
|
-+-+-+-+-+-+-+-+-+-+-
|
|
|
|
The new shell option HIST_LEX_WORDS causes history lines read in from
|
|
a file to be split in the same way as normal shell lines, instead of
|
|
simply on whitespace. It's an option as although the result is more
|
|
accurate it can take a long time when the history size is large.
|
|
|
|
The shell option MONITOR can be set in non-interactive shells, and also in
|
|
subshells (as created by surrounding commands with parentheses), turning on
|
|
job control for that subshell. The initial behaviour of a subshell is
|
|
still to turn job control off, however if the new POSIX_JOBS option is set
|
|
MONITOR remains active in subshells.
|
|
|
|
The new shell option POSIX_CD, active in emulations of POSIX-based shells,
|
|
makes the cd builtin POSIX-compatible.
|
|
|
|
The POSIX_JOBS option already referred to has various other
|
|
compatibility enchancements.
|
|
|
|
The new shell option POSIX_STRINGS makes a null character in $'...'
|
|
expansion terminate the string, as is already the case in bash. This is
|
|
not particularly useful behaviour but may become a POSIX requirement.
|
|
|
|
The new shell option POSIX_TRAPS causes the EXIT trap to behave in the same
|
|
way as in other shells, i.e. it is only run when the shell exits.
|
|
|
|
The new shell option SOURCE_TRACE causes the shell to report files
|
|
containing shell code that the shell executes directly, i.e. startup files
|
|
or files run with the `source' or `.' builtins.
|
|
|
|
The shell option SUN_KEYBOARD_HACK has been supplemented by a more general
|
|
mechanism: the KEYBOARD_HACK variable defines the character to be ignored.
|
|
|
|
Add-on modules and function
|
|
-+-+-+-+-+-+-+-+-+-+-+-+-+-
|
|
|
|
The module zsh/system has a new "zsystem" builtin whose subcommands perform
|
|
system level tasks. Currently "zsystem flock" performs advisory file
|
|
locking (for aficionados, this uses the fcntl() system call so works over
|
|
the network on Linux). This is a particularly convenient way of locking
|
|
files for the length of a subshell. "zsystem supports flock" provides a
|
|
test for this feature.
|
|
|
|
There is now a function system for recording and restoring recently
|
|
entered directories in a persistent fashion, with support in completion
|
|
and (if explicitly installed) dynamic directory expansion. See the
|
|
entry for cdr in the zshcontrib manual page.
|
|
|
|
|
|
Changes between versions 4.3.9 and 4.3.10
|
|
-----------------------------------------
|
|
|
|
The command "emulate <mode> -c ..." evaluates an expression in a given
|
|
emulation. The emulation is sticky for functions defined within the
|
|
expression.
|
|
|
|
The variable CORRECT_IGNORE gives a pattern that can be ignored
|
|
in spelling correction. CORRECT_IGNORE='_*' ignores completion functions.
|
|
|
|
The option POSIX_ALIASES improves compatibility of aliases with other
|
|
shells.
|
|
|
|
The variable ZSH_PATCHLEVEL can be used to test for unreleased versions of
|
|
the shell; it is present but less useful in released versions.
|
|
|
|
The variables ZLE_REMOVE_SUFFIX_CHARS and ZLE_SPACE_SUFFIX_CHARS allow more
|
|
control over the way automatically removed suffixes are treated in
|
|
completion.
|
|
|
|
Major changes between versions 4.3.6 and 4.3.9
|
|
----------------------------------------------
|
|
|
|
The option COMBINING_CHARS has been added. When it is set, the
|
|
line editor assumes the terminal is capable of displaying zero-width
|
|
combining characters (typically accents) correctly as modifications
|
|
to the base character, and will act accordingly. Note it is not set
|
|
by default owing to vagaries of terminals. The system is reported
|
|
to work on MacOS, where this is particularly important as accented
|
|
characters in file names are stored in their decomposed form (i.e.
|
|
with base and combining characters).
|
|
|
|
The option HIST_FCNTL_LOCK has been added to provide locking of history
|
|
files using the system call fcntl(). On recent NFS implementations this
|
|
may provide better reliability.
|
|
|
|
The syntax ~[...] provides a dynamic form of directory naming,
|
|
supplementing the existing static ~name syntax. A user-defined shell
|
|
function, zsh_directory_name, is used to handle both expansion of names to
|
|
directories and contraction of directories to names.
|
|
|
|
Patterns can now be used in incremental searches with the new widgets
|
|
history-incremental-pattern-search-backward and
|
|
history-incremental-pattern-search-forward. These are not bound to
|
|
keys by default.
|
|
|
|
Highlighting and colouring of sections of the command line is now
|
|
supported, controlled by the array parameter zle_highlight and the ZLE
|
|
special parameter region_highlight.
|
|
|
|
Colouring of prompts is now supported within the shell by prompt
|
|
escapes. The prompt theme system has been updated.
|
|
|
|
Various changes have been added to make debugging of shell code easier:
|
|
- As noted in README, the option DEBUG_BEFORE_CMD is now set by default.
|
|
- In DEBUG traps, $ZSH_DEBUG_CMD gives the code for which the trap is
|
|
called as a string.
|
|
- "setopt ERR_EXIT" in a DEBUG trap causes the code not to be executed.
|
|
- $ZSH_SUBSHELL indicates the subshell level at which code is being
|
|
executed.
|
|
- The zsh/parameter module has various additional arrays similar to
|
|
the existing $funcstack and $functrace, namely $funcsourcetrace
|
|
and $funcfiletrace. The consistency and informativeness of
|
|
the output of all these arrays has been improved.
|
|
- Prompt escapes %x and %I show the source file and line number in
|
|
debug prompts (compare %N and %i which show names and line numbers
|
|
in the execution environment).
|
|
- The option NO_MULTI_FUNCDEF can turn off multiple definition of
|
|
functions at once, a rarely used feature that can cause problems
|
|
with misplaced "()".
|
|
- The "fc" builtin has been enhanced to make non-interactive use possible
|
|
and output consistent when the history is manipulated with "print -s".
|
|
|
|
The completion style accept-exact-dirs has been added. When true, this
|
|
suppresses attempts to complete non-final directory segments of a filename
|
|
path when the directory exists. (For example, /home/pws/src/zsh/<TAB>
|
|
discovers that /home/pws/src/zsh exists and leaves the directory component
|
|
alone, while /h/p/s/z/<TAB> completes to /home/pws/src/zsh/... as before.)
|
|
This should improve completion behaviour noticeably in special cases, such
|
|
as remote paths under Cygwin.
|
|
|
|
Major changes between versions 4.3.5 and 4.3.6
|
|
----------------------------------------------
|
|
|
|
cd, chdir, pushd and popd now take a -q option to suppress side effects
|
|
including printing the directory stack (for pushd and popd) and executing
|
|
the chpwd hook functions (for all four).
|
|
|
|
The parameter subscript (e) flag now forces the argument to be treated
|
|
as a string where it would previously have been treated as a pattern,
|
|
for example ${array[(ie)*]} substitutes the index of the element whose
|
|
value is "*".
|
|
|
|
Major changes between versions 4.3.4 and 4.3.5
|
|
----------------------------------------------
|
|
|
|
- The new extended globbing flag (#cN,M) behaves similarly to the extended
|
|
regular expression syntax {N,M}.
|
|
|
|
- The zsh/datetime module has been enhanced and a calendar function
|
|
system has been added along the lines of (but much enhanced from)
|
|
the traditional Unix "calendar" utility. This is still under
|
|
development. See the zshcalsys manual. (The calendar functions
|
|
were in 4.3.4 but were not listed in this file. There have been
|
|
significant enhancements since 4.3.4.)
|
|
|
|
- A new module zsh/curses provides a builtin zcurses for access to
|
|
to the curses screen manipulation package. See the entry for zsh/curses
|
|
in the zshmodules manual.
|
|
|
|
- The module system has been enhanced to support the notion of "features"
|
|
that give more control over which builtins, parameters, conditions
|
|
and math functions are loaded from a module. In particular,
|
|
"zmodload -F zsh/stat b:zstat" makes the builtin previously called
|
|
"stat" available as "zstat" (only) to avoid clashes with a system
|
|
command named "stat".
|
|
|
|
Major changes between versions 4.2 and 4.3.4
|
|
--------------------------------------------
|
|
|
|
- There is support for multibyte character sets. This is now reasonably
|
|
close to complete, although Unicode combining characters don't work
|
|
properly. See Multibyte Character Support in INSTALL.
|
|
|
|
- The shell can now run an installation function for a new user
|
|
(a user with no .zshrc, .zshenv, .zprofile or .zlogin file) without
|
|
any additional setting up by the administrator. See "THE ZSH/NEWUSER
|
|
MODULE" in the zshmodules manual page.
|
|
|
|
- The manual now has a Roadmap section (manual page zshroadmap) to
|
|
give new users an indication of the most interesting parts of the
|
|
manual.
|
|
|
|
- New option PROMPT_SP (on by default): works around the problem that the
|
|
line editor can overwrite output with no newline at the end. See the
|
|
zshoptions manual page.
|
|
|
|
- New option HIST_SAVE_BY_COPY (on by default): history is saved by
|
|
copying and renaming instead of directly overwriting. See the
|
|
zshoptions manual page.
|
|
|
|
- New redirection syntax e.g. {myfd}>file opens a new file descriptor
|
|
and stores the number in $myfd, so that >&$myfd will work. Chosen
|
|
not to break existing code (and to be compatible with proposals for the
|
|
Korn shell). See the section REDIRECTION in the zshmisc manual page.
|
|
|
|
- Substitutions of the form ${var:-"$@"}, ${var:+"$@"} and similar where
|
|
word-splitting is applied to the text after the :- or :+ (in particular,
|
|
where the SH_WORD_SPLIT option is in effect for compatibility) now
|
|
behave as in other Bourne- and POSIX-compatible shells when in the
|
|
appropriate emulation mode.
|
|
|
|
- New Posix-style zsh-specific tests [[:IDENT:]], [[:IFS:]],
|
|
[[:IFSSPACE:]], [[:WORD:]] test if character can appear in identifier,
|
|
is an IFS character, is an IFS whitespace character, or is considered
|
|
as part of a word (is alphanumeric or appears in $WORDCHARS). These
|
|
works correctly on multibyte characters if the appropriate support
|
|
is present. See the section FILENAME GENERATION in the zshexpn
|
|
manual page.
|
|
|
|
- Time comparisons on files when sorting or using test operators will
|
|
use high-resolution timestamps when available. This gives a
|
|
resolution of a nanosecond instead of a second.
|
|
|
|
- The idiom =(<<<...) is optimised so that the shell internally turns
|
|
the ... into the contents of a file whose name is then substituted.
|
|
The syntax has always been usable by means of the NULLCMD feature,
|
|
but previously it generated an intermediate process; it has now
|
|
been rewritten along the same lines as the optimisation for $(<...)
|
|
that inserts a file into the command line without the use of an
|
|
external programme.
|
|
|
|
- Supplied functions catch and throw provide limited support for
|
|
exception handling using the `{ ... } always { ... }' syntax.
|
|
See the section EXCEPTION HANDLING in the zshcontrib manual page.
|
|
|
|
- Signals now accept the SIG as part of the name for compatibility with
|
|
other shells.
|
|
|
|
- Editor function argument-base allows non-decimal arguments for
|
|
editor widgets. See the entry in the zshzle manual page.
|
|
|
|
- As always, there are many enhancements to completion functions.
|