From 2328e528d37d818cbdb350ca36901bd44e9393a5 Mon Sep 17 00:00:00 2001 From: Pokey Rule Date: Mon, 15 Nov 2021 16:01:25 +0000 Subject: [PATCH] Initial work --- src/actions/actions.py | 44 ++++++++++++++++++++++++++++++++ src/actions/quick_code_action.py | 29 +++++++++++++++++++++ src/cursorless.talon | 2 +- 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/actions/quick_code_action.py diff --git a/src/actions/actions.py b/src/actions/actions.py index 34ea9170..428cb3f9 100644 --- a/src/actions/actions.py +++ b/src/actions/actions.py @@ -54,6 +54,28 @@ class CallbackAction: callbacks_map = {callback.identifier: callback.callback for callback in callbacks} +@dataclass +class ComplexAction: + defaultSpokenForm: str + identifier: str + action: str + args: list[any] + + +# NOTE: Please do not change these dicts. Use the CSVs for customization. +# See https://github.com/pokey/cursorless-talon/blob/main/docs/customization.md +complex_actions = [ + ComplexAction( + "-quick list", + "experimentalListCodeActions", + "executeCodeAction", + [{"onlyDisplayInfo": True}], + ), +] + +complex_action_map = {action.identifier: action for action in complex_actions} + + mod.list("cursorless_simple_action", desc="Supported actions for cursorless navigation") @@ -90,6 +112,10 @@ class CallbackAction: "unfold": "unfoldRegion", **{action.term: action.identifier for action in makeshift_actions}, **{callback.term: callback.identifier for callback in callbacks}, + **{ + complex_action.defaultSpokenForm: complex_action.identifier + for complex_action in complex_actions + }, } @@ -101,6 +127,11 @@ def cursorless_simple_action(action: str, targets: dict): return callbacks_map[action](targets) elif action in makeshift_action_map: return run_makeshift_action(action, targets) + elif action in complex_action_map: + action_info = complex_action_map[action] + return actions.user.cursorless_single_target_command( + action_info.action, targets, *action_info.args + ) else: return actions.user.cursorless_single_target_command(action, targets) @@ -114,6 +145,19 @@ def run_makeshift_action(action: str, targets: dict): actions.sleep(makeshift_action.post_command_sleep) +@mod.capture( + rule=( + "{user.cursorless_simple_action} | " + "{user.cursorless_experimental_quick_code_action}" + ) +) +def cursorless_simple_action(m) -> str: + try: + return m.cursorless_simple_action + except AttributeError: + return m.cursorless_experimental_quick_code_action + + # NOTE: Please do not change these dicts. Use the CSVs for customization. # See https://github.com/pokey/cursorless-talon/blob/main/docs/customization.md default_values = { diff --git a/src/actions/quick_code_action.py b/src/actions/quick_code_action.py new file mode 100644 index 00000000..c9ee631a --- /dev/null +++ b/src/actions/quick_code_action.py @@ -0,0 +1,29 @@ +from ..csv_overrides import init_csv_and_watch_changes +from talon import Module, actions, app, Context + +mod = Module() + +mod.tag( + "cursorless_experimental_snippets", + desc="tag for enabling experimental snippet support", +) + +experimental_quick_code_actions_ctx = Context() +experimental_quick_code_actions_ctx.matches = r""" +tag: user.cursorless_experimental_quick_code_actions +""" + + +def on_ready(): + init_csv_and_watch_changes( + "experimental/quick_code_actions", + { + "wrapper_snippet": wrapper_snippets, + }, + allow_unknown_values=True, + default_list_name="wrapper_snippet", + ctx=experimental_quick_code_actions_ctx, + ) + + +app.register("ready", on_ready) \ No newline at end of file diff --git a/src/cursorless.talon b/src/cursorless.talon index 0b0a7c75..33bd1628 100644 --- a/src/cursorless.talon +++ b/src/cursorless.talon @@ -1,7 +1,7 @@ app: vscode - -{user.cursorless_simple_action} : + : user.cursorless_simple_action(cursorless_simple_action, cursorless_target) {user.cursorless_swap_action} :