summaryrefslogtreecommitdiff
path: root/src/keymap_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-02-18 20:20:35 +1100
committerMaxime Coste <mawww@kakoune.org>2018-02-18 20:20:35 +1100
commitf88195d2d91c19a32d54588476950c263ab415dc (patch)
treef28c87fc4c674608cc316ce1219c07470df2d1f8 /src/keymap_manager.cc
parent4f75358ce315ba9658f29bce581b8dc7dbdc4a06 (diff)
parent6b447a0ecb018256c574fc2a36be99698f603cc3 (diff)
Merge remote-tracking branch 'Delapouite/user-mode'
Diffstat (limited to 'src/keymap_manager.cc')
-rw-r--r--src/keymap_manager.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/keymap_manager.cc b/src/keymap_manager.cc
index 859f420b..8c359082 100644
--- a/src/keymap_manager.cc
+++ b/src/keymap_manager.cc
@@ -2,6 +2,8 @@
#include "array_view.hh"
#include "assert.hh"
+#include "exception.hh"
+#include "string_utils.hh"
#include <algorithm>
@@ -49,4 +51,19 @@ KeymapManager::KeyList KeymapManager::get_mapped_keys(KeymapMode mode) const
return res;
}
+void KeymapManager::add_user_mode(const String user_mode_name)
+{
+ auto modes = {"normal", "insert", "prompt", "menu", "goto", "view", "user", "object"};
+ if (contains(modes, user_mode_name))
+ throw runtime_error(format("'{}' is already a regular mode", user_mode_name));
+
+ if (contains(m_user_modes, user_mode_name))
+ throw runtime_error(format("user mode '{}' already defined", user_mode_name));
+
+ if (contains_that(user_mode_name, [](char c){ return not isalnum(c); }))
+ throw runtime_error(format("invalid mode name: '{}'", user_mode_name));
+
+ m_user_modes.push_back(user_mode_name);
+}
+
}