Colorize Glimpse

From EggeWiki

Jump to: navigation, search

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
Personal tools
Travelling Salesman

Get the app!