GNU screen のとき定義していた cdd という、既に開いている別ウィンドウのディレクトリにcdするコマンドがあった(ref. cdd とお別れして、別の cdd を定義した | tech - 氾濫原 )。このままでは tmux で動かないので書きかえた。

function cdd() {
	typeset -A mapping
	local window=$1
	mapping=($(tmux list-windows -F '#{window_index} #{pane_current_path}'))
	local dir=$mapping[$window]
	if [[ $dir == "" ]]; then
		echo "window not found"
	else
		cd "$dir"
	fi
}

GNU screen のときはややトリッキーなことをしていたけど、tmux だとlist-windows の出力を工夫するとマッピングを直接得られるので、zsh の連想配列に入れてそのまま取得できた。(逆に、tmux だと環境変数にウィンドウ番号は入っていないので、screen のときの方法だとうまくできない)

今のところ自分は window 内を複数 pane に分割しないのでこれでうまくいくんだけど、分割すると結果が不定になりそう。

元々書いてた cdd は引数なしで実行するとリストを表示して選択して cd できるようにしていたけど、全く使わなかったので機能自体をなくした。

なぜか list-windows ではなく list-panes していたので、list-windows を使うように変更した

  1. トップ
  2. tech
  3. tmux 用の cdd (ウィンドウ番号を指定して cd)
▲ この日のエントリ