Как динамически изменить хардстат экрана с форматом, из оболочки?

Как динамически изменить хардстат экрана с форматом, из оболочки? Я успешно настроил экран, используя 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), то лучше выполнить следующие шаги

  1. положить где-нибудь в вашей линии hardstatus %h
  2. проверить это, выполнив echo -ne '\x1B_Hello World\x1B\ это должно показать Hello World в вашем хардстате, где вы разместили %h
  3. создать скрипт, похожий на предложенный gnil HARDLINE="\005{g}$PWD\005{-}" echo -ne '\x1B_'$HARDLINE'\x1B\'
  4. Протестируйте этот скрипт, когда вы запустите его, вы должны увидеть текущий рабочий каталог в вашем жестком состоянии
  5. Чтобы этот скрипт выполнялся каждый раз, когда вы нажимаете Enter, обновите ваш.bashrc и добавьте эту строку

    export PROMPT_COMMAND="set_hardline"

Другие вопросы по тегам