LINUX.ORG.RU
ФорумTalks

Вышел zsh 5.4.2

 ,


0

1

Сабж. Изменения ветки 5.4:

Changes from 5.3.1 to 5.4
-------------------------

The 'exec' and 'command' precommand modifiers, and options to them, are
now parsed after parameter expansion.  Previously, both the modifier and
any options to it were parsed between alias expansion and parameter
expansion (see zshexpn(1)), so they could neither be quoted nor be the
result of parameter expansion.  Examples: 's=command; $s -V ls' and
'\command -V ls' now work as expected.

Functions executed by ZLE widgets no longer have their standard input
closed, but redirected from /dev/null instead. That still guards
against user defined widgets inadvertently reading from the tty device.

There is an option WARN_NESTED_VAR, a companion to the existing
WARN_CREATE_GLOBAL that causes a warning if a function updates a
variable from an enclosing scope without using typeset -g.  It can be
turned on for an individual function with "functions -W".

zmodload now has an option -s to be silent on a failure to find a module
but still print other errors.
Incompatibilities since 5.3.1
-----------------------------

1) The default behaviour of code like the following has changed:

  alias foo='noglob foo'
  foo() { print function body; }

When this is encountered in a start-up file, or other place where input
was read line by line, "foo" is in command position and is expanded as
an alias before the function definition takes place.  In previous
versions of the shell, this caused two functions "noglob" and "foo" to
be defined.  Any expansion of an alias in a function definition is
nearly always an unintended effect, as well as hard to detect, so has
been made an error.  (The option setting NO_MULTI_FUNC_DEF turned this
case into an error, but did not help with other cases and is off by
default.)  The alternative, of not expanding the alias, was rejected as
it was more difficult to achieve in the parser and also would silently
change the shell's behaviur between versions.  A new option,
ALIAS_FUNC_DEF, has been added, which can be set to make the shell
behave as in previous versions.  It is in any case recommended to use
the "function" keyword, as aliases are not expanded afterwards.

2) It was an undocumented, and largely useless, feature that a function
autoloaded with an absolute path was searched for along the normal fpath
(as if the leading / was missing) and, if found, loaded under the full
name including the leading slash.  This has been replaced with the more
useful feature that the function is searched for only at the given
absolute path; the name of the function is the base name of the file.
Note that functions including a non-leading / behave as before,
e.g. if `dir/name' is found anywhere under a directory in $fpath it is
loaded as a function named `dir/name'.

3) vcs_info: When neither a set-patch-format nor a gen-applied-string
(resp. gen-unapplied-string) hook is set, vcs_info now '%'-escapes the
applied-string (resp. unapplied-string) before interpolating it into the
patch-format string, to prevent literal `%' signs in the interpolated
value from being interpreted as prompt escape sequences.  If you use
${vcs_info_msg_0_} in a context other than the shell prompt, you may need
to undo the escaping with:

    print -v vcs_info_msg_0_ -Pr -- "${vcs_info_msg_0_}"

This is also needed if $vcs_info_msg_0_ is used to set $psvar.

4) functions executed by ZLE widgets no longer have their standard input
closed, but redirected from /dev/null instead. That still guards
against user defined widgets inadvertently reading from the tty device,
and addresses the antisocial behaviour of running a command with its
stdin closed.

5) [New between 5.4.1 and 5.4.2] In previous versions of the shell, the
following code:

    () { setopt err_return; false; echo 'oh no' } && true

printed "oh no", as the ERR_RETURN behaviour was suppressed when
a function was executed on the left hand side of an "&&" list.  This was
undocumented and inconvenient as it is generally more useful to consider
execution within a function in isolation from its environment.  The shell
now returns from the function on executing `false'.  (This is general
to all functions; an anonymous function is shown here for compactness.)
Скачать: https://fourdots.com/mirror/zsh/zsh-5.4.2.tar.gz
https://fourdots.com/mirror/zsh/zsh-5.4.2-doc.tar.xz

Документацию plaintext'ом в KOI8-R одним файлом можно также скачать отсюда: gopher://sdf.org/9/users/saahriktu/filez/notbyme/zsh-5.4.2.txt.lzma

★★★★★

Ответ на: комментарий от complamer

Тоже угадал, пока на обмылке портянку крутил...

mandala ★★★★ ()

KOI8-R
gopher
lzma

Это уже не обычное изнасилование трупа, это некрофильская оргия с единственным живым участником.

CYB3R ★★★★★ ()

gopher://

эх, были времена…

Valeg ★★★ ()

Зачем нужен ZSH? Тыкал я его, настраивал — так и не понял, что в нём можно сделать такого полезного, чего нельзя в BASH.

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

Потому что я не представляю, кто кроме автора скачает файл по gopher, распакует lzma, а потом будет читать текст в KOI8-R без предварительной конвертации в юникод.

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R
curl gopher://sdf.org/9/users/saahriktu/filez/notbyme/zsh-5.4.2.txt.lzma > zsh-5.4.2.txt.lzma ; lzless zsh-5.4.2.txt.lzma

Документация на английском, а, значит, «в KOI8-R» читается как «в ASCII», что совместимо не только с UTF-8, но и большинством однобайтных кодировок. А вот тексты в UTF-8 далеко не всегда так не могут.

saahriktu ★★★★★ ()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от CYB3R

Какой ещё «маразм»? KOI8-R - это ASCII + уникальный набор символов для 0x80-0xFF. А для английского языка ASCII выше крыши. А, значит, и KOI8-R.

saahriktu ★★★★★ ()
Ответ на: комментарий от hhhhacker

Ну так все удобно разное. Я долгое время юзал tcsh, да и сейчас, вот, на него возвращаюсь. Более лёгкий, более шустрый и автодополнение менее тормозное (мне так и не удалось окончательно побороть необходимость двойного нажатия tab'а).

А кому-то удобнее zsh.

saahriktu ★★★★★ ()

Хороший шелл, его умного дополнения недописанных путей мне в баше часто не хватает.

si0 ★★★ ()
Ответ на: комментарий от ananas

глобальные алиасы

Это как?

виджеты zle

Этчё? Кто-то шо-то писал про представление параметров команд формой, но я так толком такого и не нашёл.

да и автодополнение в zsh значительно гибче

Если ты про разворачивание сокращённого на ходу пути, то оно не нужно, ибо для него надо иметь незыблемую и вызубренную структуру ФС, в которой от этих сокращений точно не будет конфликтов.

bodqhrohro_promo ()
Ответ на: комментарий от CYB3R

кто кроме автора скачает файл по gopher

Кто угодно, поставивший в арбузер аддон для гофера, или юзающий православный браузер, поддерживающий гофер, например, Firefox 3.6. cast pekmop1024.

распакует lzma

Каким ламером надо быть, чтобы не осилить архив распаковать?

без предварительной конвертации

На винде это обычное дело: кинул гуёвому просмотрщику — распознал и показывает; в консоли — chcp нужная_кодировка и читаешь, и только под никсами надо пихать iconv, куда не нужно.

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

Кто угодно, поставивший в арбузер аддон для гофера, или юзающий православный браузер, поддерживающий гофер, например, Firefox 3.6

А я-то тут при чем, я пользуюсь богомерзкой проприетарной хромоперой :)

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

curl никто не отменял, а он знает gopher. А так lynx умеет gopher тоже. Для более поздних версий Firefox'а был плагин, но какое-то время назад поломали совместимость.

saahriktu ★★★★★ ()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от pekmop1024

Ну может, я тебя с кем-то попутал. Был тут один чувак с Фродо на аватарке.

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

Зачем нужен ZSH? Тыкал я его, настраивал — так и не понял, что в нём можно сделать такого полезного, чего нельзя в BASH.

Баш гото умеет?

Napilnik ★★★★★ ()
Ответ на: комментарий от bodqhrohro_promo

Если ты про разворачивание сокращённого на ходу пути, то оно не нужно, ибо для него надо иметь незыблемую и вызубренную структуру ФС, в которой от этих сокращений точно не будет конфликтов.

В том и удобство, что он все эти конфликты по табу перебирает

si0 ★★★ ()
Ответ на: комментарий от si0

Ну это как в виме, только по всей строке — всё равно нафиг. Вот если б оно прыгало в место конфликта и давало ввести там букву — ещё допустим.

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

Это в скриптах, что ли?

В них самых. Если скрипт программа, то он должен быть синтаксически полноценным.

Мало башизмами скрипты засирать, так теперь ещё и зэсэшизмы появились?

Посмотри как няшно и лаконично устроен скрипт x.cmd

:x
start x.cmd
goto :x
А ваши баши с пистонами, без использования порченых циклов, так могут?

Napilnik ★★★★★ ()
Ответ на: комментарий от Napilnik

(t)csh, кстати, goto тоже знает:

          foreach f ($argv)                     # foreach command argument
                  if (-d $f) goto error         # if a directory, goto error
                  sed -f pass1 $f > /tmp/xyz$$  # sed stores in /tmp/xyz$$
                  sed -f pass2 /tmp/xyz$$ > $f  # then stores back in $f
          end                                   # end of foreach
          goto done:                            # skip the error part
          error:                                # just label, no other effect
          echo Error - $f is a directory.       # print message
          goto end:                             # exit script avoiding "rm"
          done:                                 # just a label
          rm /tmp/xyz$$                         # remove temporary file
          end:                                  # last label, nothing after it

saahriktu ★★★★★ ()
Ответ на: комментарий от saahriktu

Значит можно писать зацикленный скрипт, класть на флешку и запускать! А для останова программы вытаскивать флешку. Жалко вайновский cmd.exe не аналогичен оригинальному - не плюёт пачками чёрных окошек от запуска x.cmd а тормозит в одной консоли.

Napilnik ★★★★★ ()
Ответ на: комментарий от bodqhrohro_promo

Это как?

alias -g L='| less'

и далее можешь где угодно L использовать

Этчё?

это легкий способ расширения набора команд редактора комстроки. типа макросов

Если ты про разворачивание сокращённого на ходу пути, то оно не нужно

не только. и когда говоришь «не нужно», всегда добавляй «мне»

ananas ★★★★★ ()
Ответ на: комментарий от ananas

и далее можешь где угодно L использовать

И чем это от башевских алиасов отличается?

расширения набора команд редактора комстроки. типа макросов

Подробнее, с примерами.

и когда говоришь «не нужно», всегда добавляй «мне»

Если нужно при специфических условиях (которые я описал выше) — можно считать за ненужно, пускай мнекает тот, у кого эти условия есть. Наличие префиксных конфликтов в ФС более вероятно, чем их полное отсутствие.

bodqhrohro_promo ()
Ответ на: комментарий от bodqhrohro_promo

И чем это от башевских алиасов отличается?

тем, что в баше алиас можно использовать только как первую часть команды

Подробнее, с примерами.

rtfm

ananas ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.