1

Я хотел бы настроить свой zshell так, чтобы подсказка прижималась к левой границе, как обычно. Я также хотел бы иметь отступ всех результатов выполнения, возможно, на 2 пробела. Есть ли способ сделать такой отступ?

Я экспериментирую с подсказкой в 2 строки:

PROMPT='
%{$fg[gray]%}PWD:%{$reset_color%}%{$fg[cyan]%}%~ %{$reset_color%}
%{$fg[red]%}> '

Было бы неплохо выделить этот запрос в отдельной колонке.

1 ответ1

1

Я думаю, что это не так просто, как можно подумать. Вы должны перехватить STDOUT, так как внешние программы напрямую пишут в этот канал.

Следующее является своего рода доказательством концепции . Имейте в виду, что это сломает многие вещи, а именно интерактивные программы, такие как man , less и т.д. Так что это не пригодно для повседневного использования, но легко форматирует сеанс оболочки для сообщения, например, SU.

Этот подход был опубликован Atom Smasher в zsh-users в субботу 16 мая 2009 года для раскрашивания STDERR . Я принял это к вашим требованиям:

# ## indent_output.zsh ##

zmodload zsh/terminfo zsh/system
autoload is-at-least

indent_output() {
  while sysread line
  do
    testline=${line//$'\n'/$'\n'   }
    syswrite "   ${testline}"      
  done
}

precmd() { sleep 0 }

## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec  > >(indent_output)

Сложная часть - exec > >(indent_output) которая обрабатывает весь вывод замещающей оболочки через функцию indent_output . Определение precmd необходимо, чтобы избежать условия гонки, в противном случае новое приглашение выводится перед фактическим выводом выполненной команды.

Вот демо:

% source indent_output.zsh
% ls /bin | head
   [.exe
   2to3
   2to3-3.2
   411toppm.exe
   7z
   7za
   7zr
   a2p.exe
   aaflip.exe
   aclocal
   %
% date
   Sat, Nov 08, 2014  5:58:29 PM
   %
% cat /usr/share/doc/foo
   cat   :       /usr/share/doc/foo   :    No such file or directory   
   %
% cat /usr/share/doc/zsh-5.0.6/INSTALL| head
                           ++++++++++++++
                           INSTALLING ZSH
                           ++++++++++++++

   This file is divided into two parts:  making and installing the shell, a
   note on the script run to set up the environment for new users, and
   a description of various additional configuration options.  You should
   have a look at the items in the second and third parts before following the
   instructions in the first.

   %
% 

Вы можете избавиться от знака % перед каждым приглашением (которое означает, что последняя строка не заканчивается CR) с помощью этих двух параметров:

setopt PROMPT_CR NO_PROMPT_SP

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .