X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FNode.hh;h=e443205e4b41e9ee95811ca83ef536dd9759c72c;hb=ca70e274a556bf217f3f4c7b12e0fad2a7cd4853;hp=6a2732c4ba8b4f80718b3bf5f41f9af76000dce2;hpb=80c6cb7ba9ad7776824c84809f422209adf27331;p=senf.git diff --git a/Console/Node.hh b/Console/Node.hh index 6a2732c..e443205 100644 --- a/Console/Node.hh +++ b/Console/Node.hh @@ -465,15 +465,18 @@ namespace console { DirectoryNode & mkdir(std::string const & name); ///< Create sub-directory node - ChildrenRange children() const; - ///< Return iterator range over all children. + ChildrenRange children() const; ///< Return iterator range over all children. + /**< The returned range is sorted by child name. */ + + ChildrenRange completions(std::string const & s) const; + ///< Return iterator range of completions for \a s /**< The returned range is sorted by child name. */ ///\} /////////////////////////////////////////////////////////////////////////// template - GenericNode & traverse(ForwardRange const & range); + GenericNode & traverse(ForwardRange const & range, bool autocomplete=false); ///< Traverse node path starting at this node /**< The ForwardRange::value_type must be (convertible to) std::string. Each range element @@ -482,7 +485,11 @@ namespace console { If the range starts with an empty element, the traversal is started at the root() node, otherwise it is started at \a this node. The traversal supports '.', - '..' and ignores further empty elements. */ + '..' and ignores further empty elements. + + If \a autocomplete is set to \c true, invalid path + components which can be uniquely completed will be + completed automatically while traversing the tree. */ DirectoryNode & doc(std::string const & doc); ///< Set node documentation @@ -518,11 +525,16 @@ namespace console { All errors while parsing the arguments of a command must be signaled by throwing an instance of SyntaxErrorException. This is important, so command overloading works. */ - struct SyntaxErrorException : public senf::Exception + struct SyntaxErrorException : public std::exception { explicit SyntaxErrorException(std::string const & msg = ""); + virtual ~SyntaxErrorException() throw(); virtual char const * what() const throw(); + std::string const & message() const; + + private: + std::string message_; }; /** \brief Config/console tree command node