ZSH «липкая» подсказка

У меня есть тема ZSH, выводящая статус моих виртуальных машин Vagrant/VBox с использованием RPROMPT='$(vbox_status)' в моем файле .zsh-theme (где vbox_status вызывает скрипт, который выводит то, что запущено), например:

тема ZSH

Тем не менее, мне интересно, есть ли способ сделать этот вывод «липким», чтобы вместо вывода в конце каждой отдельной строки он оставался в позиции, указанной стрелкой, и просто обновлялся всякий раз, когда новая строка выводится выше.

eg.

введите здесь описание изображения


person Greg Annandale    schedule 17.06.2014    source источник
comment
Вам не нужно (или очень хочется) делать это в подсказке. В zsh загляните в функции preexec и precmd. Для bash загляните в PROMPT_COMMAND и установите ловушку DEBUG.   -  person William Pursell    schedule 18.06.2014


Ответы (1)


Вы можете сделать это с помощью команды tput.

Я сделал базовый скрипт, который помещает строку в угол экрана, которая поможет вам начать работу. Вы можете сделать его намного лучше, удалив элементы и выделив их или что-то еще, но это отправная точка:

#!/bin/bash
screen_w=$(tput cols)   # Get screen width.
screen_h=$(tput lines)  # Get screen height.
str=$*                  # String to put in corner.
string_w=${#str}
let "x = $screen_w - $string_w"

tput sc               # Save current position
tput cup $screen_h $x # Move to corner
echo -ne $str         # Put string in the corner
tput rc               # Go back to saved position.
echo " >"             # Some kind of prompt

Таким образом, вы можете настроить свое приглашение для запуска этого следующим образом (я назвал приведенный выше скрипт pr.sh)

PS1=$(pr.sh $(date))

В zsh может быть по-другому, но я уверен, что вы справитесь с этой частью. Просто измените часть $(date) на команду состояния. (пр.ш должен быть на вашем пути)

Это немного неуклюже, но это поможет вам начать. Практически нет ограничений на то, что вы можете делать с tput!

person John C    schedule 18.06.2014
comment
Блестящий, это делает трюк! Я обновил свой Gist, чтобы показать полное решение с ZSH: gist.github.com/grega/61355d041ccfaef66419< /а> - person Greg Annandale; 18.06.2014
comment
Пример с 1 работающей ВМ: evernote.com/shard/s153/sh/cf208c18-9d87-47d0-afb2-4b19c28662b8/ - person Greg Annandale; 18.06.2014
comment
Спасибо за интересный вопрос. - person John C; 18.06.2014