gistyに自分の全gistに対してgrepで全文検索を実行するコマンドを追加してみた
最近自分のgist達をgrepする機会が多くて、
そのたびにfind ~/gisty | xargs grep hoge
とかやってて、「面倒ダナー」って思ったのでgistyをforkして*1grep
コマンドを追加してみた。
以下、動作イメージ
$ gisty grep hoge /Users/snaka/gisty/151696/hateDAopener.js:140: * @return [{"url": "(url)", "name": "hogehoge", "tags": "[hoge]"}, ... ] /Users/snaka/gisty/151696/hateDAopener.js:194: * @param String Title and Tags ex. "[hoge, fuga]About me." /Users/snaka/gisty/127290/gistfile1.txt:277: liberator.dump("***hoge"); /Users/snaka/gisty/109212/CanvasSample.html:12: drawText({ position: [50, 15], string: "hoge" }); /Users/snaka/gisty/90215/gntp.rb:155: :name => "hoge", /Users/snaka/gisty/90215/gntp.rb:161: :name => "hoge", /Users/snaka/gisty/90215/gntp.rb:163: :text => "hogeほげ?", /Users/snaka/gisty/63046/vimperator_plugin_template.js:84: ["hoge", fuga"], /Users/snaka/gisty/63046/vimperator_plugin_template.js:85: ["hoge1", fuga1"], /Users/snaka/gisty/63046/vimperator_plugin_template.js:113: /* この関数を呼び出す場合は api.hoge() という感じで呼び出す */ /Users/snaka/gisty/63046/vimperator_plugin_template.js:114: hoge: function(a,b) { /Users/snaka/gisty/48974/gistfile1.txt:2:// @name (hoge) /Users/snaka/gisty/48974/gistfile1.txt:14:// (hoge hoge) /Users/snaka/gisty/762058bf07fda317318b/MechanizeSample.rb:53:page.save_as "./hoge.csv"
gistyはよくできていて、コマンドの実装は bin/gisty の中で、cmd
メソッドに、コマンド名(シンボルで)とそのコマンドの処理内容をブロックで渡してあげるだけでいい。
主な変更点は bin/gisty の以下の箇所。
diff --git a/bin/gisty b/bin/gisty index 3514351..7e3f75c 100755 --- a/bin/gisty +++ b/bin/gisty @@ -22,6 +22,7 @@ usage: gisty commands commands: gisty list show local list. + gisty grep word execute grep with all gists. gisty post file1 file2 ... post new gist. gisty private_post file1 file2 ... post new private gist. gisty sync sync remote gist. (clone all remote gist) @@ -44,6 +45,17 @@ cmd :list do end end +cmd :grep do |word| + list = @g.list + (list[:public] + list[:private]).each do |i| + i[1].each do |f| + target = File.join ENV['GISTY_DIR'], i[0], f + result = `grep -H -n #{word} "#{target}"` + puts result if result != "" + end + end +end + cmd :sync do @g.sync puts '---'
これだけでgrepコマンドが実装できた。素晴らしい。
ちなみにソースはgithubに置いてるので、お好きにどうぞ。
snaka's gisty at master - GitHub
ToDo
追記:インストール方法について
とりあえず以下のようにインストールできます。
$ wget http://cloud.github.com/downloads/snaka/gisty/snaka-gisty.gem $ sudo gem install snaka-gisty.gem
追記:2009.12.29 gemコマンドから直接インストールする方法
以下のコマンドでgithubから直接インストールすることができます。
$ gem install --source http://github.com/snaka/gisty/raw/master/ gisty
*1:fork自体はずいぶん前にやってたんだけど、ずっと放置状態だった。