diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-10-25 00:01:17 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-10-25 00:30:46 +0100 |
| commit | 2c09da50be80dbaf484682689bfd1a685d601573 (patch) | |
| tree | 6fe5efc4ef6ff1c379c388de48fdc0dd96b79981 /src/keymap_manager.cc | |
| parent | 77ac777526a6a05c2d2027e30c0bbcf9720ad5b7 (diff) | |
Add key mapping support
Diffstat (limited to 'src/keymap_manager.cc')
| -rw-r--r-- | src/keymap_manager.cc | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/keymap_manager.cc b/src/keymap_manager.cc new file mode 100644 index 00000000..71f936fd --- /dev/null +++ b/src/keymap_manager.cc @@ -0,0 +1,45 @@ +#include "keymap_manager.hh" + +namespace std +{ + +template<> struct hash<Kakoune::KeymapMode> +{ + size_t operator()(Kakoune::KeymapMode val) const + { + return hash<int>{}((int)val); + } +}; + +} + +namespace Kakoune +{ + +void KeymapManager::map_key(Key key, KeymapMode mode, std::vector<Key> mapping) +{ + m_mapping[{key, mode}] = mapping; +} + +void KeymapManager::unmap_key(Key key, KeymapMode mode) +{ + m_mapping.erase({key, mode}); +} + + +bool KeymapManager::is_mapped(Key key, KeymapMode mode) const +{ + return m_mapping.find({key, mode}) != m_mapping.end() or + (m_parent and m_parent->is_mapped(key, mode)); +} + +memoryview<Key> KeymapManager::get_mapping(Key key, KeymapMode mode) const +{ + auto it = m_mapping.find({key, mode}); + if (it != m_mapping.end()) + return { it->second }; + kak_assert(m_parent); + return m_parent->get_mapping(key, mode); +} + +} |
