Показывать материал под подсказкой в ​​командной строке?

Позволяет сказать, что мое приглашение выглядит так (_ представляет собой мой курсор)

~ % _ 

Есть ли способ заставить это выглядеть так

 ~ % _ [some status] 

Вопрос был первоначально о zsh, но теперь есть другие ответы.

2 Solutions collect form web for “Показывать материал под подсказкой в ​​командной строке?”

Кажется, что работают следующие настройки. Текст во второй строке исчезает, если командная строка переполняет первую строку. Функция preexec стирает вторую строку перед запуском команды; если вы хотите сохранить его, измените на preexec () { echo; } preexec () { echo; } .

 terminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1] PS1_2='[some status]' PS1="%{$terminfo_down_sc$PS1_2$terminfo[rc]%}%~ %# " preexec () { print -rn -- $terminfo[el]; } 

% escapes задокументированы в руководстве zsh ( man zshmisc ).

Терминал – это API терминального доступа. Zsh имеет модуль terminfo который предоставляет доступ к базе данных описания терминала: $terminfo[$cap] – это последовательность символов для отправки для использования возможности терминала $cap , т. Е. Для запуска команды $cap . См. man 5 terminfo (для Linux, номер раздела может отличаться для других узлов) для получения дополнительной информации.

Последовательность действий: перемещение курсора вниз по одной строке ( cud1 ), затем резервное копирование ( cuu1 ); сохранить позицию курсора ( sc ); переместите курсор вниз на одну строку; напечатать [some status] ; восстановить позицию курсора. Бит вниз и вверх в начале необходим только в том случае, если приглашение находится в нижней строке экрана. Строка preexec стирает вторую строку ( el ), так что она не смешивается с выходом из команды.

Если текст во второй строке шире терминала, дисплей может быть искажен. Используйте Ctrl + L для исправления.

Вот bash эквивалент решения zsh Жиля. У Bash нет собственного модуля terminfo, но команда tput (в комплекте с terminfo ) делает то же самое.

 PS1_line1='\w \$ ' PS1_line2='[some status]' if (tput cuu1 && tput sc && tput rc && tput el) >/dev/null 2>&1 then PS1=" \[$(tput cuu1; tput sc)\] \[${PS1_line2}$(tput rc)\]${PS1_line1}" PS2="\[$(tput el)\]> " trap 'tput el' DEBUG else PS1="$PS1_line2 :: $PS1_line1" fi 

Если терминал не поддерживает одну из возможностей, он возвращается к однострочному запросу.

Линия trap – это хакерский способ эмуляции функции preexec zsh. См. https://superuser.com/questions/175799/ для получения дополнительной информации.

EDIT : улучшенный скрипт, основанный на комментариях Gilles.

  • Переопределяемые функции в Zsh
  • Возможно ли возобновить источник .bashrc и .zshrc И удалить функции один раз внутри них без перезапуска?
  • В чем разница между тем, где и где
  • zsh: завершение меню для glob
  • Глобус не работает в zsh, но работает в bash
  • zsh завершение по истории не работает
  • Как создать строку с недопустимыми символами юникода, в Zsh?
  • Как сообщить остальной системе, что моя оболочка изменилась с zsh на bash?
  • Функция Bash не работает в Zsh
  • tmux start process, если он еще не запущен
  • Почему мой вывод не завершается в tmux?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.