Jim Weirich gives a cool example of using Rake to automate searching your source code. The example even includes Emacs integration. But I live in TextMate these days, so here's the TextMate integration for Jim's fic.rb
:
#!/usr/bin/env ruby
#fl2tm.rb converts 'file:lineno context' into HTML for TextMate
require 'rubygems'
require_gem 'builder'
base = Dir.pwd
title = ENV["TITLE"] || "Stdout 4 TextMate"
lines = []
xml = Builder::XmlMarkup.new(:target=>STDOUT, :indent=>2)
xml.html do
xml.head do
xml.title(title)
end
xml.body do
xml.h1(title)
while line = gets
lines.push line
# doesn't handle whitespace in path names
if line =~ /\s*([^:]+):(\d+):(.*)/
(file, line, context) = [$1,$2,$3].map {|i| i.chomp}
xml.li do
if file =~ %r{^/}
href = "txmt://open?url=file://#{file}&line=#{line}"
else
href = "txmt://open?url=file://#{base}/#{file}&line=#{line}"
end
xml.a "href" => href do
xml.text! "#{file}:#{line}"
end
xml.text! context
end
end
end
xml.hr
xml.pre(lines.join())
end
end
This little script converts the output of fic
into HTML with TextMate links, so that you can click on the links to navigate TextMate. To add to TextMate, create a command that looks like this:
#!/usr/bin/env ruby
$: << ENV['TM_SUPPORT_PATH'] + '/lib'
require "dialog"
Dialog.request_string(:title => "Find in Code",
:prompt => "Extensions Then Res",
:button1 => "Find") do |line|
Dir.chdir(ENV['TM_PROJECT_DIRECTORY'])
path = ENV['TM_RUBY_SAMPLES']
system "#{path}/rake/fic.rb #{line} | #{path}/rake/fl2tm.rb"
end
In the TextMate Bundle Editor, set Input to 'None' and Output to 'Show as HTML.' You'll have to replace the TM_RUBY_SAMPLES with your path to fic.rb
and fl2tm.rb
--I haven't had time to package this (and other goodies) into a TextMate bundle yet. You will need to have RubyGems and Builder. I hope Jim has those installed. :-)