I am LAZY bones? AN ancient AND boring SITE

2009年 03月 06日 的归档

修改gnome-terminal的title的办法和杂七杂八的ANSI控制码记录

折腾这个的原因是:有时候gnome-terminal的窗口开多了,就容易忘记哪个是哪个了,尤其是用脚本登录到多个不同服务器以后,就经常会混淆,把原本想在这个服务器上执行的命令输到那个服务器的窗口里面去了。这样有可能会造成非常严重的后果。
当然也有手工的解决办法,就是登录一个服务器就在 终端 – 设置标题 那里设置一下,就可以固定住了,但是这样每开一个tab都设置一下的办法确实很麻烦,所以我想修改脚本来实现把参数设置成标题。
想到平时emerge的时候,tab的标题是会变的,所以翻出portage的源码找,也找着了,把py的翻译成了bash的也很容易,简单的说,就是下面这一句:

echo -ne "\e]0;test\a" >&2 && sleep 3

在执行的3秒钟里,就可以看到title已经变成了test了。不过3秒一过,马上又变回PS1的样子了(具体是什么和 编辑-配置文件首选项-标题和命令 里面的设置有关)。写到sssh脚本里面也一样,在登录的瞬间是可以看到自定义的标题的,但是登录成功以后,又变成了远程机器的PS1的样子。
看了一下gnome-terminal的代码,似乎在不修改gnome-terminal的情况下是搞不定了,呵呵,得搞个接口修改gnome-terminal的内部数据?

另外,记一下不完全的ANSI控制码吧,上面这个改标题的,也是用了其中的一个:

\e[0m 关闭所有属性
\e[1m 设置高亮度
\e[2m 变暗
\e[4m 下划线
\e[5m 闪烁
\e[7m 反显
\e[8m 消隐
\e[9m 删除线
\e[30m ~ [37m 设置前景色(颜色值见下面说明)
\e[40m ~ [47m 设置背景色(颜色值见下面说明)
\e[nA 光标上移n行
\e[nB 光标下移n行
\e[nC 光标右移n行
\e[nD 光标左移n行
\e[y;xH 设置光标位置
\e[2J 清屏
\e[K 清除从光标到行尾的内容
\e[s 保存光标位置
\e[u 恢复光标位置
\e[?25l 隐藏光标
\e[?25h 显示光标

颜色代码:
  0 - 黑色     4 - 蓝色
  1 - 红色     5 - 粉红色
  2 - 绿色     6 - 青色
  3 - 黄色     7 - 白色

部分属性可以叠加进行设置,中间用“;”隔开,例如设置绿色前景、红色背景并高亮显示可以这样写: \e[01;32;41m

目前还没有找到所有代码的含义要查看全部的代码,请参考Emca-048标准。以上引用部分内容自出处一出处二