Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

zsh-2.6-beta17 released



The zsh-2.6-beta17 release is now available on my ftp site.  From now on
the official site for zsh distribution is ftp://ftp.cs.elte.hu/pub/zsh/.
The distribution files are:

 -rw-r--r--  128144 May  6 16:37 zsh-2.6-beta17.diff.gz
 -rw-r--r--  629782 May  6 16:51 zsh-2.6-beta17.tar.gz
 -rw-r--r-- 1120653 May  6 16:37 zsh-RCS.tar.gz

The md5 checksums for these files:

9be348b2b72cb607a205a5fad486f597  zsh-2.6-beta17.diff.gz
fc5f8f1b1395b680e1aabc706a3f7e42  zsh-2.6-beta17.tar.gz
79bffbbf10eba2709f7741b588010260  zsh-RCS.tar.gz

I made a mirror of ftp://ftp.math.gatech.edu/pub/zsh/ in this directory
but I rearranged the directory structure.  I moved everything form the src
directory to the main directory and removed the src and diff directories
(the later was empty anyway).  I will always provide patches against the
previous release when a new release comes out.  I will only keep the most
recent zsh release in the archive as the patches and the RCS distribution
can always be used to reconstruct previous releases.  In the rcs
distribution I use symbolic names for that.  Eg. if you want beta16, you
can do co -rbeta16 RCS/*.  Unfortunately are no patches and symbolic names
for the releases before beta16 so the complete source for beta10 through
beta15 is still available but these will probably be removed sometime.
The RCS distribution contains every changes in zsh since 24 August 1994.

Richard will change ftp://ftp.math.gatech.edu/pub/zsh/ to be a mirror of
my site. The other zsh mirrors will probably also change to mirror my site
soon.

This release is mainly based on my non-official beta15-hzoli14 release but
of course it contains the changes made between the beta15 and beta16
releases.

* In this release I fixed problems with the limit builtin on
  Linux-1.3.97 and IRIX-5.3 and possibly on other systems.  The
  problem was that limit was unable to pair symbolic names with the
  real system resources so eg. on Linux when you wanted to limit the
  number of file descriptors you really set the `memorylocked' limit.
  I added some preprocessor hacks to make sure that the
  correspondence between real resources and symbolic names are
  correct.  The compilation will abort with an arror if for some
  reason this correspondence cannot be determined. (But it is very
  unlikely to happen.  I tested this on SunOS 4.1.2, Solaris 2.4,
  Linux-1.3.97, AIX 3.2, HP-UX (forgot the version), IRIX 5.3, OSF/1
  V2.0 and Ultrix 4.2).

* I also rewote the <(...) and >(...) process substitution code for
  systems that support the /dev/fd directory for naming open files.
  The new code will be used if configure detects that /dev/fd is
  directory or a symbolic link to a directory.  On Linux you must
  have a symbolic link to /proc/self/fd from /dev/fd if you want to
  use this (this link must exist anyway according to the FSSTND).
  The advantages of using /dev/fd rather than named pipes is that it
  will not leave behind any garbage in /tmp if an interrupt comes in
  an unfortunate moment.  It also removes the possibility of hanging
  in pipe open (which did happened sometimes in earlier releases when
  and interrupt came in a bad moment).  Another nice side effect is
  that process substitution parameters can now be used with shell
  functions.  That should also be possible with named pipes but it
  seems that by the time the function is executed the named pipe is
  already removed which is certainly a bug.  It is interesting that
  bash has the same bug.  It means that you should not use process
  substitution arguments to a function if you want to write a
  portable zsh script.

Other important changes since beta16 (these were there in my earlier
non-official releases):

* $#foo when foo is an array returns the array length even in double
  quoted substitutions.  To get back the old behaviour use ${(c)#foo}

* There are some important changes in the new substitution code.
  The right hand side of parameter assignments is no longer globbed
  by default (note that tidle and equals substitution is not
  globbing). This is compatible with sh/ksh/bash. I added an option,
  GLOB_ASSIGN which can be set to restore the old behaviour but I do
  not recommend the usage of this option.  If GLOB_ASSIGN is not
  set, it is guaranteed that foo=... assignments assign a scalar
  value. In earlier versions foo=* or foo=$bar where bar is an array
  created scalars if the result had zero or one words and an array
  otherwise.  You should always consider using the foo=( * ) syntax
  instead of setting GLOB_ASSIGN.

* The shell behaviour is slightly changed when the globsubst option
  is set.  Now globsubst is really globsubst, ie. only tidle and
  equals substitution and globbing is done on the result of
  parameter expansion and command substitution which makes it more
  sh-compatible. It means that foo='$bar' ; echo $foo no longer
  prints the value of bar.  It also prevents infinite
  uninterruptable loops like foo='$foo' ; echo $foo.  Also globsubst
  no longer removes single and double quotes from the value of
  parameters and a backshlash is only removed if it followed by a
  glob special character or a backslash. The result of a command
  substitution is handled in the same way.

* Parsing of mathematical substitutions are now done like double
  quoted strings. The body of a math substiturion is first expanded
  using parameter, command and arithmetic substitution and only the
  result is evaluated. This means that modifyers, backquote
  substitution and ${foo##$bar} type expansions can be used. This
  makes ((...)), $((...))  and $[...] completely equivalent.

* $((foo) ; bar) will no longer work as a command substitution.  You
  should leave a space after `$('.

* zsh now correctly handles all of the 256 characters (including the
  null character!) in most cases.  This is not yet complete as zle
  still cannot handle null and character codes between 131 and 155.
  Also some builtins do not print these characters properly.  But in
  most cases there are no problems with these.  echo and print,
  parameter assignems and substring indexes work.  The null
  character is added to IFS which is now four bytes long.

* Array and string indexes are always expanded like double quoted
  text.  This makes the `e' flag in indexes redundant.  If this flag
  is given it is simply ignored.

* There are some new parameter substitution flags: @, A, e, p, f, F, W.
  See the manual for more information about these.  Here is a nince
  example about is.  On Linux /proc/pid/environ contains the
  environment of the process `pid' as a null separated list of
  strings.  You can print this using
  print -c "${(ps:\0:)$(</proc/pid/environ)}"
  The p and f flags can also be used in indexes.

There are a lot of other changes and bugfixes and a few new features as
well.  Consult the manual pages and the ChangeLog for details.  People
who develop zsh should really read the ChangeLog.  There are some longer
ChangeLog entries explaining important internal changes.  For
developers it might be useful to use --enable-zsh-debug when
configuring zsh.  It will add `-DDEBUG -g' to CFLAGS and it disbles
optimization.  -DDEBUG enables some internal sanity checks.

Zoltan




Messages sorted by: Reverse Date, Date, Thread, Author