diff --git a/src/Context.cpp b/src/Context.cpp index 9d047c35c..157cf3cd6 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -119,9 +119,9 @@ void Context::initialize2 (int argc, char** argv) // TODO Load relevant rc file. // Instantiate built-in command objects. - commands.push_back (Command::factory ("exec")); - commands.push_back (Command::factory ("install")); - commands.push_back (Command::factory ("_logo")); + commands["exec"] = Command::factory ("exec"); + commands["install"] = Command::factory ("install"); + commands["logo"] = Command::factory ("_logo"); // TODO Instantiate extension command objects. // TODO Instantiate default command object. @@ -248,15 +248,15 @@ int Context::dispatch2 (std::string &out) updateXtermTitle (); - std::vector ::iterator c; + std::map ::iterator c; for (c = commands.begin (); c != commands.end (); ++c) { - if ((*c)->implements (commandLine)) + if (c->second->implements (commandLine)) { - if (! (*c)->read_only ()) + if (! c->second->read_only ()) tdb.gc (); - return (*c)->execute (commandLine, out); + return c->second->execute (commandLine, out); } } diff --git a/src/Context.h b/src/Context.h index cd316987c..f679b7d50 100644 --- a/src/Context.h +++ b/src/Context.h @@ -85,37 +85,37 @@ private: void updateXtermTitle (); public: - Config config; - Filter filter; - Sequence sequence; - Subst subst; - Task task; - TDB tdb; // TODO Obsolete - TDB2 tdb2; - std::string program; - std::vector args; - std::string commandLine; - std::string file_override; - std::string var_overrides; - Cmd cmd; // TODO Obsolete + Config config; + Filter filter; + Sequence sequence; + Subst subst; + Task task; + TDB tdb; // TODO Obsolete + TDB2 tdb2; + std::string program; + std::vector args; + std::string commandLine; + std::string file_override; + std::string var_overrides; + Cmd cmd; // TODO Obsolete std::map aliases; - std::vector tagAdditions; - std::vector tagRemovals; - Hooks hooks; - DOM dom; - bool use_color; + std::vector tagAdditions; + std::vector tagRemovals; + Hooks hooks; + DOM dom; + bool use_color; - bool verbosity_legacy; - std::vector verbosity; - std::vector headers; - std::vector footnotes; - std::vector debugMessages; - bool inShadow; + bool verbosity_legacy; + std::vector verbosity; + std::vector headers; + std::vector footnotes; + std::vector debugMessages; + bool inShadow; - std::vector commands; + std::map commands; - int terminal_width; - int terminal_height; + int terminal_width; + int terminal_height; }; #endif diff --git a/src/command.cpp b/src/command.cpp index 78a55d1c9..2135bfc29 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -453,6 +453,10 @@ int handleCompletionCommands (std::string& outs) std::vector commands; context.cmd.allCommands (commands); + std::map ::iterator i; + for (i = context.commands.begin (); i != context.commands.end (); ++i) + commands.push_back (i->first); + // Sort alphabetically. std::sort (commands.begin (), commands.end ()); diff --git a/src/commands/CmdLogo.cpp b/src/commands/CmdLogo.cpp index b03909afd..bd7dd6cd9 100644 --- a/src/commands/CmdLogo.cpp +++ b/src/commands/CmdLogo.cpp @@ -99,10 +99,16 @@ int CmdLogo::execute (const std::string& commandLine, std::string& output) "" }; + if (!context.color ()) + throw std::string ("The _logo command requires that color support is enabled."); + + std::string indent (context.config.getInteger ("indent.report"), ' '); output += optionalBlankLine (); for (int line = 0; data[line][0]; ++line) { + output += indent; + for (int c = 0; c < 14; ++c) { int value = (int) data[line][c]; diff --git a/src/commands/Command.cpp b/src/commands/Command.cpp index 9764cd2a6..752d0ffcd 100644 --- a/src/commands/Command.cpp +++ b/src/commands/Command.cpp @@ -57,9 +57,7 @@ Command::Command () //////////////////////////////////////////////////////////////////////////////// Command::Command (const Command& other) { -/* - _minimum = other._minimum; -*/ +// _all = other._all; } //////////////////////////////////////////////////////////////////////////////// @@ -67,9 +65,7 @@ Command& Command::operator= (const Command& other) { if (this != &other) { -/* - _name = other._name; -*/ +// _all = other._all; } return *this; @@ -78,15 +74,8 @@ Command& Command::operator= (const Command& other) //////////////////////////////////////////////////////////////////////////////// bool Command::operator== (const Command& other) const { +// return _all == other._all; return false; -/* - return _name == other._name && - _minimum == other._minimum && - _maximum == other._maximum && - _wrap == other._wrap && - _just == other._just && - _sizing == other._sizing; -*/ } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/commands/Command.h b/src/commands/Command.h index 8a0178b10..88068221d 100644 --- a/src/commands/Command.h +++ b/src/commands/Command.h @@ -43,8 +43,6 @@ public: virtual bool read_only () const; virtual bool implements (const std::string&) const = 0; virtual int execute (const std::string&, std::string&) = 0; - -private: }; #endif diff --git a/src/custom.cpp b/src/custom.cpp index bdcf9ba92..bd9afe084 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -269,7 +269,7 @@ int handleCustomReport (const std::string& report, std::string& outs) // Adjust for fluff in the output. if (maxlines) - maxlines -= (context.verbose ("blanklines") ? 1 : 0) + maxlines -= (context.verbose ("blank") ? 1 : 0) + table_header + context.headers.size () + context.footnotes.size (); diff --git a/src/text.cpp b/src/text.cpp index 3e4eb1dcc..7b37b0eb4 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -402,7 +402,7 @@ std::string ucFirst (const std::string& input) //////////////////////////////////////////////////////////////////////////////// const char* optionalBlankLine () { - return context.verbose ("blanklines") ? newline : noline; + return context.verbose ("blank") ? newline : noline; } ////////////////////////////////////////////////////////////////////////////////