ずっと cdd ( http://secondlife.hatenablog.jp/entry/20080218/1203303528 ) を使ってたけど、以下のような感じでいいかなと思ったのでついに使うのをやめてみた。(cdd はスクリーンの別ウィンドウのディレクトリに簡単に移動するためのコマンド)

function cdd() {
	if [[ $1 == "" ]]; then
		local selected_dir=$(lsof -c zsh -w -Ffn0 | perl -anal -e '/cwd/ and print((split /\0.?/)[1])' | uniq | peco)
		if [ -n "$selected_dir" ]; then
			cd ${selected_dir}
		fi
	else
		local pid
		if [[ $(uname) == "Darwin" ]]; then
			pid=$(command ps -E -o 'pid,command' | WINDOW=$1 perl -anal -e '/STY=$ENV{STY} / and /WINDOW=$ENV{WINDOW} / and /^ *([0-9]+) +[^ ]*zsh/ and print $1')
		else
			pid=$(command ps e -o 'pid,command' | WINDOW=$1 perl -anal -e '/STY=$ENV{STY} / and /WINDOW=$ENV{WINDOW} / and /^ *([0-9]+) +[^ ]*zsh/ and print $1')
		fi

		if [[ $pid == "" ]]; then
			echo "window not found"
		else
			local dir=$(lsof -p $pid -w -Ffn0 | perl -anal -e '/cwd/ and print((split /\0.?/)[1])')
			cd $dir
		fi
	fi
}

実際のところウィンドウ番号じゃなくて一覧から選択できたほうが嬉しいなと思い peco に託すことにした。

ディレクトリ一覧は lsof で起動中の zsh プロセスの cwd を全部とってくることにした。

しばらくこれでやってみる。

やっぱ数字(ウィンドウ番号)指定でも移動したいので、どっちもいけるようにした。。

  1. トップ
  2. tech
  3. cdd とお別れして、別の cdd を定義した