X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FNode.ct;h=ddf17ac97a620aaa86450c7426b93d2f2c6db997;hb=e879290346fe5242d7df2d70ee552d264081492f;hp=0a5a9c09f0c11d15c613024b7d20fbd71f1bdbc6;hpb=70905bebad1f8c394fceb3a5d2a493eeecf3bd13;p=senf.git diff --git a/Console/Node.ct b/Console/Node.ct index 0a5a9c0..ddf17ac 100644 --- a/Console/Node.ct +++ b/Console/Node.ct @@ -36,31 +36,37 @@ template prefix_ senf::console::GenericNode & -senf::console::DirectoryNode::traverse(ForwardRange const & range) +senf::console::DirectoryNode::traverse(ForwardRange const & range, bool autocomplete) { typedef typename boost::range_const_iterator::type const_iterator; DirectoryNode::ptr dir (thisptr()); const_iterator i (boost::begin(range)); const_iterator const i_end (boost::end(range)); - if (i != i_end && i->empty()) { + if (i != i_end && *i == std::string("")) { dir = root().thisptr(); ++ i; } while (i != i_end) { const_iterator next_i (i); ++ next_i; - if (*i == "..") { + if (*i == std::string("..")) { dir = dir->parent(); if (! dir) dir = root().thisptr(); } - else if (! i->empty() && *i != ".") { + else if (*i != std::string("") && *i != std::string(".")) { + std::string name (*i); + if (! dir->hasChild(name) && autocomplete) { + ChildrenRange completions (dir->completions(name)); + if (completions.size() == 1) + name = completions.begin()->first; + } if (next_i == i_end) - return dir->get(*i); + return dir->get(name); else { // Why does g++ give an error on this line ???? : - // dir = dynamic_cast( dir->get(*i) ).thisptr(); - DirectoryNode & d (dynamic_cast( dir->get(*i) )); + // dir = dynamic_cast( dir->get(name) ).thisptr(); + DirectoryNode & d (dynamic_cast( dir->get(name) )); dir = d.thisptr(); } }