aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/args.hh
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-05-05 15:18:23 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-05-05 15:18:23 +0200
commitf132d82a796c91fcb741c127f37c963622b4cae4 (patch)
tree152a835a1810681ef7611a2767dfe2bdc7f2a4db /src/libutil/args.hh
parenta721a0b1140bf489d645f5d85737acafc1c57c65 (diff)
nix --help: Group commands
Diffstat (limited to 'src/libutil/args.hh')
-rw-r--r--src/libutil/args.hh18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/libutil/args.hh b/src/libutil/args.hh
index 9b5e316a5..1932e6a8a 100644
--- a/src/libutil/args.hh
+++ b/src/libutil/args.hh
@@ -197,17 +197,10 @@ public:
run() method. */
struct Command : virtual Args
{
-private:
- std::string _name;
-
friend class MultiCommand;
-public:
-
virtual ~Command() { }
- std::string name() { return _name; }
-
virtual void prepare() { };
virtual void run() = 0;
@@ -221,6 +214,12 @@ public:
virtual Examples examples() { return Examples(); }
+ typedef int Category;
+
+ static constexpr Category catDefault = 0;
+
+ virtual Category category() { return catDefault; }
+
void printHelp(const string & programName, std::ostream & out) override;
};
@@ -233,7 +232,10 @@ class MultiCommand : virtual Args
public:
Commands commands;
- std::shared_ptr<Command> command;
+ std::map<Command::Category, std::string> categories;
+
+ // Selected command, if any.
+ std::optional<std::pair<std::string, ref<Command>>> command;
MultiCommand(const Commands & commands);