Skip to content
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

Talon v0.4 support: common commands for talon python / talon files / .talon-list files #1240

Merged
merged 35 commits into from
Apr 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
8d98ecd
v0.4 common commands across talon list and talon files
knausj85 Jul 24, 2023
76fc086
talent debug window support
knausj85 Jul 24, 2023
f55ca6c
Various cleanup and fixes
knausj85 Jul 25, 2023
e57e770
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 25, 2023
f6887d3
More tweaks and fixes
knausj85 Jul 25, 2023
f2b2a9b
Merge branch 'common-commands' of https://github.com/talonhub/communi…
knausj85 Jul 25, 2023
c2fadd0
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 25, 2023
e489cd0
minor tweaks
knausj85 Jul 25, 2023
f35a77a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 25, 2023
6c952d6
Update talon_debug.talon
knausj85 Jul 25, 2023
6b3073a
Update talon-context.talon
knausj85 Jul 30, 2023
b551c2c
address review feedback
knausj85 Aug 5, 2023
bb50a16
Update talon.py
knausj85 Aug 5, 2023
0ff93a5
Merge branch 'main' into common-commands
nriley Aug 19, 2023
9a85b71
Rename talon-common.talon to talon_common.talon
knausj85 Aug 19, 2023
a50afd1
Rename talon-python-activator.talon to talon_python_activator.talon
knausj85 Aug 19, 2023
5616f2c
Rename talon-context.talon to talon_context.talon
knausj85 Aug 19, 2023
bea9c59
Rename talon-code_common_function.talon-list to talon_code_common_fun…
knausj85 Aug 19, 2023
c8c99fc
Update talon_context.talon
knausj85 Aug 19, 2023
535424f
address remaining review feedback
knausj85 Oct 22, 2023
cc2d0cc
Merge branch 'main' into common-commands
knausj85 Oct 22, 2023
748c33b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 22, 2023
cf9ed61
Update to use code.language
knausj85 Oct 22, 2023
4a6f124
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 22, 2023
1e84b75
Update language_modes.py
knausj85 Oct 22, 2023
47148cb
Merge branch 'common-commands' of https://github.com/talonhub/communi…
knausj85 Oct 22, 2023
31e24ca
Merge branch 'main' into common-commands
knausj85 Dec 28, 2023
7631f00
Merge branch 'main' into common-commands
knausj85 Feb 4, 2024
f97d51e
talon_code_insert_action_call
knausj85 Feb 11, 2024
0e144f6
Update talon_debug_window.talon
knausj85 Feb 11, 2024
ee2e970
Merge branch 'main' into common-commands
knausj85 Apr 6, 2024
4f2ad46
Update talon_python_activator.talon
knausj85 Apr 6, 2024
50fea8a
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 6, 2024
a03d024
Update talon_python_activator.talon
knausj85 Apr 6, 2024
bfcff72
Merge branch 'main' into common-commands
nriley Apr 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions apps/talon/talon_debug_window/talon_debug_window.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# this functionality is only available in the talon beta
from talon import Module

mod = Module()
mod.apps.talon_debug_window = """
os: mac
and app.bundle: com.talonvoice.Talon
win.title: Talon Debug
"""
mod.apps.talon_debug_window = """
os: windows
and app.name: Talon
os: windows
and app.exe: talon.exe
win.title: Talon Debug
"""
24 changes: 24 additions & 0 deletions apps/talon/talon_debug_window/talon_debug_window.talon
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# this functionality is only available in the talon beta
# note: these commands are only useful when the search box is focused
app: talon_debug_window
-
# uncomment user.talon_populate_lists tag to activate talon-specific lists of actions, scopes, modes etcetera.
# Do not enable this tag with dragon, as it will be unusable.
# with conformer, the latency increase may also be unacceptable depending on your cpu
# see https://github.com/talonhub/community/issues/600
# tag(): user.talon_populate_lists

tag {user.talon_tags}: "{talon_tags}"

#commands for dictating key combos
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be helpful if there is a comment that explains how to use these in the context of the Talon debug window.

key <user.keys> over: "{keys}"
key <user.modifiers> over: "{modifiers}"

action {user.talon_actions}: "{talon_actions}"
# requires user.talon_populate_lists tag. do not use with dragon
list {user.talon_lists}: "{talon_lists}"

# requires user.talon_populate_lists tag. do not use with dragon
capture {user.talon_captures}: "{talon_captures}"
set {user.talon_settings}: "{talon_settings}"
application {user.talon_apps}: "{talon_apps}"
1 change: 1 addition & 0 deletions core/modes/language_modes.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
# 'snippets': 'snippets',
"sql": "sql",
"talon": "talon",
"talonlist": "talon-list",
"terraform": "tf",
"tex": "tex",
"typescript": "ts",
Expand Down
6 changes: 3 additions & 3 deletions lang/tags/functions_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def code_toggle_functions():
if gui_functions.showing:
function_list = []
gui_functions.hide()
ctx.tags.discard("user.code_functions_common_gui_active")
ctx.tags = []
else:
update_function_list_and_freeze()

Expand All @@ -57,7 +57,7 @@ def update_function_list_and_freeze():
function_list = []

gui_functions.show()
ctx.tags.add("user.code_functions_common_gui_active")
ctx.tags = ["user.code_functions_common_gui_active"]


@imgui.open()
Expand All @@ -74,7 +74,7 @@ def gui_functions(gui: imgui.GUI):

gui.spacer()
if gui.button("Toggle funk (close window)"):
actions.user.code_toggle_functions_hide()
actions.user.code_toggle_functions()


def commands_updated(_):
Expand Down
5 changes: 5 additions & 0 deletions lang/talon/talon-list.talon
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
code.language: talonlist
-
# requires user.talon_populate_lists tag. do not use with dragon
list [require] {user.talon_lists}: "list: {talon_lists}"
list [require]: "list: "
65 changes: 54 additions & 11 deletions lang/talon/talon.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
from talon import Context, Module, actions, app, registry

mod = Module()
ctx = Context()


ctx_talon = Context()
ctx_talon_python = Context()
ctx_talon_lists = Context()

# restrict all the talon_* lists to when the user.talon_populate_lists tag
Expand All @@ -30,15 +29,13 @@
mod.list("talon_scopes")
mod.list("talon_modes")

ctx.matches = r"""
ctx_talon.matches = r"""
code.language: talon
"""
ctx.lists["user.code_common_function"] = {
"insert": "insert",
"key": "key",
"print": "print",
"repeat": "repeat",
}

ctx_talon_python.matches = r"""
tag: user.talon_python
"""


def on_update_decls(decls):
Expand Down Expand Up @@ -73,7 +70,53 @@ def on_ready():
app.register("ready", on_ready)


@ctx.action_class("user")
@mod.action_class
class Actions:
def talon_code_insert_action_call(text: str, selection: str):
"""inserts talon-specific action call"""
actions.user.code_insert_function(text, selection)

def talon_code_enable_tag(tag: str):
"""enables tag in either python or talon files"""

def talon_code_enable_setting(setting: str):
"""asserts setting in either python or talon files"""


@ctx_talon.action_class("user")
class TalonActions:
def talon_code_enable_tag(tag: str):
"""enables tag in either python or talon files"""
actions.user.paste(f"tag(): {tag}")

def talon_code_enable_setting(setting: str):
"""asserts setting in either python or talon files"""
actions.user.paste(f"{setting} = ")


@ctx_talon_python.action_class("user")
class TalonPythonActions:
def talon_code_insert_action_call(text: str, selection: str):
text = f"actions.{text}({selection or ''})"
actions.user.paste(text)
actions.edit.left()

def talon_code_enable_tag(tag: str):
"""enables tag in either python or talon files"""
actions.user.paste(f'ctx.tags = ["{tag}"]')
if not tag:
actions.edit.left()
actions.edit.left()

def talon_code_enable_setting(setting: str):
"""asserts setting in either python or talon files"""
if not setting:
actions.user.insert_between('ctx.settings["', '"] = ')
else:
actions.user.paste(f'ctx.settings["{setting}"] = ')


@ctx_talon.action_class("user")
class UserActions:
def code_operator_and():
actions.auto_insert(" and ")
Expand Down
39 changes: 0 additions & 39 deletions lang/talon/talon.talon
Original file line number Diff line number Diff line change
Expand Up @@ -10,44 +10,5 @@ tag(): user.code_functions_common
# see https://github.com/talonhub/community/issues/600
# tag(): user.talon_populate_lists

dot talon: insert(".talon")
#defintion blocks for the context
action block: user.insert_between("action(", "):")
setting block: insert("settings():\n\t")
setting {user.talon_settings}: user.paste("{talon_settings} = ")
#context requirements
win require: insert("os: windows\n")
mac require: insert("os: mac\n")
linux require: insert("os: linux\n")
title require: insert("win.title: ")
application [require] [{user.talon_apps}]:
app = talon_apps or ""
user.paste("app: {app}")
mode require [{user.talon_modes}]:
mode = talon_modes or ""
user.paste("mode: {mode}")
tag require [{user.talon_tags}]:
tag = talon_tags or ""
user.paste("tag: {tag}")
tag set [{user.talon_tags}]:
tag = talon_tags or ""
user.paste("tag(): {tag}")
host require:
hostname = user.talon_get_hostname()
user.paste("hostname: {hostname}\n")
# requires user.talon_populate_lists tag. do not use with dragon
list {user.talon_lists}: "{{{talon_lists}}}"
# requires user.talon_populate_lists tag. do not use with dragon
capture {user.talon_captures}: "<{talon_captures}>"

#commands for dictating key combos
key <user.keys> over: "{keys}"
key <user.modifiers> over: "{modifiers}"

# all actions (requires uncommenting user.talon_populate_lists tag above)
funk {user.talon_actions}:
user.code_insert_function(talon_actions, edit.selected_text())
funk cell <number>: user.code_select_function(number - 1, "")
funk wrap <user.code_common_function>:
user.code_insert_function(code_common_function, edit.selected_text())
funk wrap <number>: user.code_select_function(number - 1, edit.selected_text())
7 changes: 7 additions & 0 deletions lang/talon/talon_code_common_function.talon-list
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
list: user.code_common_function
code.language: talon
-
insert
key
print
repeat
22 changes: 22 additions & 0 deletions lang/talon/talon_common.talon
knausj85 marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#Defines commands common to both python and talon files
code.language: talon
code.language: python
and tag: user.talon_python
-
tag set [{user.talon_tags}]:
tag = talon_tags or ""
user.talon_code_enable_tag(tag)

# requires user.talon_populate_lists tag. do not use with dragon
list {user.talon_lists}: "{{{talon_lists}}}"
# requires user.talon_populate_lists tag. do not use with dragon
capture {user.talon_captures}: "<{talon_captures}>"

setting {user.talon_settings}: user.talon_code_enable_setting(talon_settings)

#commands for dictating key combos
key <user.keys> over: "{keys}"
key <user.modifiers> over: "{modifiers}"

action {user.talon_actions}:
user.talon_code_insert_action_call(talon_actions, edit.selected_text())
22 changes: 22 additions & 0 deletions lang/talon/talon_context.talon
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
code.language: talon
code.language: talonlist
code.language: python
and tag: user.talon_python
-
#context requirements
win require: insert("os: windows\n")
mac require: insert("os: mac\n")
linux require: insert("os: linux\n")
title require: insert("win.title: ")
application [require] [{user.talon_apps}]:
app = "{talon_apps}\n" or ""
insert("app: {app}")
mode require [{user.talon_modes}]:
mode = "{talon_modes}\n" or ""
insert("mode: {mode}")
tag require [{user.talon_tags}]:
tag = "{talon_tags}\n" or ""
insert("tag: {tag}")
host require:
hostname = user.talon_get_hostname()
insert("hostname: {hostname}\n")
14 changes: 14 additions & 0 deletions lang/talon/talon_python_activator.talon
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# This file activates talon-specific python commands
# by default, it simply looks for the python tag to be active
# lines 7-11 provide examples to make the activation more specific
# which may be preferred by people who code in other python projects
# app: vscode
# Mac VSCode uses an em-dash
# win.title: /— user/
# win.title: /— community/
# windows VSCode uses an en-dash
# win.title: / - user - Visual Studio Code/
# win.title: / - community - Visual Studio Code/
code.language: python
-
tag(): user.talon_python