Skip to content

Workaround for number_small performance on old knausj version #1026

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

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 5 additions & 4 deletions cursorless-talon/src/marks/lines_number.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,17 @@ class CustomizableTerm:


@mod.capture(
rule="{user.cursorless_line_direction} <number_small> [{user.cursorless_range_connective} <number_small>]"
rule="{user.cursorless_line_direction} <user.private_cursorless_number_small> [{user.cursorless_range_connective} <user.private_cursorless_number_small>]"
)
def cursorless_line_number(m) -> dict[str, Any]:
direction = directions_map[m.cursorless_line_direction]
anchor = create_line_number_mark(
direction.type, direction.formatter(m.number_small_list[0])
direction.type, direction.formatter(m.private_cursorless_number_small_list[0])
)
if len(m.number_small_list) > 1:
if len(m.private_cursorless_number_small_list) > 1:
active = create_line_number_mark(
direction.type, direction.formatter(m.number_small_list[1])
direction.type,
direction.formatter(m.private_cursorless_number_small_list[1]),
)
include_anchor = is_anchor_included(m.cursorless_range_connective)
include_active = is_active_included(m.cursorless_range_connective)
Expand Down
8 changes: 5 additions & 3 deletions cursorless-talon/src/modifiers/ordinal_scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,18 @@ def cursorless_ordinal_range(m) -> dict[str, Any]:


@mod.capture(
rule="({user.cursorless_first_modifier} | {user.cursorless_last_modifier}) <number_small> <user.cursorless_scope_type_plural>"
rule="({user.cursorless_first_modifier} | {user.cursorless_last_modifier}) <user.private_cursorless_number_small> <user.cursorless_scope_type_plural>"
)
def cursorless_first_last(m) -> dict[str, Any]:
"""First/last `n` scopes; eg "first three funks"""
if m[0] == "first":
return create_ordinal_scope_modifier(
m.cursorless_scope_type_plural, 0, m.number_small
m.cursorless_scope_type_plural, 0, m.private_cursorless_number_small
)
return create_ordinal_scope_modifier(
m.cursorless_scope_type_plural, -m.number_small, m.number_small
m.cursorless_scope_type_plural,
-m.private_cursorless_number_small,
m.private_cursorless_number_small,
)


Expand Down
8 changes: 4 additions & 4 deletions cursorless-talon/src/modifiers/relative_scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,27 +31,27 @@ def cursorless_relative_scope_singular(m) -> dict[str, Any]:


@mod.capture(
rule="<user.cursorless_relative_direction> <number_small> <user.cursorless_scope_type_plural>"
rule="<user.cursorless_relative_direction> <user.private_cursorless_number_small> <user.cursorless_scope_type_plural>"
)
def cursorless_relative_scope_plural(m) -> dict[str, Any]:
"""Relative previous/next plural scope. `next three funks`"""
return create_relative_scope_modifier(
m.cursorless_scope_type_plural,
1,
m.number_small,
m.private_cursorless_number_small,
m.cursorless_relative_direction,
)


@mod.capture(
rule="<number_small> <user.cursorless_scope_type_plural> [{user.cursorless_backward_modifier}]"
rule="<user.private_cursorless_number_small> <user.cursorless_scope_type_plural> [{user.cursorless_backward_modifier}]"
)
def cursorless_relative_scope_count(m) -> dict[str, Any]:
"""Relative count scope. `three funks`"""
return create_relative_scope_modifier(
m.cursorless_scope_type_plural,
0,
m.number_small,
m.private_cursorless_number_small,
getattr(m, "cursorless_backward_modifier", "forward"),
)

Expand Down
43 changes: 43 additions & 0 deletions cursorless-talon/src/number_small.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""
This file allows us to use a custom `number_small` capture. See #1021 for more
info.
"""
from talon import Context, Module

mod = Module()
mod.tag(
"cursorless_custom_number_small",
"This tag causes Cursorless to use the global <number_small> capture",
)

ctx = Context()
ctx.matches = """
not tag: user.cursorless_custom_number_small
"""


@mod.capture(rule="<number_small>")
def private_cursorless_number_small(m) -> int:
return m.number_small


digit_list = "zero one two three four five six seven eight nine".split()
teens = "ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen".split()
tens = "twenty thirty forty fifty sixty seventy eighty ninety".split()

number_small_list = [*digit_list, *teens]
for ten in tens:
number_small_list.append(ten)
number_small_list.extend(f"{ten} {digit}" for digit in digit_list[1:])
number_small_map = {n: i for i, n in enumerate(number_small_list)}

mod.list("private_cursorless_number_small", desc="List of small numbers")
ctx.lists["self.private_cursorless_number_small"] = number_small_map.keys()


@ctx.capture(
"user.private_cursorless_number_small",
rule="{user.private_cursorless_number_small}",
)
def override_private_cursorless_number_small(m) -> int:
return number_small_map[m.private_cursorless_number_small]