From 51afebdab218f2ab4af8ed21044c3dec0ef5461d Mon Sep 17 00:00:00 2001 From: g0dil <g0dil@wiback.org> Date: Wed, 3 Jun 2009 14:47:16 +0000 Subject: [PATCH] Utils/Console: Add short help to 'ls' output --- Utils/Console/Executor.cc | 19 +++++++++++-------- Utils/Console/Executor.test.cc | 9 ++++++--- Utils/Console/OverloadedCommand.cc | 11 ++++++++++- Utils/Console/ParsedCommand.test.cc | 2 +- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/Utils/Console/Executor.cc b/Utils/Console/Executor.cc index 3bfa19bd4..e3f09216f 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 833aa4559..f02943bf2 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 8a0c631ca..cb405a78b 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 74f57d735..595365848 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" ); } } -- GitLab