ずっと 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 を全部とってくることにした。
しばらくこれでやってみる。
やっぱ数字(ウィンドウ番号)指定でも移動したいので、どっちもいけるようにした。。