diff options
Diffstat (limited to 'NEWS')
-rw-r--r-- | NEWS | 616 |
1 files changed, 616 insertions, 0 deletions
diff --git a/NEWS b/NEWS new file mode 100644 index 000000000..905f9456b --- /dev/null +++ b/NEWS @@ -0,0 +1,616 @@ +------------------------------------- +CHANGES FROM PREVIOUS VERSIONS OF ZSH +------------------------------------- + +Changes since zsh version 4.2.0 +------------------------------- + +- 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. Note that this does not take account of changes to the + prompt variables themselves, only the expansion of the text. 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 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://sunsite.auc.dk/zsh/ + +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. |