141 lines
3.8 KiB
Python
141 lines
3.8 KiB
Python
from talon import Context, Module, actions, app, registry
|
|
|
|
from ..tags.operators import Operators
|
|
|
|
mod = Module()
|
|
ctx_talon = Context()
|
|
ctx_talon_python = Context()
|
|
ctx_talon_lists = Context()
|
|
|
|
# restrict all the talon_* lists to when the user.talon_populate_lists tag
|
|
# is active to prevent them from being active in contexts where they are not wanted.
|
|
# 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
|
|
ctx_talon_lists.matches = r"""
|
|
tag: user.talon_populate_lists
|
|
"""
|
|
|
|
mod.tag("talon_python", "Tag to activate talon-specific python commands")
|
|
mod.tag(
|
|
"talon_populate_lists",
|
|
"Tag to activate talon-specific lists of actions, scopes, modes etcetera. Do not use this tag with dragon",
|
|
)
|
|
mod.list("talon_actions")
|
|
mod.list("talon_lists")
|
|
mod.list("talon_captures")
|
|
mod.list("talon_apps")
|
|
mod.list("talon_tags")
|
|
mod.list("talon_modes")
|
|
mod.list("talon_settings")
|
|
mod.list("talon_scopes")
|
|
mod.list("talon_modes")
|
|
|
|
ctx_talon.matches = r"""
|
|
code.language: talon
|
|
"""
|
|
|
|
ctx_talon_python.matches = r"""
|
|
tag: user.talon_python
|
|
"""
|
|
|
|
|
|
def on_update_decls(decls):
|
|
# todo modes?
|
|
for thing in [
|
|
"actions",
|
|
"lists",
|
|
"captures",
|
|
"tags",
|
|
"apps",
|
|
"settings",
|
|
"scopes",
|
|
"modes",
|
|
]:
|
|
l = getattr(decls, thing)
|
|
ctx_talon_lists.lists[f"user.talon_{thing}"] = (
|
|
actions.user.create_spoken_forms_from_list(
|
|
l.keys(), generate_subsequences=False
|
|
)
|
|
)
|
|
# print(
|
|
# "List: {} \n {}".format(thing, str(ctx_talon_lists.lists[f"user.talon_{thing}"]))
|
|
# )
|
|
|
|
|
|
def on_ready():
|
|
# print("on_ready")
|
|
on_update_decls(registry.decls)
|
|
registry.register("update_decls", on_update_decls)
|
|
|
|
|
|
app.register("ready", on_ready)
|
|
|
|
|
|
@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}"] = ')
|
|
|
|
|
|
operators = Operators(
|
|
MATH_AND=" and ",
|
|
MATH_OR=" or ",
|
|
MATH_SUBTRACT=" - ",
|
|
MATH_ADD=" + ",
|
|
MATH_MULTIPLY=" * ",
|
|
MATH_DIVIDE=" / ",
|
|
ASSIGNMENT=" = ",
|
|
)
|
|
|
|
|
|
@ctx_talon.action_class("user")
|
|
class UserActions:
|
|
def code_get_operators() -> Operators:
|
|
return operators
|
|
|
|
def code_insert_function(text: str, selection: str):
|
|
text += f"({selection or ''})"
|
|
actions.user.paste(text)
|
|
actions.edit.left()
|