Skip to content

Instantly share code, notes, and snippets.

@jstorimer
Last active July 30, 2020 06:52
Show Gist options
  • Star 48 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save jstorimer/1465437 to your computer and use it in GitHub Desktop.
Save jstorimer/1465437 to your computer and use it in GitHub Desktop.
hilong -- A simply utility to show character counts for each line of input and highlight lines longer than 80 characters.
#!/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 {post}
#
# Examples:
#
# $ hilong Gemfile
# $ hilong Gemfile | more
# $ hilong Gemfile > output.txt
# $ hilong Gemfile Gemfile.lock
# $ cat Gemfile* | hilong
# $ cat Gemfile | hilong - Gemfile.lock
# escaped bash color codes
red = "\e[31m"
reset_color = "\e[0m"
maximum_line_length = 80
# Keep reading lines of input as long as they're coming.
ARGF.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 $stdout.tty? && 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)
end
$stdout.puts output_line
end
@owenkellogg
Copy link

Great example of using pipes with ruby io :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment