Colorize Glimpse
From EggeWiki
Glimpse is a great little search engine that's easy to install on any *nix environment, including Cygwin. I like to use glimpse to search through source code, as I can't seem to find a better tool for the job.
First I created a .glimpse_exclude file with these entries:
.metadata 'CVS$' 'TAGS$' # ~ '.class$'
Next, I index my checkout directory
glimpseindex.exe -H /cygdrive/c/Temp/glimpseindex /cygdrive/c/dev
I created a bash function to invoke glimpse and run my Ruby colorizer
function iglimpse() { # output the full file path if [ "$1" == "-w" ]; then options="-w" shift; else options="" fi glimpse -H /cygdrive/c/Temp/glimpseindex "$@" | ruby ${HOME}/bin/colorglimpse.rb -- $options "$@" }
Lastly, I created a Ruby script to colorize the output from glimpse
#!/bin/env ruby # # colorizes a glimpse output # We only want to emit color codes if we're outputting to a terminal. If this is getting piped into grep or less, we'll ignore these green=STDOUT.isatty ? "\e[32m" :"" red=STDOUT.isatty ? "\e[1;31m" :"" normal=STDOUT.isatty ? "\e[0;0m" : "" wide=false options=nil # process any arguments. These are the same ones passed into glimpse, plus optionally the wide option while(ARGV[1] =~ /^-(.*)/) do case $1 when 'w' wide=true when 'i' options = Regexp::IGNORECASE end ARGV.slice!(1) end q=ARGV[1] while $stdin.gets() do if $_ =~ /^(.*:) (.*)$/ then if wide then file=$1 else # cut off this much of the prefix. Or you may want to display a fixed amount to the right, like [-30..-1] file=$1[29..-1] end match=$2.strip print green + file + normal # if glimpse ignored case, then we need to ignore case as well regex=Regexp.new("^(.*?)(#{q})(.*)$", options) # We may have more than one match on the line, so highlight each one while(regex.match(match)) print $1 + red + $2 + normal match = $3 end puts match else # we should not get here puts "???" end end


