cloudhead / mutter

the tiny command-line interface library with lots of style~

This URL has Read+Write access

mutter /
name age message
file .document Tue Jul 28 19:20:14 -0700 2009 Initial commit to mumbler. [cloudhead]
file .gitignore Mon Aug 03 06:22:24 -0700 2009 added .document [cloudhead]
file LICENSE Tue Jul 28 19:20:14 -0700 2009 Initial commit to mumbler. [cloudhead]
file README.md Thu Oct 15 20:50:40 -0700 2009 reformatted README a little, and removed footbote [cloudhead]
file Rakefile Wed Nov 25 13:06:24 -0800 2009 bye bye rubyforge [cloudhead]
file VERSION Fri Nov 27 10:56:46 -0800 2009 Version bump to 0.5.2 [cloudhead]
directory lib/ Fri Nov 27 10:56:31 -0800 2009 moved ext to mutter/ext [cloudhead]
file mutter.gemspec Fri Nov 27 10:56:49 -0800 2009 Regenerated gemspec for version 0.5.2 [cloudhead]
directory spec/ Sun Nov 08 14:13:12 -0800 2009 better color support detection | if color is no... [cloudhead]
README.md

mutter

$ my words come out, 
    in color and
        style

mutter takes the concepts of separation of style & content to the command-line!

setup

$ sudo gem install mutter -s http://gemcutter.org

synopsis

require 'mutter'

mut = Mutter.new                # creates a new 'Mutterer', who talks in command-line language
mut.say "hello _world_"         # underlines 'world'
mut.say "hello world",   :bold  # bolds the whole string
mut.say "hello [world]", :cyan  # inverts 'world', and colors the string cyan
mut.print "bonjour!"            # alias of `say`
mut["_hola_"]                   # return the stylized string without printing, alias of #process

Tables

Define your table structure, arguments are optional.

table = Mutter::Table.new(:delimiter => '|') do    # Strings which don't fit the column width will be truncated
  column :width => 15, :style => :green            # with '..' by default, you can change that with the :truncater
  column :style => :yellow                         # option.
  column :width => 15, :align => :right
end

Add some rows

table << ["gaspar", "morello", 1976]
table << ["eddie", "vedder", 1964]
table << ["david", "bowie", 1947]

Print.

print table.to_s

If you want something barebones, you can also do

t = Mutter::Table.new
t.rows = (1..10).map {|n| [n, n **2, n **3] }
t.print

And it'll make sure everything is aligned nicely

styles

mutter supports these styles:

:bold, :underline, :inverse, :blink

and these colors:

:red, :green, :blue, :yellow, :cyan, :purple, :white, :black

customization

styles = {
  :warning => {                     # an alias you can use anywhere in mutter
    :match => ['*!', '!*'],         # will match *!mutter!*
    :style => ['yellow', 'bold']    # these styles will be applied to the match
  },
  :error => {
    :match => '!!',                 # will match !!mutter!!
    :style => ['red', 'underline']
  }
}

mut = Mutter.new(styles)
mut.say     "warning, the dogs have escaped!", :warning  # These two are
mut.warning "warning, the dogs have escaped!"            # equivalent
mut.say     "gosh, we have an !!error!!"

YAML

The previous example could have (and should really have) been written in a separate .yml file, like so:

warning:
  match: 
    - '*!'
    - '!*
  style:
    - yellow
    - bold

error:
  match: '!!'
  style:
    - red
    - underline

and then loaded like this:

Mutter.new("styles.yml")

quick styles

mut = Mutter.new :yellow => '~'
mut.say "~[black on yellow!]~"

add/remove styles from an instance

mut = Mutter.new(:blink)
mut >> :blink               # remove :blink
mut << :bold << :underline  # add :bold and :underline
mut.say "hello mutter."     # bold and underlined

That's it!

have fun