cdd - screen の別WINDOWのカレントディレクトリに移動する zsh スクリプト

現在は m4i さん作のcdd を tmux, bash, multi session +α に対応した - カワイイはつくれる のcddを使うのがオススメです。

screen を使ってると、別の作業している WINDOW のカレントディレクトリに移動したくなることってありませんか?私は月1000回ぐらいあります。で、毎回手動で打つのがめんどくさくなってきたので zsh スクリプト書いてみたら思っていた以上に便利だったので、汚いスクリプトですが公開します。

使い方は、上記スクリプトを checkout したりダウンロードしたりしてから、.zshrc に

 autoload -U compinit
 compinit
 source ~/path/cdd  # (cdd はこのファイル) する

を追加します。その後 cd 後に実行されるフック関数、 chpwd に _reg_pwd_screenum を追加します。これも .zshrc に

 function chpwd() {
   _reg_pwd_screennum
 }

を追加します。~/.zsh が無い場合、mkdir ~/.zsh する必要があるかも知れません。これで準備完了。その後 screen と zsh を立ち上げると、

# WINDOW 番号 3 のカレントディレクトリに移動したい
$ cdd 3 

なんかで移動できるようになります。また一応補完にも対応してるので

cdd [tab]

$ cdd 
0:/home/gorou/svn/dotfiles 9:/home/gorou/tmp
1:/home/gorou/as3app/ss    cr:/home/gorou/svn/coderepos
2:/home/gorou/as3app/ss    gem:/usr/lib/ruby/gems/1.8/gems

な感じに補完されます。その他 cdadd cddel というコマンドで、特定ディレクトリを cdd のディレクトリ対象に追加することが出来ます。以前 id:naoya に pushd/popd 以外でよく使うディレクトリを記録するようなコマンドってあるかな、と訊かれたのですがこれで代用できると思います。
たとえば coderepos のディレクトリを追加したければ

$ cd ~/svn/coderepos
$ cdadd cr . # cr という名前でカレントディレクトリを登録

で登録して、後は

$ cdd cr

で移動できます。なお ToDo として

  • cdadd/cddel ってださい! cdd add, cdd del でやりたい
  • compctl という一世代前のコマンドで補完してる。かっこいい補完にしたい。
  • その他リファクタリング

が挙がってるので、誰か coderepos で修正してコミットしてくれると嬉しいです:D。(ToDo の一つだった OSX 対応は id:cho45 がコミってくれた!)