desc "List things, such as tasks or contexts"
long_desc %(
  List a whole lot of things that you might be keeping track of 
  in your overall todo list.

  This is your go-to place or finding all of the things that you
  might have 
  stored in 
  your todo databases.
)

command [:list] do |c|
  c.default_command :tasks

  c.desc "Show long form"
  c.switch [:l,:long]

  c.flag :required_flag, :required => true
  c.flag :required_flag2, :required => true

  c.desc "List tasks"
  c.long_desc %(
    Lists all of your tasks that you have, in varying orders, and
    all that stuff.  Yes, this is long, but I need a long description.
  )

  c.arg :task, [:optional, :multiple]
  c.command :tasks do |tasks|
    tasks.desc "blah blah crud x whatever"
    tasks.flag [:x], :must_match => Array

    tasks.flag :flag

    tasks.action do |global,options,args|
      puts options[:x].inspect
      puts "list tasks: #{args.join(',')}"
    end

    tasks.desc 'list open tasks'
    tasks.command :open do |open|
      open.action do |global,options,args|
        puts "tasks open"
      end
    end

    tasks.default_desc 'list all tasks'
  end

  c.desc "List contexts"
  c.long_desc %(
    Lists all of your contexts, which are places you might be 
    where you can do stuff and all that.
  )
  c.command :contexts do |contexts|

    contexts.desc "Foobar"
    contexts.switch [:f,'foobar']

    contexts.desc "Blah"
    contexts.switch [:b]

    contexts.flag :otherflag

    contexts.action do |global,options,args|
      puts "list contexts: #{args.join(',')}"
    end
  end
end

