mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-22 16:20:23 +02:00
346 lines
14 KiB
Text
346 lines
14 KiB
Text
-------------------------------------
|
|
CHANGES FROM PREVIOUS VERSIONS OF ZSH
|
|
-------------------------------------
|
|
|
|
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 behavior, 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 behavior 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 sorthand 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.
|