Utils/Termlib: Fix broken history handling
[senf.git] / Utils / Console / Executor.cc
index d6218d8..a228c33 100644 (file)
@@ -67,6 +67,7 @@ prefix_ std::string senf::console::Executor::cwdPath()
 {
     if (skipping())
         return "";
+    (void) cwd(); // ensure, cwd is live.
     return "/" + senf::stringJoin(
         senf::make_transform_range(
             boost::make_iterator_range(boost::next(cwd_.begin()), cwd_.end()),
@@ -194,8 +195,10 @@ prefix_ void senf::console::Executor::ls(std::ostream & output,
     DirectoryNode::child_iterator const i_end (node.children().end());
     for (; i != i_end; ++i) {
         output << i->first;
-        if (boost::dynamic_pointer_cast<DirectoryNode>(i->second))
+        if (i->second->isDirectory())
             output << "/";
+        else if (i->second->isLink())
+            output << "@";
         output << "\n";
     }
 }
@@ -257,7 +260,7 @@ senf::console::Executor::traverseNode(ParseCommandInfo::TokensRange const & path
             return *dir.back().lock();
         }
         DirectoryNode & base (*dir.back().lock());
-        if (tok == WordToken("."))
+        if (tok == WordToken(".") || tok == NoneToken())
             return base;
         std::string const & name (complete(base, tok.value()));
         if (policy_)