Skip to content

Instantly share code, notes, and snippets.

@toddlers toddlers/gist:5442133 forked from jstorimer/hilong.rb
Created Apr 23, 2013

What would you like to do?
#!/usr/bin/env ruby
# A simply utility to show character counts for each line of input and
# highlight lines longer than 80 characters.
# Written as an example for
# Examples:
# $ hilong Gemfile
# $ hilong Gemfile | more
# $ hilong Gemfile > output.txt
# $ hilong Gemfile Gemfile.lock
# $ cat Gemfile* | hilong
# $ cat Gemfile | hilong - Gemfile.lock
# Install:
# $ curl > ~/bin/hilong
# $ chmod +x ~/bin/hilong
# escaped bash color codes
red = "\e[31m"
reset_color = "\e[0m"
maximum_line_length = 80
colorized_output = true
require 'optparse' do |options|
# This banner is the first line of your help documentation.
options.set_banner "Usage: hilong [options] [files]\n" \
"Show character count for each line of input and highlight long lines."
# Separator just adds a new line with the specified text.
options.separator ""
options.separator "Specific options:"
options.on("--no-color", "Disable colorized output") do |color|
colorized_output = color
options.on("-m", "--max NUM", Integer, "Maximum line length") do |max|
maximum_line_length = max
options.on_tail("-h", "--help", "You're looking at it!") do
$stderr.puts options
exit 1
# Keep reading lines of input as long as they're coming.
while input = ARGF.gets
input.each_line do |line|
# Construct a string that begins with the length of this line
# and ends with the content. The trailing newline is #chop'ped
# off of the content so we can control where the newline occurs.
# The string are joined with a tab character so that indentation
# is preserved.
output_line = [line.size, line.chop].join("\t")
# If the line is long and our $stdout is not being piped then we'll
# colorize this line.
if colorized_output && line.size > maximum_line_length
# Turn the output to red starting at the first character.
output_line.insert(0, red)
# Reset the text color back to what it was at the end of the
# line.
output_line.insert(-1, reset_color)
$stdout.puts output_line
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.