summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-02-27 19:51:30 +0000
committerMaxime Coste <frrrwww@gmail.com>2012-02-27 19:51:30 +0000
commitc03506ca0472891f9727e1777746bf6c85d80fd0 (patch)
tree9519cd9e7adb56938f9b2fd86ac7fe7451a49745 /src
parent13d74414e1bf7190989e979ce5bdf4244385e09c (diff)
save and restore " and / registers in exec_keys
Diffstat (limited to 'src')
-rw-r--r--src/main.cc20
-rw-r--r--src/register.hh1
2 files changed, 20 insertions, 1 deletions
diff --git a/src/main.cc b/src/main.cc
index 25195303..1d848f43 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -798,6 +798,22 @@ std::unordered_map<Key, std::function<void (Editor& editor, int count)>> keymap
{ { Key::Modifiers::Alt, 'x' }, [](Editor& editor, int count) { editor.select(select_whole_lines); } },
};
+class RegisterRestorer
+{
+public:
+ RegisterRestorer(char name)
+ : m_name(name),
+ m_save(RegisterManager::instance()[name].content())
+ {}
+
+ ~RegisterRestorer()
+ { RegisterManager::instance()[m_name] = m_save; }
+
+private:
+ std::vector<std::string> m_save;
+ char m_name;
+};
+
void exec_keys(const KeyList& keys,
const Context& context)
{
@@ -830,11 +846,13 @@ void exec_keys(const KeyList& keys,
return keys[pos++];
};
+ RegisterRestorer quote('"');
+ RegisterRestorer slash('/');
+
Editor batch_editor(context.buffer());
Editor& editor = context.has_window() ? static_cast<Editor&>(context.window())
: static_cast<Editor&>(batch_editor);
-
scoped_edition edition(editor);
int count = 0;
diff --git a/src/register.hh b/src/register.hh
index 365207ad..75f88354 100644
--- a/src/register.hh
+++ b/src/register.hh
@@ -21,6 +21,7 @@ public:
operator memoryview<std::string>() const
{ return memoryview<std::string>(m_content); }
+ const std::vector<std::string>& content() const { return m_content; }
private:
std::vector<std::string> m_content;