summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-02-21 13:35:20 +0100
committerMaxime Coste <frrrwww@gmail.com>2013-02-21 13:35:20 +0100
commitcf01f0ed7a5622d31ab030672313b7ad2ec32542 (patch)
tree8ef05724a013f3fb1bfc78b1e4e3dbd03291d0ca /src
parent9306a89deb385ce54198b4d199f5c5dd11abb9e7 (diff)
Avoid recursive macro calls
Diffstat (limited to 'src')
-rw-r--r--src/main.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/main.cc b/src/main.cc
index 7102b853..4a4a6bb8 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -453,6 +453,10 @@ void start_or_end_macro_recording(Context& context)
void replay_macro(Context& context)
{
+ static bool running_macro = false;
+ if (running_macro)
+ throw runtime_error("nested macros not supported");
+
int count = context.numeric_param();
context.input_handler().on_next_key([count](const Key& key, Context& context) mutable {
if (key.modifiers == Key::Modifiers::None)
@@ -460,6 +464,9 @@ void replay_macro(Context& context)
memoryview<String> reg_val = RegisterManager::instance()[key.key].values(context);
if (not reg_val.empty())
{
+ running_macro = true;
+ auto stop_macro = on_scope_end([&] { running_macro = false; });
+
scoped_edition edition(context.editor());
do { exec_keys(parse_keys(reg_val[0]), context); } while (--count > 0);
}