Intereting Posts
При использовании zsh tab-completion игнорируйте CDPATH, если локальный файл или каталог совпадают Пожалуйста, объясните параметр -f в pgrep Время доступа не обновляется, когда я запускаю `ls a`, а затем` stat a` Минимальное диалоговое окно настроек xfce4-display-settings не отображает параметр «перейти вправо» Скрипт для изменения cronjob Как я могу изменить сетевое устройство по умолчанию «ens33» на старое «eth0» на Fedora 19? SSH вызывает остановку цикла Почему можно ссылаться на закрытый stderr под bash? iptables не работает на мобильной широкополосной сети Проверка состояния батареи Arch Linux установка ISO Запустите разные версии Firefox из главного меню или элемента панели xfce4 Создание .img из tarball: устройства / dev / loop Как использовать команду replace в Linux для числа вхождения в букву? Уровень совместимости Linux для IBM AIX Как сравнить число с плавающей запятой в сценарии оболочки

Предупреждение о записи во время ввода сообщения zsh

Я знаю, что можно отобразить текст «снаружи» приглашения zsh, где вы печатаете. Общий пример: доработки:

myhost Wed 8 10:06 ~/sandlot $ e .py█ 

Нажмите Tab , и вы:

 myhost Wed 8 10:06 ~/sandlot $ e .py█ -- file -- lenum.py lexample.py otherticks.py 

Меня интересует текст из --file-- ниже. Есть какой-то «zsh_echo_below_zle» или что-то в этом роде. Я не против про клавиатуру или ярлыки, так как я намерен запустить и использовать вывод в zle. Sa

 myhost Wed 8 10:06 ~/sandlot $ some_command $(some_command_with_warning)█ 

Нажмите вкладку и

 myhost Wed 8 10:06 ~/sandlot $ some_command some_output█ -- warning: some_output is about yadda yadda yadada -- 

Внутри системы завершения ZSH пользовательское сообщение после разметки вкладки для конкретного аргумента команды возможно с помощью функции _message , как показано в этом скрипте завершения ( _foo ) для конкретной команды ( foo ):

 #compdef foo local curcontext="$curcontext" state _arguments -C -s \ '1: :->dofoo' \ && return 0 case "$state" in dofoo) _message -r " -- warning: lp0 on fire" _values "parameters" $(_call_program getparam echo aaa bbb) ;; esac 

Например

 % ls $fpath[*]/_foo 2>/dev/null /Users/jdoe/.zsh/functions/_foo % rm ~/.zcompdump && exec zsh % function foo () { echo "$@" } % foo █ -- warning: lp0 on fire aaa bbb 

(При изменении $fpath для включения настраиваемого каталога всегда делайте это до команд autoload -U compinit && compinit .)

Однако, учитывая командную строку echo $(foo bar)█ , завершение _foo не задействовано, когда табуляция _foo , так как это подстановка команды, а не автозаполнение foo .

Во время подстановки команды заменяемая команда не имеет указаний на то, выполняется ли она непосредственно или как подстановка команд (имеется специальная переменная ZSH_EVAL_CONTEXT хотя при экспорте она указывает только на toplevel ZSH_EVAL_CONTEXT ) и запись на терминал, тогда восстановление позиции курсора будет сложно:

 % cat awkward #!/bin/zsh echo -ne "\e7\n -- warning: lp0 on fire\e[F\e8" >/dev/tty; echo blat % ./awkward blat % echo $(./awkward) 

… хотя это вряд ли идеально, как будто подсказка внизу внизу экрана, происходят ужасные ошибки:

 % echo -ne "\e[$LINES;0H" ... % ./awkward blatwarning: lp0 on fire % echo $(./awkward ) -- warblat fire 

Более сложная программа должна иметь дело с тем, чтобы быть в нижней части терминала, или даже использовать ncurses для переносимости, и нужно будет как-то указать zsh что любая настраиваемая строка (строки), написанная (может), должна быть очищена, дисплей не рискует быть сброшенным с выходом следующей команды. Но это больше.

Код zsh в Src/exec.c не похож на то, что он делает что-то особенное для задания cmdsubst , а preexec hook preexec не вызывается для подстановки команд. Таким образом, я действительно не вижу ничего простого для пользовательского обмена сообщениями терминала под быстрым вызовом во время выполнения замены команды в zsh .