f

2015-10-31

Dynamic terminal title on bash, zsh, tmux

ターミナルのタイトルを設定する。CygwinとかMSYS2とかgnome-terminalなどの端末を起動すると,ウィンドウのタイトルが表示される。既定だとターミナルのタイトルは起動してから変わらないのでもう少し有益な情報を載せたい。そこで端末タイトルの動的な設定方法を調べた。

以下のページで端末のタイトルの設定方法が詳しく書いてある。

参考:How to change the title of an xterm http://tldp.org/HOWTO/Xterm-Title.html

[How to change the title of an xterm: Dynamic titlesによると,エスケープ文字(文字コード:\033;)で始まり,ベル(文字コード:\007)で終わるように囲めばよいらしい。また,エスケープ文字\033;の直後に0, 1, 2,を記入すると,それぞれウィンドウタイトル+アイコン名(タスクバーの名前),アイコン名,ウィンドウタイトルを設定できるようだ。また,bashなどでは\033の代わりに\eも使える。

アイコンとウィンドウ名を設定するには以下のようにエスケープ文字を出力すればよい。

echo -n "\033]0;${USER}@${HOST}\007"

上記設定を工夫して,現在のシェルとホスト名,ディレクトリも表示させる。

bashではPROMPT_COMMANDに設定する。プロンプトが表示される度にこの変数に設定された内容が実行される。

同様のことをzshでするにはprecmd()関数を使う。

zshにはHOSTHOSTNAME変数は設定されないのでhostnameコマンドから設定する。また,$0変数により現在のシェルも表示するようにする。

以下の設定によりこの内容を表示できる。

~/.bashrc~/.zshrc

case "${TERM}" in
  ?term*|rxvt*|screen) PROMPT_COMMAND='echo -ne "\033]0;$0@${HOSTNAME:=$(hostname)}: ${PWD/$HOME/"~"}\007"';;
esac

~/.zshrc

precmd() {eval "${PROMPT_COMMAND}"}

基本的に作業中はtmuxを使っているので,tmuxの起動中にもタイトルを変更できるようにしたい。以下を参考にして~/.tmux.confにも設定する。

参考:$PWD in window title bar, both in Bash and Tmux - Stack Overflow http://stackoverflow.com/questions/21607282/pwd-in-window-title-bar-both-in-bash-and-tmux

set -g set-titles on
set -g set-titles-string '#T'

上記の設定を施すことで以下のように望みの結果得られた。ホスト名と現在ディレクトリがタイトルにも表示されている。

参考

  • How to change Gnome-Terminal title? - Ask Ubuntu http://askubuntu.com/questions/22413/how-to-change-gnome-terminal-title
  • 漢のzsh (2) 取りあえず、プロンプトを整えておく。カッコつけたいからね | マイナビニュース

0 件のコメント:

コメントを投稿