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

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

~ % _ 

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

 ~ % _ [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.

  • $ {# array} vs $ {# array }
  • Как указать тайм-аут для завершения вкладки в zsh?
  • Отключить классификаторы glob в zsh
  • Как использовать `which` в команде aliased?
  • как grep для пакетов на основе несжатого размера файла?
  • Многомесячный просмотр в календаре (cal) в OS X
  • Сделайте выбор автозаполнения zsh, даже если введено возможное совпадение
  • Невозможно сделать .zhistory символической ссылкой
  • История-поиск в zsh работает только для команд?
  • Zsh очистить командную строку от вызова zsh / sched
  • Обновление функций оболочки и псевдонимов через переменные среды
  • Interesting Posts

    не может изменить разрешение файла

    Что такое $ PWD? (vs текущий рабочий каталог)

    Если количество строк в строке csv больше, чем x, то удалите второй экземпляр

    Отключить выключение экрана в KDE во время просмотра iPlayer

    Как получить номер строки выбранного элемента Zenity

    Почему чтение / proc / net / tcp занимает много времени ss быстро возвращает те же данные о таблице соединений?

    bash: содержание grepping столбца, которое является динамическим

    Почему мой Debian jessie всегда находится на уровне 5?

    bash: регулярные выражения в выражении if

    Просмотр / управление пространствами имен mount в Linux

    Раздельный / загрузочный раздел на USB

    gzip-файлы с кошкой и из трубы дают разные результаты

    Как узнать, какой IRQ отвечает за высокую загрузку процессора

    Подключение к серверу для удаленного доступа к компьютеру Linux через графический интерфейс

    Как избежать этой строки скрипта bash?

    Linux и Unix - лучшая ОС в мире.