如何从 shell 以格式动态更改屏幕硬状态?

如何从 shell 以格式动态更改屏幕硬状态?

如何从 shell 中通过格式动态更改屏幕硬状态?我已成功使用 256 种颜色和标签等配置屏幕,这是我的 .screenrc:http://pastebin.com/g8XbMWBH

我使用标签的标题和硬状态作为其应有的样子:消息状态行。

我想要做的事情很简单:在硬状态上显示彩色消息,从 shell 脚本返回。

以下是我目前所做的事情:

# 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

我仍然不明白如何重新格式化硬状态字符串,也不知道如何向其发送颜色代码,甚至不知道是否可行?在这里和各处搜索了几个小时,现在我累了,想问一下,谢谢!

答案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 文件中,您可能已经知道,使用反引号命令调用上述脚本:

# .screenrc
backtick 101 5 5 /path/to/script.sh

hardstatus alwayslastline "%101`"

答案2

backtick如果您希望 hardstatus 每 x 秒更新一次,gnil 的解决方案非常有用。如果您只希望在 shell 上执行某些操作时更新 hardstatus(当你按下回车键)那么最好按照以下步骤操作

  1. 放在你的硬状态行的某个地方%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"

相关内容