結局,最近のファイルを開くは、こんな感じに収まった.

require File.dirname(__FILE__) + '/open_from_menu'

include Mate::OpenFromMenu
module Mate
  class OpenRecent
    include Mate::OpenFromMenu
    def initialize(config = {
        :project_dir => ENV["TM_PROJECT_DIRECTORY"],
        :selected_file => ENV["TM_SELECTED_FILE"],
      })
      @conf = config 
    end
    
    def open_recent()
        open_from_menu(
          Dir.glob("#{ @conf[:project_dir] }/**/*").
          sort_by { |f| File.mtime(f) }.
          reverse[0..7].
          select { |e| e != @conf[:selected_file] }.
          # collect [view_name, path_name]
          collect{ |e| dir_base = File.split(e); [dir_base[1], e]} 
        )
    end
  end
end
$: << "#{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

ついでにSVNステータスから開く

require File.dirname(__FILE__) + '/open_from_menu'

$open_menu_cofing = {
  :project_dir => ENV["TM_PROJECT_DIRECTORY"],
  :svn_status =>  %s[%x{ "cd" "$TM_PROJECT_DIRECTORY"
                        "/usr/local/bin/svn" "status"}],
  :selected_file => ENV["TM_SELECTED_FILE"],  
}

module Mate
  class OpenBySvnStatus
    include Mate::OpenFromMenu
    def initialize(config = $open_menu_cofing)
      @conf = config
    end

    def open
      items = instance_eval("#{@conf[:svn_status]}").
        split(/\n/).
        collect { |e| e.split(/\s+/) }.
        # collect example  ["M :   hoge/foo.txt", "/usr/home/hoge/foo.txt"  
        collect { |e| [ e[0] + " :\t" + e[1], @conf[:project_dir] + "/" + e[1] ] }
        print "no select item [svn status]" if items.size == 0
        open_from_menu(items)
    end    
  end
end