cddが複数のscreenプロセスに対応してないので何とかした

とても便利なcddなのだけど、screenのプロセスが複数立ち上がっていると、ウィンドウ番号が混ざって残念な事になってしまうので凄く適当に何とかした。

まず、CDD_PWD_FILEファイルのお尻に$STY付けてプロセス毎に違うファイルにする。

export CDD_PWD_FILE_PREFIX=$HOME/.zsh/cdd_pwd_list
export CDD_PWD_FILE=$CDD_PWD_FILE_PREFIX.$STY

これだけだと、死んだプロセスのファイルが残ってしまうので、掃除用のスクリプトを適当に作る。

#!/usr/bin/ruby
alive = `screen -list | egrep "Attached|Detached" | awk '{print ENVIRON["CDD_PWD_FILE_PREFIX"]"."$1}'`
process = `ls $CDD_PWD_FILE_PREFIX* | egrep -v \\\\.t$`
alive = alive.split("\n")
process = process.split("\n")

process.each {|p|
  unless alive.include?(p)
    File.delete(p)
    File.delete("#{p}.t")
  end
}

最初zshスクリプトだけでやろうと思ったのだが、余り良い方法が思い浮かばなかったので途中からRubyで書いた。

コレを実行すると、プロセスが存在しないファイルだけ消えてくれるので、適当なタイミングで実行すればいい。.zshrcなどで適当に呼び出すといいだろう。

と、ここまで書いて気がついたのだが、ファイルを消すとcdaddしたディレクトリまで一緒に消えてしまうので、その分は違う外部ファイルに待避させる必要がある。今回は面倒なので、.zshrcに手で追加してやり過ごすことにした。

_reg_pwd_screennum
_reg_cdd_pwd "h" "$HOME/archive/products/2008/hercules"
_reg_cdd_pwd "hb" "$HOME/archive/products/2008/hercules/branches/naz"
...
clear_cdd

全体的にとても適当なので、きっと誰かがスマートに書き直してくれるだろう。