1 -------------------------------------
2 CHANGES FROM PREVIOUS VERSIONS OF ZSH
3 -------------------------------------
5 Note also the list of incompatibilities in the README file.
7 Major changes between versions 4.3.6 and 4.3.9
8 ----------------------------------------------
10 The option COMBINING_CHARS has been added. When it is set, the
11 line editor assumes the terminal is capable of displaying zero-width
12 combining characters (typically accents) correctly as modifications
13 to the base character, and will act accordingly. Note it is not set
14 by default owing to vagaries of terminals. The system is reported
15 to work on MacOS, where this is particularly important as accented
16 characters in file names are stored in their decomposed form (i.e.
17 with base and combining characters).
19 The option HIST_FCNTL_LOCK has been added to provide locking of history
20 files using the system call fcntl(). On recent NFS implementations this
21 may provide better reliability.
23 The syntax ~[...] provides a dynamic form of directory naming,
24 supplementing the existing static ~name syntax. A user-defined shell
25 function, zsh_directory_name, is used to handle both expansion of names to
26 directories and contraction of directories to names.
28 Patterns can now be used in incremental searches with the new widgets
29 history-incremental-pattern-search-backward and
30 history-incremental-pattern-search-forward. These are not bound to
33 Highlighting and colouring of sections of the command line is now
34 supported, controlled by the array parameter zle_highlight and the ZLE
35 special parameter region_highlight.
37 Colouring of prompts is now supported within the shell by prompt
38 escapes. The prompt theme system has been updated.
40 Various changes have been added to make debugging of shell code easier:
41 - As noted in README, the option DEBUG_BEFORE_CMD is now set by default.
42 - In DEBUG traps, $ZSH_DEBUG_CMD gives the code for which the trap is
44 - "setopt ERR_EXIT" in a DEBUG trap causes the code not to be executed.
45 - $ZSH_SUBSHELL indicates the subshell level at which code is being
47 - The zsh/parameter module has various additional arrays similar to
48 the existing $funcstack and $functrace, namely $funcsourcetrace
49 and $funcfiletrace. The consistency and informativeness of
50 the output of all these arrays has been improved.
51 - Prompt escapes %x and %I show the source file and line number in
52 debug prompts (compare %N and %i which show names and line numbers
53 in the execution environment).
54 - The option NO_MULTI_FUNCDEF can turn off multiple definition of
55 functions at once, a rarely used feature that can cause problems
57 - The "fc" builtin has been enhanced to make non-interactive use possible
58 and output consistent when the history is manipulated with "print -s".
60 The completion style accept-exact-dirs has been added. When true, this
61 suppresses attempts to complete non-final directory segments of a filename
62 path when the directory exists. (For example, /home/pws/src/zsh/<TAB>
63 discovers that /home/pws/src/zsh exists and leaves the directory component
64 alone, while /h/p/s/z/<TAB> completes to /home/pws/src/zsh/... as before.)
65 This should improve completion behaviour noticeably in special cases, such
66 as remote paths under Cygwin.
68 Major changes between versions 4.3.5 and 4.3.6
69 ----------------------------------------------
71 cd, chdir, pushd and popd now take a -q option to suppress side effects
72 including printing the directory stack (for pushd and popd) and executing
73 the chpwd hook functions (for all four).
75 The parameter subscript (e) flag now forces the argument to be treated
76 as a string where it would previously have been treated as a pattern,
77 for example ${array[(ie)*]} substitutes the index of the element whose
80 Major changes between versions 4.3.4 and 4.3.5
81 ----------------------------------------------
83 - The new extended globbing flag (#cN,M) behaves similarly to the extended
84 regular expression syntax {N,M}.
86 - The zsh/datetime module has been enhanced and a calendar function
87 system has been added along the lines of (but much enhanced from)
88 the traditional Unix "calendar" utility. This is still under
89 development. See the zshcalsys manual. (The calendar functions
90 were in 4.3.4 but were not listed in this file. There have been
91 significant enhancements since 4.3.4.)
93 - A new module zsh/curses provides a builtin zcurses for access to
94 to the curses screen manipulation package. See the entry for zsh/curses
95 in the zshmodules manual.
97 - The module system has been enhanced to support the notion of "features"
98 that give more control over which builtins, parameters, conditions
99 and math functions are loaded from a module. In particular,
100 "zmodload -F zsh/stat b:zstat" makes the builtin previously called
101 "stat" available as "zstat" (only) to avoid clashes with a system
102 command named "stat".
104 Major changes between versions 4.2 and 4.3.4
105 --------------------------------------------
107 - There is support for multibyte character sets. This is now reasonably
108 close to complete, although Unicode combining characters don't work
109 properly. See Multibyte Character Support in INSTALL.
111 - The shell can now run an installation function for a new user
112 (a user with no .zshrc, .zshenv, .zprofile or .zlogin file) without
113 any additional setting up by the administrator. See "THE ZSH/NEWUSER
114 MODULE" in the zshmodules manual page.
116 - The manual now has a Roadmap section (manual page zshroadmap) to
117 give new users an indication of the most interesting parts of the
120 - New option PROMPT_SP (on by default): works around the problem that the
121 line editor can overwrite output with no newline at the end. See the
122 zshoptions manual page.
124 - New option HIST_SAVE_BY_COPY (on by default): history is saved by
125 copying and renaming instead of directly overwriting. See the
126 zshoptions manual page.
128 - New redirection syntax e.g. {myfd}>file opens a new file descriptor
129 and stores the number in $myfd, so that >&$myfd will work. Chosen
130 not to break existing code (and to be compatible with proposals for the
131 Korn shell). See the section REDIRECTION in the zshmisc manual page.
133 - Substitutions of the form ${var:-"$@"}, ${var:+"$@"} and similar where
134 word-splitting is applied to the text after the :- or :+ (in particular,
135 where the SH_WORD_SPLIT option is in effect for compatibility) now
136 behave as in other Bourne- and POSIX-compatible shells when in the
137 appropriate emulation mode.
139 - New Posix-style zsh-specific tests [[:IDENT:]], [[:IFS:]],
140 [[:IFSSPACE:]], [[:WORD:]] test if character can appear in identifier,
141 is an IFS character, is an IFS whitespace character, or is considered
142 as part of a word (is alphanumeric or appears in $WORDCHARS). These
143 works correctly on multibyte characters if the appropriate support
144 is present. See the section FILENAME GENERATION in the zshexpn
147 - Time comparisons on files when sorting or using test operators will
148 use high-resolution timestamps when available. This gives a
149 resolution of a nanosecond instead of a second.
151 - The idiom =(<<<...) is optimised so that the shell internally turns
152 the ... into the contents of a file whose name is then substituted.
153 The syntax has always been usable by means of the NULLCMD feature,
154 but previously it generated an intermediate process; it has now
155 been rewritten along the same lines as the optimisation for $(<...)
156 that inserts a file into the command line without the use of an
159 - Supplied functions catch and throw provide limited support for
160 exception handling using the `{ ... } always { ... }' syntax.
161 See the section EXCEPTION HANDLING in the zshcontrib manual page.
163 - Signals now accept the SIG as part of the name for compatibility with
166 - Editor function argument-base allows non-decimal arguments for
167 editor widgets. See the entry in the zshzle manual page.
169 - As always, there are many enhancements to completion functions.
171 Changes in 4.2 since version 4.2.0
172 ----------------------------------
174 - The autoload and related builtins take options -k and -z to indicate
175 ksh or zsh autoloading style for given functions, making it possible
178 - Assignments to associative arrays can use the i and r index flags.
180 assoc[(i)alpha*]=bravo
181 sets the value for the element whose key matches the pattern `alpha*';
182 assoc[(r)activ*]=passive
183 sets the value for the element whose current value matches the pattern
186 - The glob qualifier F indicates a non-empty directory. Hence *(F)
187 indicates all subdirectories with entries, *(/^F) means all
188 subdirectories with no entries.
190 - fc -p and fc -P provide push/pop for the status of the shell's
191 history (both internal and using the history file). With automatic
192 scoping (fc -ap) it becomes easy to use a temporary history in a
193 function. This has been added to the calculator function zcalc to make
194 its internal history work more seamlessly.
196 - A new `try block' and `always block' syntax has been introduced
197 to make it easier to ensure the shell runs important tidy-up code
198 in the event of an error. It also runs after a break, continue, or
199 return, including a return forced by the ERR_RETURN option
200 (but not an exit, which is immediate). The syntax is:
201 `{' try-block-list `}' `always' `{' always-block-list `}'
202 where no newline or semicolon may appear between `}' and `always'.
203 This is compatible with all previous valid zsh syntax as an `always'
204 at that point used to be a syntax error. For example,
205 { echo Code run in current shell } always { echo Tidy-up code }
207 - A new zle widget reset-prompt has been added to re-expand the current
208 prompt. Changes to the variable in use as well as changes in its
209 expansions are both taken into account. The same effect is now forced by
210 a job change notification, making the %j prompt escape and %(j..) ternary
211 expression more useful.
213 - The zftp module supports ports following the hostname in the normal suffix
214 notation, `host:port'. This requires IPv6 colon-style addresses to be
215 specified in suitably quoted square brackets, for example:
217 zftp open '[f000::baaa]'
218 zftp open '[f000::baaa]:ftp'
220 (the two are equivalent).
222 - Special traps, those that don't correspond to signals, i.e. ZERR, DEBUG
223 and EXIT are no longer executed inside other traps. This caused
224 unnecessary confusion if, for example, both DEBUG and EXIT traps
225 were set. The new behaviour is more compatible with other shells.
227 - New option TRAPS_ASYNC which if set allows traps to run while the
228 shell is waiting for a child process. This is the traditional zsh
229 behaviour; POSIX requires the option to be unset. In sh/ksh
230 compatibility mode the option is turned off by default and the option
231 letter -T turns it on, for compatibility with FreeBSD sh.
233 - New WIDGETSTYLE, WIDGETFUNC parameters in ZLE.
235 - Glob qualifier (+func) is shorthand for (e:func:) (calls a command,
236 typically a shell function, with no argument).
238 New features between zsh versions 4.0 and 4.2
239 ---------------------------------------------
242 - upgraded to use autoconf post-2.50
243 - improved compatibility with other shells through shell options,
244 builtin arguments and improved builtin option parsing
248 - `+=' to append to parameters which works for scalars, arrays and (with
249 pairs) associative arrays.
250 - enhanced multiple parameter `for' loops:
251 for key value in key1 value1 key2 value2 ...
252 maintaining full compatibility with POSIX syntax.
253 - Suffix aliases allow the shell to run a command on a file by suffix,
254 e.g `alias -s ps=gv' makes `foo.ps' execute `gv foo.ps'. Supplied
255 function zsh-mime-setup uses existing mailcap and mime.types files
256 to set up suitable aliases. Supplied function pick-web-browser is
257 suitable for finding a browser to show .html etc. files by suffix alias.
258 - new option `no_case_glob' for case-insensitive globbing.
260 Add-on modules and functions:
261 - zsh/datetime modules makes date formatting and seconds since EPOCH
262 available inside the shell.
263 - zsh/net/tcp module provides builtin interface to TCP through ztcp
264 builtin. Function suite for interactive and script use with expect-style
266 - zsh/net/socket module provides zsocket builtin.
267 - zcalc calculator function with full line editing.
268 - builtin interface to pcre library
269 - zsh/zselect module provides zselect builtin as interface to select
273 - general improvements to command and context support, low-level functions,
275 - in verbose mode, matches with the same description are grouped
276 - highly configurable completions for values of specific parameters,
277 specific redirections for specific commands
278 - support for bash completion functions (typically zsh native functions are
279 more powerful where available)
280 - New completions provided for (some of these may be in later 4.0
281 releases): valgrind, tidy, texinfo, infocmp, Java classes, larch, limit,
282 locale parameters, netcat, mysqldiff, mt, lsof, elinks, ant, debchange
283 (dch), email addresses, file system types, Perforce, xsltproc.
287 - special parameters $PREDISPLAY, $POSTDISPLAY available in function
288 widgets to configure uneditable text (for narrowing)
290 - supplied widgets read-from-minibuffer, replace-string use these features
291 (more intuitive prompting and argument reading than 4.0)
292 - access to killed text via $CUTBUFFER and $killring
293 - supplied highly configurable word widgets forward-word-match etc., can
294 set what constitutes a word interactively or in startup script
295 (implement bash-style behaviour, replacing previous bash-* word widgets)
296 - interface to incremental search via $LASTSEARCH
297 - better handling of keymaps in zle and widgets
298 - better support for output from user-defined widgets while zle is active
299 - tetris game which runs entirely in zle
300 - several other contributed widgets
302 Local internal improvements:
303 - disowned jobs are automatically restarted
304 - \u and \U print escapes for Unicode
305 - read -d <delimiter> allows a custom line ending.
307 - line numbers in error messages and $PS4 output are more consistent
308 - `=prog' expands only paths, no longer aliases for consistency
309 - job display in prompts; `jobs' command output can be piped
310 - prompts: new $RPROMPT2, %^, %j, %y, enhanced %{, %}, %_.
311 - rand48() function in zsh/mathfunc for better randomness in arithmetic
312 (if the corresponding math library function is present)
313 - $SECONDS parameter can be made floating point via `typeset -F SECONDS'
314 for better timing accuracy
315 - improvements to command line history mechanism
316 - job table is dynamically sized, preventing overflow (typically seen
317 previously in complex completions).
321 New features in zsh version 4.0.1
322 ---------------------------------
324 Compared with 3.1.9, there are mostly incremental improvements to
325 - the new completion system --- more functions, completers, styles...
327 - handling of signals and traps
328 - the configuration system, particularly for modules
329 - Cygwin support (now essentially complete)
330 - arithmetic evaluation
331 - the zpty (pseudoterminal handling) module
333 plus various bug fixes and compatibility improvements.
335 The alias modules (zle.so as an alias for zsh/zle.so, etc.) have been
336 removed; use `zmodload -A' to load modules under other names. This is
337 irrelevant if you are upgrading from 3.0.
339 Compared with the 3.0 series of releases (the last stable set), the most
340 significant of a large number of improvements in the shell are:
341 - Dynamically loadable modules with hierarchical naming system
342 - Shell functions as editor functions, with much additional builtin support
343 - Incredibly rich new completion system; just needs a single
344 initialization command to provide completion for all sorts of commands
347 - Lots of new features in parameter substitution and globbing; more
348 logical handling of nested parameter substitutions
349 - Rewritten pattern-matching (globbing) code supports approximate
350 and case-insensitive matching and backreferences
351 - Various custom modules for pty's, FTP, special parameters, etc.
352 - Rewrites of many internal parts of the code: execution code to
353 provide compilation to internal representation, pattern matching
354 - Floating point arithmetic and mathematical functions module
356 - Various new options for compatibility with this, that and the other
357 See the 3.1.x changes below for more detail.
359 New features in zsh version 3.1.8 and 3.1.9
360 -------------------------------------------
361 These are primarily bug-fix versions. There are only a few user-visible
363 - Array slices ${array[a,b]} with b < a now correctly have zero length.
365 New features in zsh version 3.1.7
366 ---------------------------------
367 Further enhancements to new completion system:
368 - Comprehensive context-sensitive configuration via `styles', which
369 can be set by the menu-driven front end in compinstall
370 - General mechanism for setting patterns to be ignored in a completion;
371 overriding of patterns to be matched for functions
372 - New completers: _prefix to complete word before cursor, _ignored
373 to complete using words so far ignored (like $fignore but more
374 powerful), _history to complete words from shell history
375 - Multiple use of completers with different options, similarly splitting
376 of different types of completion (`tags') so they are considered with
378 - Many more supplied completions for standard commands which work out of
379 the box, and better handling of command line options/arguments which
380 behave in the usual way
381 - $fpath now set up to use installed functions by default; functions
382 can be loaded just by `autoload -U compinit; compinit'
383 - Much improved handling of nested quoting and nested braces
384 - New LIST_PACKED and LIST_ROWS_FIRST completion options and corresponding
386 - compctl library separated out (frozen but still supported)
387 - User-friendly introduction available at zsh website
388 http://sunsite.auc.dk/zsh/
390 Additions to complist listing library (coloured completion and menu
392 - Listings can be shown page by page (are by default for new completion)
393 - Menu selection allows full up and down scrolling of long lists
395 Other editing features:
396 - new parameters $PENDING, $MARK, $BUFFERLINES
397 - Easy display of a prompt from within an editing widget
399 Code parsing, storing and execution:
400 - Completely new system of storing code internally, greatly optimised
401 - Much less memory for shell functions etc.
402 - Can compile shell functions to .zwc `wordcode' functions for fast
404 - Can create `digest' files of entire directories in .zwc format
407 - Floating point support added, similar to ksh93, `typeset -F' and
408 `typeset -E' declare floating point variables; usual C/Fortran-like
409 rules for integer/float conversion
410 - Mathematical library zsh/mathfunc contains all the standard mathematical
411 functions for use in arithmetical expressions
412 - Improved parsing of arithmetical expressions and better error messages
413 - Special parameters can be made local
414 - `typeset -h' hides specialness of parameters, either as parameter
415 attribute or when declaring new local variable
416 - Local parameters can now be exported as in other shells; new option
417 GLOBAL_EXPORTS on by default provides old behaviour that `typeset -x'
418 referred to global parameters.
419 - zsh/parameter module enhanced: now needed for new completion; parameters
420 provided have `-h' flag set so that they are hidden by `typeset', so
421 that existing functions don't need to be changed
422 - Quotes can be stripped from parameter values with ${(Q)...}, providing
423 reverse of ${(q...)...} facility
425 Globbing and pattern matching:
426 - Pattern matching rewritten for efficiency
427 - Supports `backreferences', i.e. extracting parenthesised chunks of
429 [[ $foo = (#b)(*/)[^/]* ]]
430 stores the part of $foo up to the last / in $match[1] and the indexes of
431 the match in $mbegin[1], $mend[1]. (#m) is also available to set $MATCH
432 to the entire match and corresponding $MBEGIN, $MEND: useful in
433 parameter substitutions like ${.../.../...}.
434 - (#s) and (#e) match start and end of pattern like ^ and $ in regular
435 expression, useful in complex expressions such as ((#s)|/)dirname((#e)|/)
436 and in parameter expressions.
438 - Depth-first/last listing of recursive glob lists
441 - `autoload -X' inside a function body instructs the shell to
442 bootstrap the function at that point
443 - `autoload +X fn' says load the function fn but don't execute it
444 - Prompt `themes' make customization of prompts easier
447 - New hierarchical naming scheme for modules; supplied modules go into
448 zsh subdirectory, so zle becomes zsh/zle etc.; aliases supplied for
449 compatibility for existing code, but the new format should be used in
451 - zmodload is more consistent between dynamically and statically linked
453 - zsh/zftp and its function suite support multiple sessions (zfsession
454 command); zftransfer allows transfer of files between two ftp sessions
455 with no local file; use styles for e.g. progress style; IPv6 supported;
456 recursive put `zfput -r' for uploads
457 - zsh/zpty module creates pseudoterminal and allows builtin `expect'-like
461 - Test suite, not yet complete (`make test')
462 - use of Linux task limits
463 - Many fixes including output redirection with `setopt xtrace' and
464 other redirection fixes; NIS+ problem.
465 - Better null-command behaviour in sh and csh emulation
466 - Internal memory usage optimisations
468 New features in zsh version 3.1.6 (beta version)
469 ------------------------------------------------
470 Note also the changes for 3.0.6, which include changes between 3.1.5. and
473 New completion system via shell functions; massive degree of
474 programmability and configurability:
475 - ready-made function suite to use, see zshcompsys(1)
476 - approximate completion and spelling correction via completion
477 - control over matching for case-independence, partial word completion, etc.
478 - menu selection: choose a completion by moving the cursor
479 - coloured completion lists
480 - completion of filenames in quotes is now more reliable; splitting
481 quoted strings into command arguments is also possible.
483 Other editing changes:
484 - enhancements to function/editing interface: new parameters, numeric
485 arguments, string argument passing, reading keys from widgets.
486 - the old history-search-{back,for}ward behaviour and bindings have
487 returned (up to minor details).
488 - BASH_AUTO_LIST option to show completion list only on second key press.
489 - the ZBEEP parameter gives a string to output instead of beeping,
490 allowing you to have a visual bell.
492 History changes: new options HIST_NO_FUNCTIONS, HIST_EXPIRE_DUPS_FIRST,
493 HIST_FIND_NO_DUPS, HIST_IGNORE_ALL_DUPS, INC_APPEND_HISTORY,
494 HIST_SAVE_NO_DUPS, SHARE_HISTORY, allow better control of when history is
495 read and written and how duplicates are handled. New format for history
498 Associative arrays plus enhanced parameter substitutions to retrieve keys
502 - Case-insensitive and approximate globbing.
503 - Ordering and indexing of globbing matches, e.g. *(om[1]) picks
504 most recently modified file.
505 - General file mode qualifier with chmod(1)-like syntax, e.g. *(f:u+wx:)
507 New loadable modules:
508 - zftp, plus associated function suite, for turning your zsh session
509 into an FTP session too
510 - parameter, for examining and altering shell hash tables via an
511 associative array interface.
512 - mapfile, for reading and writing external files via an associative
515 Debugging and prompt enhancements:
516 - $PS4 can contain %i for $LINENO as well as %N for script or function
517 names (default PS4 changed), also %_ for current shell structure
519 - Prompt truncation %<...< is now more flexible: it applies to a
520 whole section of the prompt, not just one escape. You need to put
521 %<< after the truncated escape to get the old behaviour.
522 - %20(l.yes.no) in prompts prints yes if at least 20 characters have
523 been output, else no (e.g. for outputting extra newlines).
525 Parameter and expansion changes
526 - `typeset -t MYPATH mypath' creates tied path/PATH-like variables
527 - `typeset -g' allows operations on parameters without making them local
529 - ${(t)param} prints type information for $param
530 - ${(P)param} treats value of $param as the name of a param to
532 - ${foo:q} can quote replaced parameter text from expansion
533 - ${foo/old/new} substitution, like bash; also (S) flag for shortest
535 - $foo[(b.2.i)bar] starts searching $foo for bar starting at 2nd match
537 Builtin and function changes
538 - stat module: `stat -H hash foo' gives you e.g. $hash[mtime]
539 - `autoload -U' autoloads functions without alias expansion.
542 - LOCAL_TRAPS allows signal traps to be local to functions (as in ksh).
543 - NO_RCS can now be turned on at any point in initialization files.
544 - NO_GLOBAL_RCS can force /etc/z* files after /etc/zshenv to be skipped.
545 (Please don't use this as an excuse to stuff more into /etc/zshenv!)
546 - Existing MAGIC_EQUAL_SUBST option is more useful; any argument containing
547 ...=~...:~... will perform filename expansion on the ~ (previously,
548 the string before `=' had to look like a parameter name).
550 Configuration changes:
551 - Generation of signal names should be more reliable
552 - Customizable installation of shell functions from distribution.
554 New features in zsh version 3.0.6
555 ---------------------------------
557 Most of these changes are designed to improve compatibility with zsh
558 version 3.1.6, the latest development release. However, this release also
559 fixes all known Year 2000 (Y2K) bugs in zsh 3.0.
562 - whitespace between words is ignored in history searches.
563 - new option HIST_REDUCE_BLANKS removes extra whitespace in the stored
565 - support for reading (but not writing) version 3.1.6 history files.
568 - the a, c, and m glob qualifiers can now test time in seconds.
569 - globbing of number ranges behaves more like character ranges in that
570 it can match a prefix of a number, e.g. `<1-5>*' matches 1, 2, 3, 4,
571 5, 17, 23skiddoo, 5986, etc., but not 6, 7, 8ball, 911, etc.
573 Parameter and expansion changes:
574 - expansion of ~ and other globbing flags via ${~param} do not depend
575 upon EXTENDED_GLOB (bug fix).
576 - nested parameter substitutions require braces (this was always the
577 documented behavior, but previous parsers didn't enforce it).
578 - quote only nested expansion, e.g. ${(f)"$(<file)"} reads complete
579 `file', then splits lines into array.
581 Builtin and function changes:
582 - `typeset -U' works on the colon-array version of linked parameters.
583 - `typeset +f' and `functions +' output the names (only) of functions.
584 - `emulate -L' has the effect of `setopt localoptions'.
585 - in fn1() { local foo; unset foo; foo=bar; }, foo is restored at local
586 level, whereas if the `unset foo' appeared in a nested function it
587 would have been restored at global level, which was presumably wrong.
588 - `foo=bar >&file' is a redirection, not a NULLCMD.
589 - any single complex command, such as `case ... esac', parses as if
590 semicolon-terminated (bug fix).
591 - the shell function `preexec', if defined, is run after parsing each
592 command line but before executing the command.
595 - the option PRINT_EIGHT_BIT causes zsh to emit raw bytes in prompts
596 and completion lists even if the system ctype(3) package says that
597 those bytes are not "printable."
599 Debugging enhancements:
600 - LINENO is now very much more useful in scripts and functions and is
601 reported correctly in most error messages.
602 - ERREXIT behavior is now consistent with newer Bourne-like shells,
603 e.g. with respect to `if' tests that fail.
605 Configuration changes:
606 - Large file and 64-bit integers on 32-bit machines supported where
608 - a few more system features, such as getpwnam/getpwuid, are tested for.
611 New features in zsh version 3.1 (beta version)
612 ----------------------------------------------
614 On most operating systems zsh can load binary modules dynamically at
615 run-time. ZLE and the compctl builtin are now reside in a separate
616 module which is loaded automatically on demand.
618 for ((expr; expr; expr)) do ... done loop syntax from AT&T ksh93 is
621 POSIX globbing character classes ([:alnum:] etc.) are now supported.
623 ksh's case fall-through feature (;&) is supported.
625 ksh93's $'' quoting syntax is supported.
627 Restricted mode is now supported. This is controlled by the new option
630 New options BARE_GLOB_QUAL, HIST_NO_FUNCTIONS (alias NO_LOG), KSH_GLOB,
631 PRINT_EIGHT_BIT, PROMPT_BANG, PROMPT_PERCENT, RM_STAR_WAIT.
633 Options ALWAYS_LAST_PROMPT, APPEND_HISTORY, AUTO_LIST, AUTO_MENU,
634 AUTO_PARAM_KEYS, AUTO_PARAM_SLASH, AUTO_REMOVE_SLASH, LIST_AMBIGUOUS
635 and LIST_TYPES are now on by default.
637 In ZLE, arbitrarily many keymaps can be defined. Multi-character
638 keybindings now work.
640 Completion can be performed within a brace expansion.
642 EMACS-like universal-argument function.
645 New features in zsh version 3.0
646 -------------------------------
648 Trailing "/" in a glob pattern now works like in other shell thus it
649 can no longer be used as a shorthand for "(/)".
651 Much improved sh/ksh emulation. When zsh is invoked as sh it mostly
652 conforms to POSIX 1003.2.
654 Enhanced parameter expansion features: new flags: A, @, e, W, p, f, F.
655 Expansions can be nested. For example,
656 "${${(M)${(f@)$(<builtin.pro)}:#char*}[2][(w)3]}" expands to the third
657 word of the second line of builtin.pro which begins with char. See
658 zshexpn(1) for the details.
660 ***/foo glob does recursive directory search following symbolic links.
662 Traps defined by the trap builtin are now executed in the current shell
663 environment and not as a shell function. This means that $1 is not set
664 to the signal number. Of course the TRAPxxx functions continue working
667 Traps defined by the trap builtin are reset to their default values in
670 Option names can be prefixed by `no' to unset an option.
671 setopt no_option_name is the same as unsetopt option_name.
672 This change affects the output of the setopt and unsetopt
673 builtins when these are invoked without arguments. See
674 the zshoptions manual page for more explanation.
676 !, {, } and [[ are now reserved words. Things like [[-z $foo]] or {foo}
677 should not be used. {foo} still works if the IGNORE_BRACES option is not
678 set but this feature may be removed in the future. [[ -z $foo ]] and
679 { foo } should be used instead.
681 HOSTTYPE special parameter is removed. The new OSTYPE, MACHTYPE and
682 VENDOR parameters should be used instead.
684 VERSION parameter is renamed to ZSH_VERSION
686 exec now saves the history in interactive shells. If you do not like this
687 behaviour you can alias exec to 'unset HISTFILE ; exec'.
689 ${~spec}, ${=spec} and ${^spec} used to toggle the effect of
690 globsubst/shwordsplit/rcexpandparam. Now these force the corresponding
691 option on. ~, = or ^ can be doubled to force the relevant option off for
694 Explicitly requested word splitting like ${=spec} or ${(s:delim:)spec}
695 will be executed even if the substitution is double quoted.
697 The right-hand side of assignments are no longer globbed by default hence
698 assignment foo=* will assign '*' as a value of foo. Use the foo=( * )
699 array assignment syntax to get the old behaviour. Alternatively the
700 GLOB_ASSIGN can be set to emulate the old behaviour but the usage of this
701 option is strongly discouraged and this option may be completely removed in
704 foo=$bar no longer creates an array even if bar is an array. Use
705 foo=( $bar ) or even better, foo=( "$bar[@]" ) instead.
707 When foo is an array parameter ${#foo} will always return the length of the
708 array even if the substitution is double quoted. ${(c)#foo} should be used
709 to get back the old behaviour.
711 When the prompt_subst option is set prompts are fully expanded using
712 parameter expansion, command substitution and arithmetic expansion.
713 In 2.5 backquote substitution was not performed in the prompts so this
714 change might cause problems in some startup scripts if ` is used literally
717 History substitution is now not performed if the history escape character
718 appears in a single-quoted string. This may break some interactive shell
719 functions which use \! in single-quoted strings.
721 The UID, EUID, GID, EGID parameters can be assigned now. The assignment
722 executes the setuid(), seteuid(), setgid(), setegid() respectively. On
723 systems where setuid and seteuid is not supported these functions are
724 emulated using setreuid or setresuid which may result in a different
727 Assigning the USERNAME parameter will call setuid(uid) where uid is the
728 user id of the specified user.
730 The privileged (-p) option is automatically set on invocation if euid != uid
731 or egid != gid. If this option is set no user startup files are sourced.
732 The shell will drop privileges when this option is unset by resetting its
733 euid to uid and its egid to gid.
735 The =number substitution for accessing the directory stack is changed to
736 ~number to allow =command substitution when a command name begins with a
739 <> is a redirection operator which opens the standard input for both
740 reading and writing. To match a number use <->.
742 Option letters -1 and -C for PRINT_EXIT_VALUE and NO_CLOBBER are swapped:
743 `set -C' sets NO_CLOBBER and `set -1' sets PRINT_EXIT_VALUE.
745 AUTO_PUSHD behaviour is changed. Now cd without arguments will always go
746 to the $HOME directory even if AUTO_PUSHD is set and PUSHD_TO_HOME is not
747 set. If you preferred the old behaviour you can alias cd to pushd.
749 IFS word splitting with SH_WORD_SPLIT and the splitting of the input in the
750 read builtin has changed in cases when IFS contains characters other than
751 <space>, <tab>, <newline>. See the description of IFS in the zshparam
752 manual page for more details.
755 New features in zsh version 2.5
756 -------------------------------
758 Greatly expanded completion possibilities. Programmable completion
759 allows detailed control over what arguments of what commands can be
760 completed to what. See dots/zcomp in the distribution for examples.
762 Expand filenames with ~ and = on the right hand side of parameter
763 assignments. New option MAGIC_EQUAL_SUBST to do it in all
764 identifier=expression arguments.
766 ${+name} becomes 1 or 0 if name is set or unset. ${~spec} toggles
767 GLOB_SUBST in substitution. Parameter substitution takes lots
768 of flags in the format ${(flags)name}.
770 New glob qualifiers for block/character special files, times in glob
771 qualifiers can be in months, weeks, days, hours, minutes. Qualifiers can
772 work on links or on what they point to. Qualifiers separated by commas
775 New parameter substitution modifiers (fFwW) to repeat actions. New
776 option CSH_JUNKIE_HISTORY.
778 New line editor functions history-beginning-search-backward,
779 history-beginning-search-forward, expand-or-complete-prefix, push-input,
782 Assign to part of a string, use qualifiers on string subscription with
785 New parameters: EGID, EUID, KEYTIMEOUT
787 New prompt escape sequence %_ to get constructs like for and while in
788 the secondary prompt. %E in prompt clears to end of screen.
790 Conditional expressions in PROMPT and WATCHFMT.
792 New options ALWAYS_LAST_PROMPT, ALWAYS_TO_END, AUTO_PARAM_KEYS,
793 COMPLETE_ALIASES, COMPLETE_IN_WORD, CSH_JUNKIE_HISTORY, GLOB_SUBST,
794 LIST_AMBIGUOUS, MAGIC_EQUAL_SUBST, NO_FLOW_CONTROL, PROMPT_SUBST
796 New option -m to many builtins makes arguments subject to pattern
799 Bindkey can now bind both key sequences and prefixes of those. You can
800 for example bind ESC and function keys sending ESC sequences.
802 Additional options to read builtin to use in functions called by
805 New options to print to sort arguments and print them in columns.
807 Some additional resource limits can be specified.
809 Some editor functions now work in the minibuffer.