rpwdっていうコマンドを作った.pwdの,出力結果がなるべく短くなるようにしたやつ.人が見るのに使う.
% rpwd
.
% cd lib
% rpwd
lib
rpwdは,シェルが起動した瞬間のパス(以下,基準パス)を使って,短いpwdを作る.
基準パスからの相対パスとか,ホームディレクトリまでのパスを~にしたものとか,絶対パスとかを見て,一番短いのを採用する.
基準パスは,普通にシェルを起動するとホームディレクトリだけど,screen内では,screenのルートみたいなパスになる.
例えば,基準パスが/Users/fkd/co/kindairbのとき,以下のように振る舞う.
pwd | rpwd |
---|---|
/Users/fkd/co/kindairb | . |
/Users/fkd/co/kindairb/lib/kindai | lib/kindai |
/Users/fkd/co | .. |
/Users/fkd | ~ |
/etc | /etc |
.zshrcとかでsource rpwdするとrpwdコマンドが定義される.このファイルは,読み込まれたときのpwdを$__session_fromっていう環境変数に記録してる.
path_diff.rbに,$__session_fromとpwdを渡す.
export __session_from=$PWD function rpwd () { path_diff.rb $__session_from $(pwd) }
path_diff.rbはパスを2つ受け取って短いpwdを表示する.PATHの通ったところに置いておく.
#!/usr/bin/env ruby require 'pathname' def path_diff from, to Pathname.new(to).relative_path_from(Pathname.new(from)).to_s end def path_from_home path path.gsub(ENV['HOME'], '~') end unless ARGV.length == 2 warn "usage: path_diff_ruby PATH1 PATH2" exit 1 end from, to = *ARGV puts [path_diff(from, to), path_from_home(to), to].sort_by(&:length).first
screenのタイトルにpwdを出すために作った.タイトルにpwdを出すと長くて不愉快だけどこれくらいなら気にならない.
Githubに置いてある.