如何从 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(当你按下回车键)那么最好按照以下步骤操作
- 放在你的硬状态行的某个地方
%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"