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