summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-04-13 21:21:49 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-04-13 21:21:49 +0100
commit7833b53272d89da92d7a24bd5726cf16b3e90bbf (patch)
tree8d69178d9a27dc38af8f42290caea8fa2d508507 /src
parentb0060ed79e6978c6bb41ff008b9f36ea14b6d9ac (diff)
Fix support for macro being recorded and replay during :exec (non draft)
Diffstat (limited to 'src')
-rw-r--r--src/input_handler.cc11
-rw-r--r--src/input_handler.hh1
2 files changed, 11 insertions, 1 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc
index e674790f..7732f336 100644
--- a/src/input_handler.cc
+++ b/src/input_handler.cc
@@ -1395,14 +1395,22 @@ void InputHandler::handle_key(Key key)
// do not record the key that made us enter or leave recording mode,
// and the ones that are triggered recursively by previous keys.
- if (was_recording and is_recording() and m_handle_key_level == 1)
+ if (was_recording and is_recording() and m_handle_key_level == m_recording_level)
m_recorded_keys += key_to_str(key);
+
+ if (m_handle_key_level < m_recording_level)
+ {
+ write_to_debug_buffer("Macro recording started but not finished");
+ m_recording_reg = 0;
+ m_handle_key_level = -1;
+ }
}
}
void InputHandler::start_recording(char reg)
{
kak_assert(m_recording_reg == 0);
+ m_recording_level = m_handle_key_level;
m_recorded_keys = "";
m_recording_reg = reg;
}
@@ -1417,6 +1425,7 @@ void InputHandler::stop_recording()
kak_assert(m_recording_reg != 0);
RegisterManager::instance()[m_recording_reg] = ConstArrayView<String>(m_recorded_keys);
m_recording_reg = 0;
+ m_recording_level = -1;
}
DisplayLine InputHandler::mode_line() const
diff --git a/src/input_handler.hh b/src/input_handler.hh
index 41397b28..77153c2d 100644
--- a/src/input_handler.hh
+++ b/src/input_handler.hh
@@ -109,6 +109,7 @@ private:
char m_recording_reg = 0;
String m_recorded_keys;
+ int m_recording_level = -1;
int m_handle_key_level = 0;
};