やりたいことはタイトルの通りなのだが、Emacs を使用中に Ruby の gem 名称でそのライブラリのディレクトリを Dired で開くこと。
Ruby には素敵な gem が多くあるが、 付属の Readme、RDoc だけでは使い方がよくわからない、 どうやったらこのような素敵なことができるのかソースを見てみたい、 などの理由でソースを読んでみたくなる。
@bguthrie さんが Textmate でやっているのを見て、Emacs にも流用できるなと。
上記のソースで gem which <gem name>
なんて便利なコマンドが使えるのを初めて知った。。
Emacs のディレクトリ操作には標準で Dired が利用できる。
C-x C-f
(find-file) で該当する gem のディレクトリを開けばよいのだが、
ちょっとしたことではあるが、タブ補完が効くとは言え、そのパスを入力するのは少々面倒臭い。
また、仕事の関係上、Mac、Win と併用して使っているので、異なる環境でパスを思い出すのもメンドイ。。
gem の名称だけでわかれば直接そして即座に開けるようだと、メモリ容量が減ってしまっている自分の頭にもやさしい。
elisp は全くの初心者なので、かなり無理やり感も漂い、もっといい方法もありそうなのだが、とりあえず以下のような感じでいけそう。
(defun search-gem-path (name)
(shell-command-to-string
(format "gem which %s | ruby -n -e 'if /lib/; print $_[0, $_.rindex(%%[lib])]; end'" name)))
(defun find-ruby-gem (name)
(interactive "sRuby gem libraray name: ")
(find-file (search-gem-path name)))
上記スクリプトを .emacs.el なりに書いて M-x find-ruby-gem <gem 名称>
とやることで、gem 名称に指定した gem のルートディレクトリが Dired で開かれる。
例えば、twitter gem を開く場合、M-x find-ruby-gem twitter
として、
Enter!
ホントちょっとしたことではあるが、うれしい。。
ちなみに、標準ライブラリのソースを開く場合には、
devel-which
ライブラリ(http://raa.ruby-lang.org/list.rhtml?name=devel-which)を使うとよい。
$ irb --prompt simple
>> require 'devel/which'
=> true
>> which_library 'net/http'
=> "/opt/local/lib/ruby/1.8/net/http.rb"