-
-
Notifications
You must be signed in to change notification settings - Fork 85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support talon API for inserting and wrapping with snippets #1325
Labels
enhancement
New feature or request
Milestone
Comments
3 tasks
3 tasks
cursorless-bot
pushed a commit
that referenced
this issue
Mar 27, 2023
- Fixes #1324 - Fixes #1325 Note that I created a Talon-side insertion api that supports the full set of options, including substitutions, targets, and scopes, but decided to leave it out for now because I'm not sure exactly how it should look and we don't need it for the mathfly support we're planning to use it for. In particular, we should probably figure out #803 before we implement the more complex api because snippets really want a destination, not a target. I did use the complex Talon-side api to record some tests of the extension api, though Here is the complex Talon snippet insertion api in case useful at some point <details><summary>Complex talon api</summary> ```diff From e39e03e3a06a6db4f1edb245a5225037d0ea08d3 Mon Sep 17 00:00:00 2001 From: Pokey Rule <[email protected]> Date: Fri, 24 Mar 2023 14:22:40 +0000 Subject: [PATCH] Complex insert snippet Talon api --- cursorless-talon/src/snippets.py | 35 ++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/cursorless-talon/src/snippets.py b/cursorless-talon/src/snippets.py index a9f100f58..409512011 100644 --- a/cursorless-talon/src/snippets.py +++ b/cursorless-talon/src/snippets.py @@ -91,15 +91,34 @@ class Actions: }, ) - def cursorless_insert_snippet(body: str): + def cursorless_insert_snippet( + body: str, + target: Optional[dict] = None, + scope: Optional[str] = None, + snippet_variable: Optional[str] = None, + text: Optional[str] = None, + ): """Inserts a custom snippet""" - actions.user.cursorless_implicit_target_command( - "insertSnippet", - { - "type": "custom", - "body": body, - }, - ) + snippet_arg: dict[str, Any] = { + "type": "custom", + "body": body, + } + if scope: + snippet_arg["scopeType"] = {"type": scope} + if snippet_variable: + snippet_arg["substitutions"] = {snippet_variable: text} + + if target: + actions.user.cursorless_single_target_command_with_arg_list( + "insertSnippet", + target, + [snippet_arg], + ) + else: + actions.user.cursorless_implicit_target_command( + "insertSnippet", + snippet_arg, + ) def cursorless_wrap_with_snippet_by_name( name: str, variable_name: str, target: dict -- 2.39.2 ``` </details> ## Checklist - [x] I have added [tests](https://www.cursorless.org/docs/contributing/test-case-recorder/) - [x] I have updated the [docs](https://github.com/cursorless-dev/cursorless/tree/main/docs) and [cheatsheet](https://github.com/cursorless-dev/cursorless/tree/main/cursorless-talon/src/cheatsheet) - [x] I have not broken the cheatsheet
thetomcraig-aya
pushed a commit
to thetomcraig/cursorless
that referenced
this issue
Mar 27, 2024
- Fixes cursorless-dev#1324 - Fixes cursorless-dev#1325 Note that I created a Talon-side insertion api that supports the full set of options, including substitutions, targets, and scopes, but decided to leave it out for now because I'm not sure exactly how it should look and we don't need it for the mathfly support we're planning to use it for. In particular, we should probably figure out cursorless-dev#803 before we implement the more complex api because snippets really want a destination, not a target. I did use the complex Talon-side api to record some tests of the extension api, though Here is the complex Talon snippet insertion api in case useful at some point <details><summary>Complex talon api</summary> ```diff From e39e03e3a06a6db4f1edb245a5225037d0ea08d3 Mon Sep 17 00:00:00 2001 From: Pokey Rule <[email protected]> Date: Fri, 24 Mar 2023 14:22:40 +0000 Subject: [PATCH] Complex insert snippet Talon api --- cursorless-talon/src/snippets.py | 35 ++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/cursorless-talon/src/snippets.py b/cursorless-talon/src/snippets.py index a9f100f58..409512011 100644 --- a/cursorless-talon/src/snippets.py +++ b/cursorless-talon/src/snippets.py @@ -91,15 +91,34 @@ class Actions: }, ) - def cursorless_insert_snippet(body: str): + def cursorless_insert_snippet( + body: str, + target: Optional[dict] = None, + scope: Optional[str] = None, + snippet_variable: Optional[str] = None, + text: Optional[str] = None, + ): """Inserts a custom snippet""" - actions.user.cursorless_implicit_target_command( - "insertSnippet", - { - "type": "custom", - "body": body, - }, - ) + snippet_arg: dict[str, Any] = { + "type": "custom", + "body": body, + } + if scope: + snippet_arg["scopeType"] = {"type": scope} + if snippet_variable: + snippet_arg["substitutions"] = {snippet_variable: text} + + if target: + actions.user.cursorless_single_target_command_with_arg_list( + "insertSnippet", + target, + [snippet_arg], + ) + else: + actions.user.cursorless_implicit_target_command( + "insertSnippet", + snippet_arg, + ) def cursorless_wrap_with_snippet_by_name( name: str, variable_name: str, target: dict -- 2.39.2 ``` </details> ## Checklist - [x] I have added [tests](https://www.cursorless.org/docs/contributing/test-case-recorder/) - [x] I have updated the [docs](https://github.com/cursorless-dev/cursorless/tree/main/docs) and [cheatsheet](https://github.com/cursorless-dev/cursorless/tree/main/cursorless-talon/src/cheatsheet) - [x] I have not broken the cheatsheet
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Something like the following:
The text was updated successfully, but these errors were encountered: