Как динамически изменить хардстат экрана с форматом, из оболочки?
Как динамически изменить хардстат экрана с форматом, из оболочки? Я успешно настроил экран, используя 256 цветов и вкладок и так далее, вот мой.screenrc: http://pastebin.com/g8XbMWBH
Я использую заголовок для вкладок и hardstatus, как это должно быть: строка состояния обмена сообщениями.
то, что я хочу сделать, очень просто: показывать цветные сообщения на жестком статусе из сценариев оболочки.
Вот что мне удалось сделать на этом этапе:
# changing xterm window title:
echo -e '\033k'window_title'\033\\'
echo -ne "\ek window_title\e\\"
# sending non colored messages to hardstatus:
echo -ne "\e! hardstatus_global_message\e\\"
echo -ne "\e^ hardstatus_private_message\e\\"
# reformating the hardstatus string:
echo -ne "\e]0; %{.BW}%{..G}colored hardstatus try\e\\"
echo -ne "\e_ %{.BW}%{..G}colored hardstatus try\e\\"
Коды выхода доступны здесь: http://yz.kiev.ua/www/etc/screen-virt-term.txt
я до сих пор не вижу, как переформатировать строку hardstatus, ни как отправить ей цветовые коды, ни вообще, возможно ли это или нет? искал здесь и везде часами, теперь я устал и спрашиваю, спасибо!
2 ответа
Можно покрасить строки hardstatus, как вы говорите. При использовании цветовых кодов в качестве выходных данных сценария вам необходимо использовать специальный символ ASCII (005) для экранирования цветовых кодов вместо знака процента (%), который обычно используется в файле.screenrc. В примере сценария у вас будет что-то вроде этого:
#script.sh
Black="\005{K}"
Red="\005{R}"
Green="\005{G}"
Yellow="\005{Y}"
Blue="\005{B}"
Purple="\005{M}"
Cyan="\005{C}"
White="\005{W}"
echo -ne "Here is$Green Green$White text."
Затем в вашем файле.screenrc, как вы, возможно, уже знаете, вызовите приведенный выше скрипт с помощью команды backtick:
# .screenrc
backtick 101 5 5 /path/to/script.sh
hardstatus alwayslastline "%101`"
Раствор Гниля с backtick
очень полезно, если вы хотите, чтобы hardstatus обновлялся каждые x секунд. Если вы хотите, чтобы hardstatus обновлялся только когда вы выполняете что-то в оболочке (когда вы нажимаете Enter), то лучше выполнить следующие шаги
- положить где-нибудь в вашей линии hardstatus
%h
- проверить это, выполнив
echo -ne '\x1B_Hello World\x1B\
это должно показатьHello World
в вашем хардстате, где вы разместили%h
- создать скрипт, похожий на предложенный gnil
HARDLINE="\005{g}$PWD\005{-}" echo -ne '\x1B_'$HARDLINE'\x1B\'
- Протестируйте этот скрипт, когда вы запустите его, вы должны увидеть текущий рабочий каталог в вашем жестком состоянии
Чтобы этот скрипт выполнялся каждый раз, когда вы нажимаете Enter, обновите ваш.bashrc и добавьте эту строку
export PROMPT_COMMAND="set_hardline"