Numbering lines with Ruby

· technology ·

I've been fiddling around a little more with integrating Ruby scripts and one-liners with Quicksilver, and I found a way to number the lines of a selection. This is handy for those times when you decide to bullet-point some text. Generating bullet numbering manually is a chore, and if you rearrange your points you need to renumber all the following points. It's a simple and not very elegant bit of code — I'm sure someone with more than my newbie's knowledge of Ruby could make it much more efficient. For some reason, I couldn't seem to cram it all into a one-liner, so you'll have to save the code below as a file somewhere on your system.

You need to call this script via Quicksilver or the command line like this: ruby /pathto/line_nos.rb | pbcopy. Then copy your text to be numbered, run the line above, then paste. Voila! Numbered lines. Note that the backslash at the end of the line starting '$std_out' indicates a continuation line.

#!/usr/bin/env ruby
# line_nos.rb
text = `pbpaste`
lines = text.split(" n")
def number_lines(max)
  i = 0
  while i < max
    yield i
    i += 1
  end
end
$std_out = number_lines(lines.length) {|val| num = val + 1;
   puts "#{num}. #{lines[val]}n"}
</>