2014-06-17 2 views
2

У меня есть тема ЗШ выводящий статус моего Бродячей/VBox виртуальных машин с помощью RPROMPT='$(vbox_status)' в моей .zsh-файл темы (где vbox_status звонки a script which outputs what's running), например так:ЗШ 'Sticky' Подскажите

ZSH theme

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

например.

enter image description here

+1

Вам не нужно (или действительно хотите) сделать это в подсказке. В zsh просмотрите функции 'preexec' и' precmd'. Для bash загляните в PROMPT_COMMAND и установите ловушку DEBUG. –

ответ

2

Вы можете сделать это с помощью команды под названием 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) на вашу команду статуса. (pr.sh должен быть на вашем пути)

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

+0

Блестящий, это делает трюк! Я обновил свой Gist, чтобы показать полное решение с ZSH: https://gist.github.com/grega/61355d041ccfaef66419 –

+0

Пример без запуска виртуальных машин: https://www.evernote.com/shard/s153/sh/ 6bc2d85e-d9b7-4a69-8cf5-b831b0bd90ec/680ec902d7d540f94ace5aff5d80f6f6/res/5b3085c0-f003-4d26-ac9c-2fbe4d4ecccf/skitch.png? ResizeSmall & width = 832 –

+0

Пример с 1 VM: https://www.evernote.com/shard/ s153/sh/cf208c18-9d87-47d0-afb2-4b19c28662b8/8758ef7286dfc035381ab1e2f5d3c28f/res/8a47b88d-cb78-4519-9857-040a7c93e91c/skitch.png? resizeSmall & width = 832 –