diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-02-27 19:51:30 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-02-27 19:51:30 +0000 |
| commit | c03506ca0472891f9727e1777746bf6c85d80fd0 (patch) | |
| tree | 9519cd9e7adb56938f9b2fd86ac7fe7451a49745 /src | |
| parent | 13d74414e1bf7190989e979ce5bdf4244385e09c (diff) | |
save and restore " and / registers in exec_keys
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cc | 20 | ||||
| -rw-r--r-- | src/register.hh | 1 |
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; |
