Материал дисплея ниже подсказки при приглашении оболочки?

Вы ничего не должны делать на самом деле; псевдонимы делают это автоматически. Например:

$ alias less="less -eirqM"
$ less foo.txt

Вы будете видеть первую страницу foo.txt, и less выйдет в EOF (-e), поиски будут нечувствительны к регистру (-i) и т.д.

21
14.01.2011, 02:29
2 ответа

Следующие настройки, кажется, работают. Текст на второй строке исчезает, если командная строка переполняет первой строки. preexec функция стирает вторую строку прежде, чем выполнить команду; если Вы хотите сохранить его, измениться на 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]; }

% Escape документируются в zsh руководство (man zshmisc).

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

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

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

17
27.01.2020, 19:43

Вот a bash эквивалентный из zsh решения Gilles. 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 строка является hacky способом эмулировать zsh's preexec функция. См. https://superuser.com/questions/175799/для большего количества информации.

Править: Улучшенный сценарий на основе комментариев Gilles.

5
27.01.2020, 19:43
  • 1
    @Gilles: Спасибо за вход! Я думаю, что у меня есть он работающий лучше теперь. Испытанный удар 4.1.5 в терминале гнома и xterm и ударе 3.2.48 в Терминале OSX. –  Jander 14.01.2011, 02:12

Теги

Похожие вопросы