本文来自依云's Blog,转载请注明。
tmux 我已经用了好几年了,然而从未使用得多么深入,偶尔有些小不满也一直没有去研究看看能不能解决,其中就包括这么一项:tmux 窗口名称(就是显示在状态栏上的那个)默认会随着前台所运行的命令的不同而自动变化。但是,如果窗口名称被设置过之后,不管是通过prefix A设置的,还是通过终端转义序列设置的,之后它就再也不会自动变化了。
本来这也不是多大的事。偶尔会因为不小心往终端输出了些二进制数据弄乱终端标题,我要么是把它重新设置成「zsh」,要么直接关掉再开一个窗口,反正是很容器的事情。可是呢,公司服务器的 zsh 会把终端标题设置成当前的工作目录,ssh 退出时也不会清除。本来呢,我是专门再开一个终端来跑,完事之后再关掉。可是,习惯的力量是巨大的,我还是会时不时地在 tmux 窗口里 ssh 连过去,然后 tmux 窗口名称就坏掉了。
今天我终于决定把此事查个水落石出。既然主动设置之后就不再变化,那么 tmux 肯定用某种方法把「主动设置过窗口名称」这个信息给记录了下来。然后我就去 tmux 源码里找啊找,结果很意外地看到一个叫「automatic-rename」选项!敢情 tmux 早知道有人会对此不爽,专门弄了个选项呀。然后直接在1500行的 man 文档里搜索这个选项名称就可以了。
默认,tmux 的「automatic-rename」选项的全局值为「on」,也就是根据正在前台运行的命令自动设置。一旦窗口获得了一个用户或者程序指定的标题,不管是创建窗口时指定的,还是后来通过「rename-window」改的,又或者是通过终端转义序列改的,窗口局部的「automatic-rename」值就会被设置为「off」,也就是不会再自动变化了。所以,想要恢复 tmux 窗口的这个行为,只要把这个选项再次打开即可:
tmux setw automatic-rename on
或者,取消设置此窗口的局部值,这样 tmux 会使用全局值:
tmux setw -u automatic-rename
终于又解决了一个困扰已久的小麻烦~话说,直接去源码里寻找,远比在比 wget 手册还要长的 manpage 里乱逛要高效呢=w=
Jan 20, 2015 09:26:55 PM
主要是源码里面逻辑比较清晰吧....
Jan 20, 2015 11:12:48 PM
不是。源码里的关键词比较好猜,也多,更容易命中~
Jan 21, 2015 09:17:43 AM
不明觉厉,纯占板凳
Jan 21, 2015 09:27:32 AM
我也遇到过这个问题,也是没有注意。
你说的这个 automatic-rename 选项,应该是新加的,Ubuntu 12.04 里面没有。
Jan 21, 2015 09:30:21 AM
有些软件的手册写得跟天书一样,又不给示例,一看就头大。
Jan 21, 2015 11:09:03 AM
我也用tmux。我现在是用byobu+tmuxinator, 感觉还不错。
Jan 21, 2015 11:29:02 AM
好老的版本……是 tmux 1.6 吗?那个版本我观察到了内存泄漏呢。
我查了一下,这个选项是 20 January 2009 添加的,从 github 上取得的源码库里的 git 提交是 2d15f5985930f493d6df7f58399639ae64057c4a,tmux 0.8 就已经包含了的呀。
Jan 22, 2015 09:20:29 AM
对,tmux 1.6,由于环境需要,暂时还不能升级,先凑合用吧,我另外有一个ArchLinux,回头再试试。
Nov 16, 2015 09:49:30 AM
设置为on的时候,打开一个程序,自动变成程序名,而设置为off的时候,远程登陆服务器的时候,会变成远程服务器的名字,蛋疼
Dec 16, 2015 02:34:50 PM
终于解决了,依云的方法只能解决部分