summaryrefslogtreecommitdiff
path: root/src/register_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-06-06 00:48:18 +0100
committerMaxime Coste <frrrwww@gmail.com>2014-06-06 00:49:36 +0100
commitd33554a1ccbc58692d824c29e98d0d576d7afa6d (patch)
tree641fbcb232fc3931b7c3357f3582a9090c558db5 /src/register_manager.cc
parent2d5c7304411cbac923f132dfee34cf7ffc155d5c (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.cc21
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;