init commit
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
from talon import Context, Module, actions, clip, imgui, speech_system
|
||||
|
||||
mod = Module()
|
||||
|
||||
mod.list(
|
||||
"saved_macros",
|
||||
desc="list of macros that have been saved with the 'macro save' command",
|
||||
)
|
||||
ctx = Context()
|
||||
|
||||
macros = {}
|
||||
macro = []
|
||||
recording = False
|
||||
|
||||
|
||||
@imgui.open(y=0)
|
||||
def macro_list_gui(gui: imgui.GUI):
|
||||
gui.text("macros")
|
||||
gui.line()
|
||||
for command_name in macros.keys():
|
||||
gui.text(command_name)
|
||||
|
||||
if gui.button("macro list close"):
|
||||
actions.user.macro_list_close()
|
||||
|
||||
|
||||
@mod.action_class
|
||||
class Actions:
|
||||
def macro_record():
|
||||
"""Begin recording a new voice command macro."""
|
||||
global macro
|
||||
global recording
|
||||
|
||||
macro = []
|
||||
recording = True
|
||||
|
||||
def macro_stop():
|
||||
"""Stop recording the macro."""
|
||||
global recording
|
||||
if recording and len(macro) != 0:
|
||||
# Remove the final `macro stop`/`macro play`/`macro save` command
|
||||
macro.pop()
|
||||
recording = False
|
||||
|
||||
def macro_save(name: str):
|
||||
"""Save the macro."""
|
||||
actions.user.macro_stop()
|
||||
macros[name] = macro
|
||||
|
||||
ctx.lists["user.saved_macros"] = macros.keys()
|
||||
|
||||
def macro_list():
|
||||
"""List all saved macros."""
|
||||
macro_list_gui.show()
|
||||
|
||||
def macro_list_close():
|
||||
"""Closed the saved macros list."""
|
||||
macro_list_gui.hide()
|
||||
|
||||
def macro_play(name: str):
|
||||
"""Execute the commands in the last recorded macro."""
|
||||
actions.user.macro_stop()
|
||||
|
||||
selected_macro = macro
|
||||
if name in macros:
|
||||
selected_macro = macros[name]
|
||||
|
||||
for words in selected_macro:
|
||||
print(words)
|
||||
actions.mimic(words)
|
||||
|
||||
def macro_copy(name: str):
|
||||
"""Copied the specified macro to the clipboard as a Talon command."""
|
||||
selected_macro = macro
|
||||
|
||||
if not name:
|
||||
# No macro name was provided, so we'll copy the most recent command
|
||||
# with this default name
|
||||
name = "last macro command"
|
||||
elif name in macros:
|
||||
selected_macro = macros[name]
|
||||
|
||||
l = [name + ":"]
|
||||
|
||||
for words in selected_macro:
|
||||
l.append(f'\tmimic("{" ".join(words)}")')
|
||||
|
||||
clip.set_text("\n".join(l))
|
||||
|
||||
def macro_append_command(words: list[str]):
|
||||
"""Appends a command to the current macro; called when a voice command is uttered while recording a macro."""
|
||||
assert recording, "Not currently recording a macro"
|
||||
macro.append(words)
|
||||
|
||||
|
||||
def fn(d):
|
||||
if not recording or "parsed" not in d:
|
||||
return
|
||||
actions.user.macro_append_command(d["parsed"]._unmapped)
|
||||
|
||||
|
||||
speech_system.register("pre:phrase", fn)
|
||||
@@ -0,0 +1,8 @@
|
||||
macro record: user.macro_record()
|
||||
macro stop: user.macro_stop()
|
||||
macro play [{user.saved_macros}]: user.macro_play(saved_macros or "")
|
||||
macro copy [{user.saved_macros}]: user.macro_copy(saved_macros or "")
|
||||
macro copy as <user.text>: user.macro_copy(text)
|
||||
macro save as <user.text>: user.macro_save(text)
|
||||
macro list: user.macro_list()
|
||||
macro list close: user.macro_list_close()
|
||||
Reference in New Issue
Block a user