summaryrefslogtreecommitdiff
path: root/src/input_handler.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-02-18 18:58:07 +0100
committerMaxime Coste <frrrwww@gmail.com>2013-02-18 18:58:07 +0100
commitb43fdc7eb67f282ff37b98ceb19077185228885b (patch)
tree2013b00556d639e752022562d7aeee0beb28c00d /src/input_handler.cc
parent577734dae725739aa1fe6f87334253441385f24a (diff)
Add macro recording/replay support
Diffstat (limited to 'src/input_handler.cc')
-rw-r--r--src/input_handler.cc26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc
index 68d8f576..88f986ba 100644
--- a/src/input_handler.cc
+++ b/src/input_handler.cc
@@ -690,9 +690,35 @@ void InputHandler::handle_available_inputs()
{
Key key = m_context.ui().get_key();
if (is_valid(key))
+ {
+ const bool was_recording = is_recording();
+
m_mode->on_key(key);
+
+ // do not record the key that made us enter or leave recording mode.
+ if (was_recording and is_recording())
+ m_recorded_keys += key_to_str(key);
+ }
m_mode_trash.clear();
}
}
+void InputHandler::start_recording(char reg)
+{
+ assert(m_recording_reg == 0);
+ m_recording_reg = reg;
+}
+
+bool InputHandler::is_recording() const
+{
+ return m_recording_reg != 0;
+}
+
+void InputHandler::stop_recording()
+{
+ assert(m_recording_reg != 0);
+ RegisterManager::instance()[m_recording_reg] = memoryview<String>(m_recorded_keys);
+ m_recording_reg = 0;
+}
+
}