# File lib/transat/parser.rb, line 137
    def usage(command=nil)
      message = []

      if command then
        command_klass = @commands[command][:class]
        help =
          if command_klass.respond_to?(:aliases) then
            "#{command} (#{command_klass.aliases.join(", ")})"
          else
            "#{command}"
          end
        help = "#{help}: #{command_klass.help}" if command_klass.respond_to?(:help)
        message << help
        message << command_klass.detailed_help if command_klass.respond_to?(:detailed_help)
        message << ""
        message << "Valid options:"
        @option_parser.summarize(message)
      else
        message << "usage: #{program_name.downcase} <SUBCOMMAND> [OPTIONS] [ARGS...]"
        message << "Type '#{program_name.downcase} help <SUBCOMMAND>' for help on a specific subcommand."
        message << "Type '#{program_name.downcase} version' to get this program's version."
        message << ""
        message << "Available subcommands are:"
        @commands.sort.each do |command, options|
          command_klass = options[:class]
          if command_klass.respond_to?(:aliases) then
            message << "  #{command} (#{command_klass.aliases.join(", ")})"
          else
            message << "  #{command}"
          end
        end
      end

      message.map {|line| line.chomp}.join("\n")
    end