44 iTerm2 のタイトルを設定する

(しばらく工事中)

リモート・ホストを色々いじっている場合に、 シェルのプロンプトにホスト名を入れるというのをする人がいた。 どこで作業しているか、分かるように。

複数のホストで作業をしているとき、 このシェルはどこの作業か分かりにくいことがある。 研究室のMacの大きな画面を使っているとき、 画面上のウィンドウの場所で何となく区別をつけていたのだけど、 自宅で MacBook で作業しているときは画面が狭いので、 ウィンドウの場所では区別しにくい。 少しでもぼうっとしていると、これはどこだっけ?になりやすい。間違いのもと。

それでシェルのプロンプトにホスト名を入れようか、とも考えたけれど、 プロンプトを見るのにスクロールが必要なことが多くて、 あまり実用的ではなさそう。

そういえば、iTerm2 のウィンドウには、 いつも走っているプロセスの名前ついているな。使ったことはなかったけれど、 そこに表示すればいいのかな。やってみよう。

「ターミナルのウィンドウとタブに自動的に名前をつける」

真似をしよう。この人はディレクトリィをタイトルにつけた訳だけど、 私は hostname をつけよう。

~/.zshrc に書き加える
function precmd() {
  local hname=`hostname -s`
  # カレントディレクトリを $HOME を ~ として表示
  local wname=`pwd | sed -e "s|$HOME|~|"`
  # カレントディレクトリ名
  local tname=`pwd | sed -e 's|^.*/||'`

  echo -ne "\033]2;$hname:$wname\007" # window title
  echo -ne "\033]1;$hname:$tname\007" # tab title
}

なかなか便利かもしれない。

あれ?純正ターミナルでは表示が変だな。


iTerm2 の Documentation の 「Session Title」 に詳しい説明がある。色々なやり方でいじれるらしいが、その中の
Receiving a control sequence that updates the "icon title". These are OSC 0 and OSC 1.
を使っているということか。 ESC ] が OSC (Operating System Command) 開始で、 OSC 0/1/2 Title BELL というフォーマット。なるほど。 \007 はベルだものね。


さて、hostname の出力だけど、 固定 IP アドレスを振ってあるホストの hostname はドメイン名になるのかな? 固定 IP アドレスを振っていない、 モバイルの MacBook はドメイン名を持っていないけれど、 “ローカルホスト名” とかつくのか。 その辺は man hostname 読んでも良く分からない (真面目にマニュアルの整備をしていないのだな)。 別のところに、 ローカルホスト名は、 [システム設定]→ [情報]→ [共有]の “ローカルホスト名” で設定できる、とか書いてある。



桂田 祐史