diff --git a/Utils/Console/Executor.cc b/Utils/Console/Executor.cc index 3bfa19bd41fd6e972416be3a47e4950647136586..e3f09216f24f5bc150e4c00efe5b38ea4b73db7f 100644 --- a/Utils/Console/Executor.cc +++ b/Utils/Console/Executor.cc @@ -30,6 +30,7 @@ #include <boost/utility.hpp> #include <boost/range/iterator_range.hpp> #include <boost/bind.hpp> +#include <boost/format.hpp> #include "../../Utils/senfassert.hh" #include "../../Utils/Range.hh" #include "../../Utils/String.hh" @@ -222,14 +223,16 @@ prefix_ void senf::console::Executor::ls(std::ostream & output, DirectoryNode & node (*dir.back().lock()); DirectoryNode::child_iterator i (node.children().begin()); DirectoryNode::child_iterator const i_end (node.children().end()); - for (; i != i_end; ++i) { - output << i->first; - if (i->second->isDirectory()) - output << "/"; - else if (i->second->isLink()) - output << "@"; - output << "\n"; - } + boost::format fmt ("%s%s %|20t|%.59s\n"); + for (; i != i_end; ++i) + output << fmt + % i->first + % ( i->second->isDirectory() + ? "/" + : i->second->isLink() + ? "@" + : "" ) + % i->second->shorthelp(); } prefix_ void senf::console::Executor::pushd(ParseCommandInfo::TokensRange dir) diff --git a/Utils/Console/Executor.test.cc b/Utils/Console/Executor.test.cc index 833aa4559af89bc26fe6054a37a9aafa6d2a7981..f02943bf2ac101e48f2aff5e0683cbca528afd2d 100644 --- a/Utils/Console/Executor.test.cc +++ b/Utils/Console/Executor.test.cc @@ -99,7 +99,10 @@ BOOST_AUTO_UNIT_TEST(executor) parser.parse("ls", &setCommand); executor(os, commands.back()); BOOST_CHECK_EQUAL( commands.back().builtin(), senf::console::ParseCommandInfo::BuiltinLS ); - BOOST_CHECK_EQUAL( os.str(), "dir1/\ndir2/\nsys/\n" ); + BOOST_CHECK_EQUAL( os.str(), + "dir1/ \n" + "dir2/ Helptext\n" + "sys/ \n" ); } { @@ -107,7 +110,7 @@ BOOST_AUTO_UNIT_TEST(executor) parser.parse("ls dir1", &setCommand); executor(os, commands.back()); BOOST_CHECK_EQUAL( commands.back().builtin(), senf::console::ParseCommandInfo::BuiltinLS ); - BOOST_CHECK_EQUAL( os.str(), "dir3/\n" ); + BOOST_CHECK_EQUAL( os.str(), "dir3/ \n" ); } { @@ -213,7 +216,7 @@ BOOST_AUTO_UNIT_TEST(executorPolicy) parser.parse("ls dir1", &setCommand); executor(os, commands.back()); BOOST_CHECK_EQUAL( commands.back().builtin(), senf::console::ParseCommandInfo::BuiltinLS ); - BOOST_CHECK_EQUAL( os.str(), "dir3/\n" ); + BOOST_CHECK_EQUAL( os.str(), "dir3/ \n" ); } { diff --git a/Utils/Console/OverloadedCommand.cc b/Utils/Console/OverloadedCommand.cc index 8a0c631ca772f977a57d37b2a3bd15dfd56b7e8c..cb405a78b22d599f37e9917b34e95c2f9681bd7e 100644 --- a/Utils/Console/OverloadedCommand.cc +++ b/Utils/Console/OverloadedCommand.cc @@ -160,7 +160,16 @@ prefix_ std::string senf::console::OverloadedCommandNode::v_shorthelp() { if (!shortdoc_.empty()) return shortdoc_; - return doc_.substr(0,doc_.find('\n')); + if (!doc_.empty()) + return doc_.substr(0,doc_.find('\n')); + Overloads::const_iterator i (overloads_.begin()); + Overloads::const_iterator const i_end (overloads_.end()); + for (; i != i_end; ++i) { + std::string overloadDoc ((*i)->doc()); + if (! overloadDoc.empty()) + return overloadDoc.substr(0,doc_.find('\n')); + } + return ""; } prefix_ void senf::console::OverloadedCommandNode::v_execute(boost::any & rv, diff --git a/Utils/Console/ParsedCommand.test.cc b/Utils/Console/ParsedCommand.test.cc index 74f57d7351ee463875da91c2fa87227ccea26c51..595365848f90a628699c81358d6575e57042e82b 100644 --- a/Utils/Console/ParsedCommand.test.cc +++ b/Utils/Console/ParsedCommand.test.cc @@ -303,7 +303,7 @@ BOOST_AUTO_UNIT_TEST(directoryReturn) SENF_CHECK_NO_THROW( parser.parse("test/test { ls; }", boost::bind<void>( boost::ref(executor), boost::ref(ss), _1 )) ); - BOOST_CHECK_EQUAL( ss.str(), "<Directory at '/test/dircb'>\ncb1\n" ); + BOOST_CHECK_EQUAL( ss.str(), "<Directory at '/test/dircb'>\ncb1 \n" ); } }