最近のファイルを開くを書き直し
既に現在開いているやつが候補にあがっても困るなと思って.
わーっと書いていたところがあったので書き直してみた.
require File.dirname(__FILE__) + '/open_from_menu' include Mate::OpenFromMenu module Mate module OpenRecent def open_recent(target_dir = ENV["TM_PROJECT_DIRECTORY"] ) open_from_menu ( collect_view_paths ( delete_selected_file ( select_recent ( target_dir )))) end def collect_view_paths(list) list.collect { |e| dir_base = File.split(e) [dir_base[1], e] } end def delete_selected_file(list) list.select { |e| e != ENV["TM_SELECTED_FILE"] } end def select_recent(root) root = ENV["HOME"] if root == nil Dir.glob("#{ root }/**/*.*").sort_by { |f| File.mtime(f) }.reverse[0..7] end end end __END__ #!/usr/bin/env ruby require ENV['TM_BUNDLE_SUPPORT'] + "/lib/mate/open_recent" include Mate::OpenRecent open_recent
$: << "#{ENV["TM_SUPPORT_PATH"]}/lib" if ENV.has_key? "TM_SUPPORT_PATH" require "exit_codes" require "ui" module Mate module OpenFromMenu View, Path = 0, 1 def open_mate(path) %x["$TM_SUPPORT_PATH/bin/mate" "#{path}"] end def open_from_menu(view_paths) views = view_paths.collect { |view_path| view_path[View] } choice = TextMate::UI.menu(views) exit if choice.nil? open_mate(view_paths[choice][Path]) end end end
書き直しての気づき。
関数呼び出しだと下から上に読むようにすればいいんだね。
open_from_menu ( collect_view_paths ( delete_selected_file ( select_recent ( target_dir ))))
OO使わなくて、
パイプ & フィルターみたいに、左から右へ書きたいときには、どうすればいいのかな??
パイプ & フィルターみたいに、左から右へ書いて、書いた文字列をパースして、上の文字列を組み立てて、evalするのかな??