tab title, pane titleにcurrent pathを設定する
OSC
https://wezfurlong.org/wezterm/shell-integration.html のページに OSC 133
という単語が出てくる。
エスケープシーケンスで意味のあるマークを挿入して、コマンドの出力を一まとまりに扱うための仕様らしい。
ZshでOSC 133に対応する
https://gitlab.freedesktop.org/Per_Bothner/specifications/blob/master/proposals/semantic-prompts.md
ANSI escape sequences にはいくつかカテゴリが存在するらしい
よく色つけに使われる \033[XXXm
というのもこれ
\033
, \x1b
, \e
などはどれもESCを表す
この \e[
を CSI (Control Sequence Introducer) といい、 \e]
は OSC (Operating System Command) という
これを踏まえて、 wezterm で変数を扱えるようにしたりタイトルを設定したりする
変数を設定する
https://wezfurlong.org/wezterm/config/lua/pane/get_user_vars.html
とすると、以下のようにして取得できる
つまり OSC 1337 + SetUserVar=key=value
+ \007
とすると get_user_vars
で取得できる。
echoで書くとこうなる
現在いるディレクトリのgitリポジトリ名をtabのtitleに設定する
https://wezfurlong.org/wezterm/config/lua/window-events/format-tab-title.html で、変数 panetitle
を取得して値があればそれをtabに設定する
~/.config/wezterm/wezterm.lua
- zshの
precmd
hookを登録して、コマンド実行のたびに panetitle
を更新するようにする
vsc_info
も使用してgitのディレクトリ内にいるときはリポジトリ名をセットする
~/.zshrc
pane titleを設定する
上記でtabのタイトルがセットできたが、tab一覧を表示したときにはpane titleが表示される。
pane titleはデフォルトでprocess名が入るので、どのtabなのかわかりにくい。
https://wezfurlong.org/wezterm/config/lua/pane/get_title.html
OSC 1 でセットすることができるので、先程同様 precmd
でセットする
前回開いていたtabを復元する
tmux-resurrect, tmux-continuum のように、前回開いていたタブの一覧を復元したい。
20220807-113146-c2fee766
時点では、weztermにそのような機能はないため自分で保存、復元を行うようにする。
現在のタブ一覧を保存する
https://wezfurlong.org/wezterm/cli/cli/list.html
wezterm cli list
で開いているtabの一覧を出力できる。
--format=json
をつけるとJSONにできる。
この出力結果をどこかに保存する処理を定期実行すればよさそう。
今回はcronに設定することにした。
crontab -e
タブを復元する
こちらのような関数を用意した。(require: jq)
wezterm cli spawn --cwd <directory>
でディレクトリを指定してtabを開くことができるので、JSONに保存した各tabの情報から cwd
の項目を拾って引数にする