diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-06-06 00:48:18 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-06-06 00:49:36 +0100 |
| commit | d33554a1ccbc58692d824c29e98d0d576d7afa6d (patch) | |
| tree | 641fbcb232fc3931b7c3357f3582a9090c558db5 /src/register_manager.cc | |
| parent | 2d5c7304411cbac923f132dfee34cf7ffc155d5c (diff) | |
Add support for long names for registers
We can now access register / with the name slash, * with star,
and | with pipe
Fixes #23
Diffstat (limited to 'src/register_manager.cc')
| -rw-r--r-- | src/register_manager.cc | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/register_manager.cc b/src/register_manager.cc index 0fb17141..f3b6b06e 100644 --- a/src/register_manager.cc +++ b/src/register_manager.cc @@ -1,6 +1,7 @@ #include "register_manager.hh" #include "assert.hh" +#include "id_map.hh" #include "utils.hh" namespace Kakoune @@ -55,9 +56,25 @@ private: RegisterRetriever m_function; }; -Register& RegisterManager::operator[](char reg) +Register& RegisterManager::operator[](StringView reg) { - auto& reg_ptr = m_registers[reg]; + if (reg.length() == 1) + return (*this)[reg[0]]; + + static const id_map<Codepoint> reg_names = { + { "slash", '/' }, + { "dquote", '"' }, + { "pipe", '|' } + }; + auto it = reg_names.find(reg); + if (it == reg_names.end()) + throw runtime_error("no such register: " + reg); + return (*this)[it->second]; +} + +Register& RegisterManager::operator[](Codepoint c) +{ + auto& reg_ptr = m_registers[c]; if (not reg_ptr) reg_ptr.reset(new StaticRegister()); return *reg_ptr; |
