A few more .gitignore improvements.
[zsh.git] / NEWS
blob55f47e31d7efb1c91ab9956de7ee2bd3517d2403
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
31 keys by default.
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
43     called as a string.
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
46     executed.
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
56     with misplaced "()".
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
78 value is "*".
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
118   manual.
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
145   manual page.
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
157   external programme.
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
164   other shells.
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
176   to mix and match.
178 - Assignments to associative arrays can use the i and r index flags.
179   For example,
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
184   `activ*'.
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 ---------------------------------------------
241 Configuration:
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
246 Syntax and builtins:
247 - new printf builtin
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
265   pattern matching.
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
270   system call
272 Completion system:
273 - general improvements to command and context support, low-level functions,
274   display code.
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.
284   Plus many others.
286 Line editor:
287 - special parameters $PREDISPLAY, $POSTDISPLAY available in function
288   widgets to configure uneditable text (for narrowing)
289 - recursive editing
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.
306 - read -t <timeout>.
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).
318 - many bugfixes
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...
326   - the line editor
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
332   - the test suite
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
345     and contexts
346   - Associative arrays
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
355   - A test suite
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
362 changes.
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
377    different styles
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
385    styles
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
391 selection):
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
403    loading
404  - Can create `digest' files of entire directories in .zwc format
406 Parameters:
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
428    matches, e.g.
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
440 Functions etc.:
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
446 Modules:
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
450    future.
451  - zmodload is more consistent between dynamically and statically linked
452    shells
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
458    behaviour
460 Other:
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
471 3.1.6.
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
496 saves.
498 Associative arrays plus enhanced parameter substitutions to retrieve keys
499 and values.
501 Globbing changes:
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
513     array interface.
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
518     executing;
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
528   - New expansions
529     - ${(t)param} prints type information for $param
530     - ${(P)param} treats value of $param as the name of a param to
531       substitute
532     - ${foo:q} can quote replaced parameter text from expansion
533     - ${foo/old/new} substitution, like bash; also (S) flag for shortest
534       match
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.
541 Other new options:
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.
561 History changes:
562   - whitespace between words is ignored in history searches.
563   - new option HIST_REDUCE_BLANKS removes extra whitespace in the stored
564     history.
565   - support for reading (but not writing) version 3.1.6 history files.
567 Globbing changes:
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.
594 Other changes:
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
607     provided by OS.
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
619 now supported.
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
628 RESTRICTED (-r).
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
665 as before.
667 Traps defined by the trap builtin are reset to their default values in
668 subshells.
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
692 the substitution.
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
702 the future.
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
715 in prompts.
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
725 behaviour.
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 
737 digit.
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
773 are or-ed.
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,
780 push-line-or-edit.
782 Assign to part of a string, use qualifiers on string subscription with
783 $foo[(qual)2,5]
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
797 matching.
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
803 completion.
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.