diff --git a/src/A3.cpp b/src/A3.cpp index 932580cef..a9b075504 100644 --- a/src/A3.cpp +++ b/src/A3.cpp @@ -495,6 +495,34 @@ const std::vector A3::list () const return all; } +//////////////////////////////////////////////////////////////////////////////// +bool A3::find_command (std::string& command) const +{ + std::vector ::const_iterator arg; + for (arg = this->begin (); arg != this->end (); ++arg) + { + if (arg->_category == "command") + { + command = arg->_raw; + return true; + } + } + + return false; +} + +//////////////////////////////////////////////////////////////////////////////// +const std::string A3::find_limit () const +{ + std::vector ::const_reverse_iterator arg; + for (arg = this->rbegin (); arg != this->rend (); ++arg) + if (arg->_raw.find ("limit:") != std::string::npos) + return arg->_raw.substr (6); + + return ""; +} + + @@ -519,22 +547,6 @@ std::vector A3::operator_list () return all; } -//////////////////////////////////////////////////////////////////////////////// -bool A3::find_command (std::string& command) -{ - std::vector ::iterator arg; - for (arg = this->begin (); arg != this->end (); ++arg) - { - if (arg->_third == "command") - { - command = arg->_first; - return true; - } - } - - return false; -} - //////////////////////////////////////////////////////////////////////////////// std::string A3::find_limit () { diff --git a/src/A3.h b/src/A3.h index b7529ddcf..a6a4f040a 100644 --- a/src/A3.h +++ b/src/A3.h @@ -95,12 +95,12 @@ public: const std::string combine () const; const std::vector list () const; + bool find_command (std::string&) const; + const std::string find_limit () const; /* static std::vector operator_list (); - bool find_command (std::string&); - std::string find_limit (); static bool is_multipart (const std::string&, std::vector &); static bool is_attr (const std::string&); diff --git a/src/Context.cpp b/src/Context.cpp index edc5d0b66..292e49e15 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -98,7 +98,6 @@ int Context::initialize (int argc, const char** argv) // location (~/.task), or set by data.location in the config file, or // overridden by rc.data.location on the command line. std::string location; -// args.get_data_location (location); a3.get_data_location (location); data_dir = Directory (location); extension_dir = data_dir.data + "/extensions"; @@ -112,7 +111,6 @@ int Context::initialize (int argc, const char** argv) a3.resolve_aliases (); // Apply rc overrides to Context::config, capturing raw args for later use. -// args.apply_overrides (); a3.apply_overrides (); // Initialize the color rules, if necessary. @@ -279,7 +277,7 @@ int Context::dispatch (std::string &out) // Autocomplete args against keywords. std::string command; - if (args.find_command (command)) + if (a3.find_command (command)) { updateXtermTitle (); @@ -292,7 +290,13 @@ int Context::dispatch (std::string &out) tdb2.gc (); } -// args.dump ("Argument Categorization"); + // Only read-only commands can be run when TDB2 is read-only. + // TODO Implement TDB2::read_only +/* + if (tdb2.read_only () && !c->read_only ()) + throw std::string (""); +*/ + return c->execute (out); } diff --git a/src/commands/CmdCustom.cpp b/src/commands/CmdCustom.cpp index d98571f02..a596f1f2a 100644 --- a/src/commands/CmdCustom.cpp +++ b/src/commands/CmdCustom.cpp @@ -86,7 +86,10 @@ int CmdCustom::execute (std::string& output) split (filterArgs, reportFilter, ' '); std::vector ::iterator arg; for (arg = filterArgs.begin (); arg != filterArgs.end (); ++ arg) + { context.args.capture_first (*arg); + context.a3.capture_first (*arg); + } // Load the data. // TODO Replace with TDB2.