summaryrefslogtreecommitdiff
path: root/src/command_manager.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-07-31 00:06:50 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-07-31 00:06:50 +0200
commitb65f8cc887748a3076639f6eabab65fad40ac67f (patch)
tree3794d38b96c9b548a4d78e9d451d8c58422b4cc6 /src/command_manager.hh
parenta3cb9bfc5e0b26a7953ec3795944c6a6563cd7b6 (diff)
CommandParameters is a list of Tokens instead of Strings
CommandManager string parsing is less ad-hoc.
Diffstat (limited to 'src/command_manager.hh')
-rw-r--r--src/command_manager.hh26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/command_manager.hh b/src/command_manager.hh
index b3f0917e..134dbd48 100644
--- a/src/command_manager.hh
+++ b/src/command_manager.hh
@@ -21,7 +21,31 @@ struct wrong_argument_count : runtime_error
wrong_argument_count() : runtime_error("wrong argument count") {}
};
-typedef memoryview<String> CommandParameters;
+struct Token
+{
+ enum class Type
+ {
+ Raw,
+ ShellExpand,
+ CommandSeparator
+ };
+ Token() : m_type(Type::Raw) {}
+
+ explicit Token(const String& string) : m_content(string), m_type(Type::Raw) {}
+ explicit Token(Type type) : m_type(type) {}
+ Token(Type type, String str) : m_content(str), m_type(type) {}
+
+ Type type() const { return m_type; }
+
+ const String& content() const { return m_content; }
+
+private:
+ Type m_type;
+ String m_content;
+};
+
+using CommandParameters = memoryview<Token>;
+
typedef std::function<void (const CommandParameters&,
const Context& context)> Command;