2

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

1

Можно покрасить строки 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`"
0

Решение gnil с 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .