dotfiles/talon/cursorless-talon/src/spoken_scope_forms.py

49 lines
2.2 KiB
Python

from talon import Context, scope
from .csv_overrides import csv_get_ctx, csv_get_normalized_ctx
def init_scope_spoken_forms(graphemes_talon_list: dict[str, str]):
create_flattened_talon_list(csv_get_ctx(), graphemes_talon_list)
if is_cursorless_test_mode():
create_flattened_talon_list(csv_get_normalized_ctx(), graphemes_talon_list)
def create_flattened_talon_list(ctx: Context, graphemes_talon_list: dict[str, str]):
lists_to_merge = {
"cursorless_scope_type": "simple",
"cursorless_selectable_only_paired_delimiter": "surroundingPair",
"cursorless_wrapper_selectable_paired_delimiter": "surroundingPair",
"cursorless_surrounding_pair_scope_type": "surroundingPair",
}
# If the user have no custom regex scope type, then that list is missing from the context
if "user.cursorless_custom_regex_scope_type" in ctx.lists.keys(): # noqa: SIM118
lists_to_merge["cursorless_custom_regex_scope_type"] = "customRegex"
scope_types_singular: dict[str, str] = {}
scope_types_plural: dict[str, str] = {}
for list_name, prefix in lists_to_merge.items():
for key, value in ctx.lists[f"user.{list_name}"].items():
scope_types_singular[key] = f"{prefix}.{value}"
for key, value in ctx.lists[f"user.{list_name}_plural"].items():
scope_types_plural[key] = f"{prefix}.{value}"
glyph_singular_spoken_forms = ctx.lists["user.cursorless_glyph_scope_type"]
glyph_plural_spoken_forms = ctx.lists["user.cursorless_glyph_scope_type_plural"]
for grapheme_key, grapheme_value in graphemes_talon_list.items():
value = f"glyph.{grapheme_value}"
for glyph in glyph_singular_spoken_forms:
key = f"{glyph} {grapheme_key}"
scope_types_singular[key] = value
for glyph in glyph_plural_spoken_forms:
key = f"{glyph} {grapheme_key}"
scope_types_plural[key] = value
ctx.lists["user.cursorless_scope_type_flattened"] = scope_types_singular
ctx.lists["user.cursorless_scope_type_flattened_plural"] = scope_types_plural
def is_cursorless_test_mode():
return "user.cursorless_spoken_form_test" in scope.get("mode")