2013/03/20

修改 xterm 的 title

我是 Gnome Terminal 分頁的重度使用者,往往一開就是十多個分頁。有些在不同工作目錄編輯文件;有些可能在用 gdb 除錯;有些連到其他主機做編譯之類的任務。這樣非常方便,但有一個很大的困擾:經常找不到想去的分頁。

Gnome Terminal 分頁預設以使用者+主機+工作目錄當作 title。乍看之下,似乎可以達到某個程度的分辨功能,但一來相似度太高,二來分頁一多 title 就只剩下前面相同的部份。因此,到後來只能憑腦袋記憶分頁位置。無奈,年紀越大,記憶就越不靈光...

以下介紹解決這個問題的方法:自訂 xterm 的 title (只針對 bash 來介紹,其他 shell 可能能需要些微調整)。

修改 title 的指令為:
echo -ne "\033]0;NEW TITLE\007"
若你當場測試,八成會說我騙你。請再試試以下指令:
echo -ne "\033]0;NEW TITLE\007"; read
第一個指令看起來無效的原因是因為 bash 在完成你的指令之後,馬上又將他改掉了。第二個指令多加一個 read,就是為了讓你看清楚。利用這個特性,內容如下的 ~/bin/vi 在你用 vi 編輯 hello.c 時分頁 titile 會是 "vi hello.c",讓你一目了然:

#!/bin/bash
echo -ne "\033]0;vi $*\007"
/usr/bin/vi $*
同樣的方法,你可以應用到 gdb、adb、minicom 等等。

順道一提,每次在 bash shell 執行完指令就會設定一次 titile,這個動作是設定在 .bashrc 的以下段落:
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac
注意 PS1 定義。其中 \e 和 \a 相當於前面指令的 \033 和 \007、\u 是使用者名稱、\h 是主機名稱、\w 是工作目錄。切換目錄時 title 會跟著改,就是因為 \w 的關係。\w 用在 prompt 很好,但當作 title 就太長了,建議用 \W 當 title,也就是整個路徑的最後一個目錄名稱。

參考資料

沒有留言: