dotfiles/talon/community/community-cursorless-0.4.0/code/edit.py
2024-11-16 20:27:38 -07:00

91 lines
No EOL
2.2 KiB
Python

import time
from talon import Context, Module, actions, clip, ui
ctx = Context()
mod = Module()
@ctx.action_class("edit")
class edit_actions:
def selected_text() -> str:
with clip.capture() as s:
actions.edit.copy()
try:
return s.get()
except clip.NoChange:
return ""
@mod.action_class
class Actions:
def paste(text: str):
"""Pastes text and preserves clipboard"""
with clip.revert():
clip.set_text(text)
actions.edit.paste()
# sleep here so that clip.revert doesn't revert the clipboard too soon
actions.sleep("150ms")
def new_line_below():
"""Create new line below current line"""
actions.edit.line_end()
actions.key("enter")
def new_line_above():
"""Create new line above current line"""
actions.edit.line_start()
actions.key("left")
actions.key("enter")
def down_n(n: int):
"""Goes down n lines"""
for _ in range(n):
actions.edit.down()
actions.sleep("10ms")
def up_n(n: int):
"""Goes up n lines"""
for _ in range(n):
actions.edit.up()
actions.sleep("10ms")
def left_n(n: int):
"""Goes left n lines"""
for _ in range(n):
actions.edit.left()
def delete_left_n(n: int):
"""Goes left n lines"""
actions.key(f"backspace:{n}")
def delete_right_n(n: int):
"""Goes left n lines"""
actions.key(f"delete:{n}")
def right_n(n: int):
"""Goes right n lines"""
for _ in range(n):
actions.edit.right()
def word_right_n(n: int):
"""Goes right n words"""
for _ in range(n):
actions.edit.word_right()
def word_left_n(n: int):
"""Goes left n words"""
for _ in range(n):
actions.edit.word_left()
def delete_word_right_n(n: int):
"""Delete right n words"""
for _ in range(n):
actions.edit.extend_word_right()
actions.edit.delete()
def delete_word_left_n(n: int):
"""Delete left n words"""
for _ in range(n):
actions.edit.extend_word_left()
actions.edit.delete()