diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-04-04 13:10:39 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-04-04 13:10:39 +0100 |
| commit | dde16b00a91af805cd382dbccce115569ab9b1f0 (patch) | |
| tree | d760eb354e4ec4e442f79fc822868f3b6646090d | |
| parent | ac70b3e6d76dc5c8f8c3619ca953e41bcf22d325 (diff) | |
Add onkey command for executing commands after reading a key
This completes the various user interaction primitives, on_next_key
was the last not to be available through a command.
| -rw-r--r-- | README.asciidoc | 2 | ||||
| -rw-r--r-- | src/commands.cc | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/README.asciidoc b/README.asciidoc index f0695fa5..cc133fe1 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -1155,6 +1155,8 @@ Some helper commands can be used to define composite commands: * `:prompt <prompt> <register> <command>`: Prompt the user for a string, when the user validates, store the result in given <register> and run <commmand>. the -init <str> switch allows setting initial content. + * `:onkey <register> <command>`: Wait for next key from user, writes it into given + <register> and execute commands. * `:menu <label1> <commands1> <label2> <commands2>...`: display a menu using labels, the selected label's commands are executed. `menu` can take a -auto-single argument, to automatically run commands diff --git a/src/commands.cc b/src/commands.cc index e1cfcb10..682e191b 100644 --- a/src/commands.cc +++ b/src/commands.cc @@ -1300,6 +1300,26 @@ const CommandDesc menu_cmd = { } }; +const CommandDesc onkey_cmd = { + "onkey", + nullptr, + "onkey <register> <command>: wait for next user key, store it in <register> and execute <command>", + ParameterDesc{ {}, ParameterDesc::Flags::None, 2, 2 }, + CommandFlags::None, + CommandHelper{}, + CommandCompleter{}, + [](const ParametersParser& parser, Context& context) + { + String reg = parser[0]; + String command = parser[1]; + context.input_handler().on_next_key(KeymapMode::None, + [=](Key key, Context& context) { + RegisterManager::instance()[reg] = key_to_str(key); + CommandManager::instance().execute(command, context); + }); + } +}; + const CommandDesc info_cmd = { "info", nullptr, @@ -1517,6 +1537,7 @@ void register_commands() register_command(eval_string_cmd); register_command(prompt_cmd); register_command(menu_cmd); + register_command(onkey_cmd); register_command(info_cmd); register_command(try_catch_cmd); register_command(face_cmd); |
