Раскрасить STDIN в терминале - PullRequest
0 голосов
/ 20 марта 2012

Как я могу раскрасить ввод (STDIN / обратная связь для того, что я печатаю) в zsh вне командной строки zsh?

В качестве справки, это то, что я хочу сделать с помощью ввода: http://en.gentoo -wiki.com / вики / Zsh # Colorize_STDERR

Окрашивание STDOUT вместо STDIN при установке цвета терминала на самом деле не вариант, потому что это сделает приложения из черного списка (ncurses stuff: emacs, irssi, ...) намного сложнее.

Ответы [ 5 ]

2 голосов
/ 20 марта 2012

Я не знаю, как изменить stdin, но это сделает stdout зеленым и stderr красным:

exec 1>>(while read line; do
  print '\e[92m'${(q)line}'\e[0m' > /dev/tty; print -n $'\0'; done &)
exec 2>>(while read line; do
  print '\e[91m'${(q)line}'\e[0m' > /dev/tty; print -n $'\0'; done &)

1 выше относится к stdout (exec 1>> ...), а 2относится к stderr.0 будет для стандартного ввода, но приведенные выше строки, похоже, ничего не сделают, если вы начнете их с exec 0>>.

Полагаю, если вы хотите изменить стандартный ввод, вы можете изменить цвет своего терминала на любой другойхотите использовать для stdin, а затем использовать что-то вроде вышеупомянутых команд, чтобы изменить stderr и stdout на что-то другое ...

0 голосов
/ 02 ноября 2017

Если ZSH отправляет сигнал DEBUG перед выполнением каждой команды (это делает BASH), вы можете добиться желаемого эффекта, добавив escape-последовательности в конце вашей переменной PS1 и сбросив ее до значения по умолчанию непосредственно передвывод отображается путем захвата сигнала Bash DEBUG.

Например, попробуйте добавить \[\e[1m\e[3m\e[93m\] (т.е. полужирный, курсив, желтый) в конце переменной PS1, а затем выполните trap 'tput sgr0' DEBUG ипосмотрите, работает ли он.

Вот скриншот с моего терминала: bold, italic and yellow commands

0 голосов
/ 22 марта 2012

fish shell может вас заинтересовать, он имеет подсветку синтаксиса в командной строке при вводе, но я не рассматриваю его как стабильную оболочку (некоторые основные ошибки, которые я видел в прошлом году, и еще несколько пользователей) и не соблюдает общеизвестные соглашения (например, $? для кода возврата).

0 голосов
/ 21 марта 2012

Вы не можете сделать это без передачи результатов через другой процесс. Одной из возможностей была zsh-версия, опубликованная yellowantphil. Существуют и другие инструменты, которые проще в использовании, включая, помимо прочего, regex-markup , supercat и swatch .

0 голосов
/ 20 марта 2012

Вы не можете: вход для программ поступает непосредственно на терминал (tty), вход выводится на терминал без ведома zsh.

...