about summary refs log tree commit diff
path: root/NEWS
blob: c36a2480d41e0f5f4738c552de7843245df822f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
-------------------------------------
CHANGES FROM PREVIOUS VERSIONS OF ZSH
-------------------------------------

Note also the list of incompatibilities in the README file.

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 control 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.

Changes in 4.2 since version 4.2.0
----------------------------------

- The autoload and related builtins take options -k and -z to indicate
  ksh or zsh autoloading style for given functions, making it possible
  to mix and match.

- Assignments to associative arrays can use the i and r index flags.
  For example,
    assoc[(i)alpha*]=bravo
  sets the value for the element whose key matches the pattern `alpha*';
    assoc[(r)activ*]=passive
  sets the value for the element whose current value matches the pattern
  `activ*'.

- The glob qualifier F indicates a non-empty directory.  Hence *(F)
  indicates all subdirectories with entries, *(/^F) means all
  subdirectories with no entries.

- fc -p and fc -P provide push/pop for the status of the shell's
  history (both internal and using the history file).  With automatic
  scoping (fc -ap) it becomes easy to use a temporary history in a
  function.  This has been added to the calculator function zcalc to make
  its internal history work more seamlessly.

- A new `try block' and `always block' syntax has been introduced
  to make it easier to ensure the shell runs important tidy-up code
  in the event of an error.  It also runs after a break, continue, or
  return, including a return forced by the ERR_RETURN option
  (but not an exit, which is immediate).  The syntax is:
    `{' try-block-list `}' `always' `{' always-block-list `}'
  where no newline or semicolon may appear between `}' and `always'.
  This is compatible with all previous valid zsh syntax as an `always'
  at that point used to be a syntax error.  For example,
    { echo Code run in current shell } always { echo Tidy-up code }

- A new zle widget reset-prompt has been added to re-expand the current
  prompt.  Changes to the variable in use as well as changes in its
  expansions are both taken into account.  The same effect is now forced by
  a job change notification, making the %j prompt escape and %(j..) ternary
  expression more useful.

- The zftp module supports ports following the hostname in the normal suffix
  notation, `host:port'.  This requires IPv6 colon-style addresses to be
  specified in suitably quoted square brackets, for example:

  zftp open '[f000::baaa]'
  zftp open '[f000::baaa]:ftp'

  (the two are equivalent).

- Special traps, those that don't correspond to signals, i.e. ZERR, DEBUG
  and EXIT are no longer executed inside other traps.  This caused
  unnecessary confusion if, for example, both DEBUG and EXIT traps
  were set.  The new behaviour is more compatible with other shells.

- New option TRAPS_ASYNC which if set allows traps to run while the
  shell is waiting for a child process.  This is the traditional zsh
  behaviour; POSIX requires the option to be unset.  In sh/ksh
  compatibility mode the option is turned off by default and the option
  letter -T turns it on, for compatibility with FreeBSD sh.

- New WIDGETSTYLE, WIDGETFUNC parameters in ZLE.

- Glob qualifier (+func) is shorthand for (e:func:) (calls a command,
  typically a shell function, with no argument).

New features between zsh versions 4.0 and 4.2
---------------------------------------------

Configuration:
- upgraded to use autoconf post-2.50
- improved compatibility with other shells through shell options,
  builtin arguments and improved builtin option parsing

Syntax and builtins:
- new printf builtin
- `+=' to append to parameters which works for scalars, arrays and (with
  pairs) associative arrays.
- enhanced multiple parameter `for' loops:
    for key value in key1 value1 key2 value2 ...
  maintaining full compatibility with POSIX syntax.
- Suffix aliases allow the shell to run a command on a file by suffix,
  e.g `alias -s ps=gv' makes `foo.ps' execute `gv foo.ps'.  Supplied
  function zsh-mime-setup uses existing mailcap and mime.types files
  to set up suitable aliases.  Supplied function pick-web-browser is
  suitable for finding a browser to show .html etc. files by suffix alias.
- new option `no_case_glob' for case-insensitive globbing.

Add-on modules and functions:
- zsh/datetime modules makes date formatting and seconds since EPOCH
  available inside the shell.
- zsh/net/tcp module provides builtin interface to TCP through ztcp
  builtin.  Function suite for interactive and script use with expect-style
  pattern matching.
- zsh/net/socket module provides zsocket builtin.
- zcalc calculator function with full line editing.
- builtin interface to pcre library
- zsh/zselect module provides zselect builtin as interface to select
  system call

Completion system:
- general improvements to command and context support, low-level functions,
  display code.
- in verbose mode, matches with the same description are grouped
- highly configurable completions for values of specific parameters,
  specific redirections for specific commands
- support for bash completion functions (typically zsh native functions are
  more powerful where available)
- New completions provided for (some of these may be in later 4.0
  releases):  valgrind, tidy, texinfo, infocmp, Java classes, larch, limit,
  locale parameters, netcat, mysqldiff, mt, lsof, elinks, ant, debchange
  (dch), email addresses, file system types, Perforce, xsltproc.
  Plus many others.

Line editor:
- special parameters $PREDISPLAY, $POSTDISPLAY available in function
  widgets to configure uneditable text (for narrowing)
- recursive editing
- supplied widgets read-from-minibuffer, replace-string use these features
  (more intuitive prompting and argument reading than 4.0)
- access to killed text via $CUTBUFFER and $killring
- supplied highly configurable word widgets forward-word-match etc., can
  set what constitutes a word interactively or in startup script
  (implement bash-style behaviour, replacing previous bash-* word widgets)
- interface to incremental search via $LASTSEARCH
- better handling of keymaps in zle and widgets
- better support for output from user-defined widgets while zle is active
- tetris game which runs entirely in zle
- several other contributed widgets

Local internal improvements:
- disowned jobs are automatically restarted
- \u and \U print escapes for Unicode
- read -d <delimiter> allows a custom line ending.
- read -t <timeout>.
- line numbers in error messages and $PS4 output are more consistent
- `=prog' expands only paths, no longer aliases for consistency
- job display in prompts; `jobs' command output can be piped
- prompts: new $RPROMPT2, %^, %j, %y, enhanced %{, %}, %_.
- rand48() function in zsh/mathfunc for better randomness in arithmetic
  (if the corresponding math library function is present)
- $SECONDS parameter can be made floating point via `typeset -F SECONDS'
  for better timing accuracy
- improvements to command line history mechanism
- job table is dynamically sized, preventing overflow (typically seen
  previously in complex completions).
- many bugfixes


New features in zsh version 4.0.1
---------------------------------

Compared with 3.1.9, there are mostly incremental improvements to
  - the new completion system --- more functions, completers, styles...
  - the line editor
  - handling of signals and traps
  - the configuration system, particularly for modules
  - Cygwin support (now essentially complete)
  - arithmetic evaluation
  - the zpty (pseudoterminal handling) module
  - the test suite
plus various bug fixes and compatibility improvements.

The alias modules (zle.so as an alias for zsh/zle.so, etc.) have been
removed; use `zmodload -A' to load modules under other names.  This is
irrelevant if you are upgrading from 3.0.

Compared with the 3.0 series of releases (the last stable set), the most
significant of a large number of improvements in the shell are:
  - Dynamically loadable modules with hierarchical naming system
  - Shell functions as editor functions, with much additional builtin support
  - Incredibly rich new completion system; just needs a single
    initialization command to provide completion for all sorts of commands
    and contexts
  - Associative arrays
  - Lots of new features in parameter substitution and globbing; more
    logical handling of nested parameter substitutions
  - Rewritten pattern-matching (globbing) code supports approximate
    and case-insensitive matching and backreferences
  - Various custom modules for pty's, FTP, special parameters, etc.
  - Rewrites of many internal parts of the code: execution code to
    provide compilation to internal representation, pattern matching
  - Floating point arithmetic and mathematical functions module
  - A test suite
  - Various new options for compatibility with this, that and the other
See the 3.1.x changes below for more detail.

New features in zsh version 3.1.8 and 3.1.9
-------------------------------------------
These are primarily bug-fix versions.  There are only a few user-visible
changes.
 - Array slices ${array[a,b]} with b < a now correctly have zero length.

New features in zsh version 3.1.7
---------------------------------
Further enhancements to new completion system:
 - Comprehensive context-sensitive configuration via `styles', which
   can be set by the menu-driven front end in compinstall
 - General mechanism for setting patterns to be ignored in a completion;
   overriding  of patterns to be matched for functions
 - New completers: _prefix to complete word before cursor, _ignored
   to complete using words so far ignored (like $fignore but more
   powerful), _history to complete words from shell history
 - Multiple use of completers with different options, similarly splitting
   of different types of completion (`tags') so they are considered with
   different styles
 - Many more supplied completions for standard commands which work out of
   the box, and better handling of command line options/arguments which
   behave in the usual way   
 - $fpath now set up to use installed functions by default; functions
   can be loaded just by `autoload -U compinit; compinit'
 - Much improved handling of nested quoting and nested braces
 - New LIST_PACKED and LIST_ROWS_FIRST completion options and corresponding
   styles
 - compctl library separated out (frozen but still supported)
 - User-friendly introduction available at zsh website
   http://zsh.sourceforge.net/

Additions to complist listing library (coloured completion and menu
selection):
 - Listings can be shown page by page (are by default for new completion)
 - Menu selection allows full up and down scrolling of long lists

Other editing features:
 - new parameters $PENDING, $MARK, $BUFFERLINES
 - Easy display of a prompt from within an editing widget

Code parsing, storing and execution:
 - Completely new system of storing code internally, greatly optimised
 - Much less memory for shell functions etc.
 - Can compile shell functions to .zwc `wordcode' functions for fast
   loading
 - Can create `digest' files of entire directories in .zwc format

Parameters:
 - Floating point support added, similar to ksh93, `typeset -F' and
   `typeset -E' declare floating point variables; usual C/Fortran-like
   rules for integer/float conversion
 - Mathematical library zsh/mathfunc contains all the standard mathematical
   functions for use in arithmetical expressions
 - Improved parsing of arithmetical expressions and better error messages
 - Special parameters can be made local
 - `typeset -h' hides specialness of parameters, either as parameter
   attribute or when declaring new local variable
 - Local parameters can now be exported as in other shells; new option
   GLOBAL_EXPORTS on by default provides old behaviour that `typeset -x'
   referred to global parameters.
 - zsh/parameter module enhanced: now needed for new completion; parameters
   provided have `-h' flag set so that they are hidden by `typeset', so
   that existing functions don't need to be changed
 - Quotes can be stripped from parameter values with ${(Q)...}, providing
   reverse of ${(q...)...} facility

Globbing and pattern matching:
 - Pattern matching rewritten for efficiency
 - Supports `backreferences', i.e. extracting parenthesised chunks of
   matches, e.g.
     [[ $foo = (#b)(*/)[^/]* ]]
   stores the part of $foo up to the last / in $match[1] and the indexes of
   the match in $mbegin[1], $mend[1].  (#m) is also available to set $MATCH
   to the entire match and corresponding $MBEGIN, $MEND:  useful in
   parameter substitutions like ${.../.../...}.
 - (#s) and (#e) match start and end of pattern like ^ and $ in regular
   expression, useful in complex expressions such as ((#s)|/)dirname((#e)|/)
   and in parameter expressions.

 - Depth-first/last listing of recursive glob lists

Functions etc.:
 - `autoload -X' inside a function body instructs the shell to
   bootstrap the function at that point
 - `autoload +X fn' says load the function fn but don't execute it
 - Prompt `themes' make customization of prompts easier

Modules:
 - New hierarchical naming scheme for modules; supplied modules go into
   zsh subdirectory, so zle becomes zsh/zle etc.; aliases supplied for
   compatibility for existing code, but the new format should be used in
   future.
 - zmodload is more consistent between dynamically and statically linked
   shells
 - zsh/zftp and its function suite support multiple sessions (zfsession
   command); zftransfer allows transfer of files between two ftp sessions
   with no local file; use styles for e.g. progress style; IPv6 supported;
   recursive put `zfput -r' for uploads
 - zsh/zpty module creates pseudoterminal and allows builtin `expect'-like
   behaviour

Other:
 - Test suite, not yet complete (`make test')
 - use of Linux task limits
 - Many fixes including output redirection with `setopt xtrace' and
   other redirection fixes; NIS+ problem.
 - Better null-command behaviour in sh and csh emulation
 - Internal memory usage optimisations

New features in zsh version 3.1.6 (beta version)
------------------------------------------------
Note also the changes for 3.0.6, which include changes between 3.1.5. and
3.1.6.

New completion system via shell functions; massive degree of
programmability and configurability:
 - ready-made function suite to use, see zshcompsys(1)
 - approximate completion and spelling correction via completion
 - control over matching for case-independence, partial word completion, etc.
 - menu selection:  choose a completion by moving the cursor
 - coloured completion lists
 - completion of filenames in quotes is now more reliable; splitting
   quoted strings into command arguments is also possible.

Other editing changes:
  - enhancements to function/editing interface:  new parameters, numeric
    arguments, string argument passing, reading keys from widgets.
  - the old history-search-{back,for}ward behaviour and bindings have
    returned (up to minor details).
  - BASH_AUTO_LIST option to show completion list only on second key press.
  - the ZBEEP parameter gives a string to output instead of beeping,
    allowing you to have a visual bell.

History changes: new options HIST_NO_FUNCTIONS, HIST_EXPIRE_DUPS_FIRST,
HIST_FIND_NO_DUPS, HIST_IGNORE_ALL_DUPS, INC_APPEND_HISTORY,
HIST_SAVE_NO_DUPS, SHARE_HISTORY, allow better control of when history is
read and written and how duplicates are handled.  New format for history
saves.

Associative arrays plus enhanced parameter substitutions to retrieve keys
and values.

Globbing changes:
  - Case-insensitive and approximate globbing.
  - Ordering and indexing of globbing matches, e.g. *(om[1]) picks
    most recently modified file.
  - General file mode qualifier with chmod(1)-like syntax, e.g. *(f:u+wx:)

New loadable modules:
  - zftp, plus associated function suite, for turning your zsh session
    into an FTP session too
  - parameter, for examining and altering shell hash tables via an
    associative array interface.
  - mapfile, for reading and writing external files via an associative
    array interface.

Debugging and prompt enhancements:
  - $PS4 can contain %i for $LINENO as well as %N for script or function
    names (default PS4 changed), also %_ for current shell structure
    executing;
  - Prompt truncation %<...< is now more flexible: it applies to a
    whole section of the prompt, not just one escape.  You need to put
    %<< after the truncated escape to get the old behaviour.
  - %20(l.yes.no) in prompts prints yes if at least 20 characters have
    been output, else no (e.g. for outputting extra newlines).

Parameter and expansion changes
  - `typeset -t MYPATH mypath' creates tied path/PATH-like variables
  - `typeset -g' allows operations on parameters without making them local
  - New expansions
    - ${(t)param} prints type information for $param
    - ${(P)param} treats value of $param as the name of a param to
      substitute
    - ${foo:q} can quote replaced parameter text from expansion
    - ${foo/old/new} substitution, like bash; also (S) flag for shortest
      match
    - $foo[(b.2.i)bar] starts searching $foo for bar starting at 2nd match

Builtin and function changes
  - stat module: `stat -H hash foo' gives you e.g. $hash[mtime]
  - `autoload -U' autoloads functions without alias expansion.

Other new options:
  - LOCAL_TRAPS allows signal traps to be local to functions (as in ksh).
  - NO_RCS can now be turned on at any point in initialization files.
  - NO_GLOBAL_RCS can force /etc/z* files after /etc/zshenv to be skipped.
    (Please don't use this as an excuse to stuff more into /etc/zshenv!)
  - Existing MAGIC_EQUAL_SUBST option is more useful; any argument containing
    ...=~...:~... will perform filename expansion on the ~ (previously,
    the string before `=' had to look like a parameter name).

Configuration changes:
  - Generation of signal names should be more reliable
  - Customizable installation of shell functions from distribution.

New features in zsh version 3.0.6
---------------------------------

Most of these changes are designed to improve compatibility with zsh
version 3.1.6, the latest development release.  However, this release also
fixes all known Year 2000 (Y2K) bugs in zsh 3.0.

History changes:
  - whitespace between words is ignored in history searches.
  - new option HIST_REDUCE_BLANKS removes extra whitespace in the stored
    history.
  - support for reading (but not writing) version 3.1.6 history files.

Globbing changes:
  - the a, c, and m glob qualifiers can now test time in seconds.
  - globbing of number ranges behaves more like character ranges in that
    it can match a prefix of a number, e.g. `<1-5>*' matches 1, 2, 3, 4,
    5, 17, 23skiddoo, 5986, etc., but not 6, 7, 8ball, 911, etc.

Parameter and expansion changes:
  - expansion of ~ and other globbing flags via ${~param} do not depend
    upon EXTENDED_GLOB (bug fix).
  - nested parameter substitutions require braces (this was always the
    documented 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 shorthand for "(/)".

Much improved sh/ksh emulation.  When zsh is invoked as sh it mostly
conforms to POSIX 1003.2.

Enhanced parameter expansion features: new flags: A, @, e, W, p, f, F.
Expansions can be nested.  For example,
"${${(M)${(f@)$(<builtin.pro)}:#char*}[2][(w)3]}" expands to the third
word of the second line of builtin.pro which begins with char.  See
zshexpn(1) for the details.

***/foo glob does recursive directory search following symbolic links.

Traps defined by the trap builtin are now executed in the current shell
environment and not as a shell function.  This means that $1 is not set
to the signal number.  Of course the TRAPxxx functions continue working
as before.

Traps defined by the trap builtin are reset to their default values in
subshells.

Option names can be prefixed by `no' to unset an option.
setopt no_option_name is the same as unsetopt option_name.
This change affects the output of the setopt and unsetopt
builtins when these are invoked without arguments.  See
the zshoptions manual page for more explanation.

!, {, } and [[ are now reserved words.  Things like [[-z $foo]] or {foo}
should not be used.  {foo} still works if the IGNORE_BRACES option is not
set but this feature may be removed in the future.  [[ -z $foo ]] and
{ foo } should be used instead.

HOSTTYPE special parameter is removed.  The new OSTYPE, MACHTYPE and
VENDOR parameters should be used instead.

VERSION parameter is renamed to ZSH_VERSION

exec now saves the history in interactive shells.  If you do not like this
behaviour you can alias exec to 'unset HISTFILE ; exec'.

${~spec}, ${=spec} and ${^spec} used to toggle the effect of
globsubst/shwordsplit/rcexpandparam.  Now these force the corresponding
option on. ~, = or ^ can be doubled to force the relevant option off for
the substitution.

Explicitly requested word splitting like ${=spec} or ${(s:delim:)spec}
will be executed even if the substitution is double quoted.

The right-hand side of assignments are no longer globbed by default hence
assignment foo=* will assign '*' as a value of foo.  Use the foo=( * )
array assignment syntax to get the old behaviour.  Alternatively the
GLOB_ASSIGN can be set to emulate the old behaviour but the usage of this
option is strongly discouraged and this option may be completely removed in
the future.

foo=$bar no longer creates an array even if bar is an array.  Use
foo=( $bar ) or even better, foo=( "$bar[@]" ) instead.

When foo is an array parameter ${#foo} will always return the length of the
array even if the substitution is double quoted.  ${(c)#foo} should be used
to get back the old behaviour.

When the prompt_subst option is set prompts are fully expanded using
parameter expansion, command substitution and arithmetic expansion.
In 2.5 backquote substitution was not performed in the prompts so this
change might cause problems in some startup scripts if ` is used literally
in prompts.

History substitution is now not performed if the history escape character
appears in a single-quoted string.  This may break some interactive shell
functions which use \! in single-quoted strings.

The UID, EUID, GID, EGID parameters can be assigned now. The assignment
executes the setuid(), seteuid(), setgid(), setegid() respectively.  On
systems where setuid and seteuid is not supported these functions are
emulated using setreuid or setresuid which may result in a different
behaviour.

Assigning the USERNAME parameter will call setuid(uid) where uid is the
user id of the specified user.

The privileged (-p) option is automatically set on invocation if euid != uid
or egid != gid.  If this option is set no user startup files are sourced.
The shell will drop privileges when this option is unset by resetting its
euid to uid and its egid to gid.

The =number substitution for accessing the directory stack is changed to
~number to allow =command substitution when a command name begins with a 
digit.

<> is a redirection operator which opens the standard input for both
reading and writing.  To match a number use <->.

Option letters -1 and -C for PRINT_EXIT_VALUE and NO_CLOBBER are swapped:
`set -C' sets NO_CLOBBER and `set -1' sets PRINT_EXIT_VALUE.

AUTO_PUSHD behaviour is changed.  Now cd without arguments will always go
to the $HOME directory even if AUTO_PUSHD is set and PUSHD_TO_HOME is not
set.  If you preferred the old behaviour you can alias cd to pushd.

IFS word splitting with SH_WORD_SPLIT and the splitting of the input in the
read builtin has changed in cases when IFS contains characters other than
<space>, <tab>, <newline>.  See the description of IFS in the zshparam
manual page for more details.


New features in zsh version 2.5
-------------------------------

Greatly expanded completion possibilities.  Programmable completion
allows detailed control over what arguments of what commands can be
completed to what.  See dots/zcomp in the distribution for examples.

Expand filenames with ~ and = on the right hand side of parameter
assignments.  New option MAGIC_EQUAL_SUBST to do it in all
identifier=expression arguments.

${+name} becomes 1 or 0 if name is set or unset.  ${~spec} toggles
GLOB_SUBST in substitution.  Parameter substitution takes lots
of flags in the format ${(flags)name}.

New glob qualifiers for block/character special files, times in glob
qualifiers can be in months, weeks, days, hours, minutes.  Qualifiers can
work on links or on what they point to.  Qualifiers separated by commas
are or-ed.

New parameter substitution modifiers (fFwW) to repeat actions.  New
option CSH_JUNKIE_HISTORY.

New line editor functions history-beginning-search-backward,
history-beginning-search-forward, expand-or-complete-prefix, push-input,
push-line-or-edit.

Assign to part of a string, use qualifiers on string subscription with
$foo[(qual)2,5]

New parameters: EGID, EUID, KEYTIMEOUT

New prompt escape sequence %_ to get constructs like for and while in
the secondary prompt.  %E in prompt clears to end of screen.

Conditional expressions in PROMPT and WATCHFMT.

New options ALWAYS_LAST_PROMPT, ALWAYS_TO_END, AUTO_PARAM_KEYS,
COMPLETE_ALIASES, COMPLETE_IN_WORD, CSH_JUNKIE_HISTORY, GLOB_SUBST,
LIST_AMBIGUOUS, MAGIC_EQUAL_SUBST, NO_FLOW_CONTROL, PROMPT_SUBST

New option -m to many builtins makes arguments subject to pattern
matching.

Bindkey can now bind both key sequences and prefixes of those.  You can
for example bind ESC and function keys sending ESC sequences.

Additional options to read builtin to use in functions called by
completion.

New options to print to sort arguments and print them in columns.

Some additional resource limits can be specified.

Some editor functions now work in the minibuffer.