Skip to content

Commit 81f0835

Browse files
Workaround for number_small performance on old knausj version (#1026)
Co-authored-by: Andreas Arvidsson <[email protected]>
1 parent 9dcbcae commit 81f0835

File tree

4 files changed

+57
-11
lines changed

4 files changed

+57
-11
lines changed

src/marks/lines_number.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,17 @@ class CustomizableTerm:
3737

3838

3939
@mod.capture(
40-
rule="{user.cursorless_line_direction} <number_small> [{user.cursorless_range_connective} <number_small>]"
40+
rule="{user.cursorless_line_direction} <user.private_cursorless_number_small> [{user.cursorless_range_connective} <user.private_cursorless_number_small>]"
4141
)
4242
def cursorless_line_number(m) -> dict[str, Any]:
4343
direction = directions_map[m.cursorless_line_direction]
4444
anchor = create_line_number_mark(
45-
direction.type, direction.formatter(m.number_small_list[0])
45+
direction.type, direction.formatter(m.private_cursorless_number_small_list[0])
4646
)
47-
if len(m.number_small_list) > 1:
47+
if len(m.private_cursorless_number_small_list) > 1:
4848
active = create_line_number_mark(
49-
direction.type, direction.formatter(m.number_small_list[1])
49+
direction.type,
50+
direction.formatter(m.private_cursorless_number_small_list[1]),
5051
)
5152
include_anchor = is_anchor_included(m.cursorless_range_connective)
5253
include_active = is_active_included(m.cursorless_range_connective)

src/modifiers/ordinal_scope.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,18 @@ def cursorless_ordinal_range(m) -> dict[str, Any]:
4848

4949

5050
@mod.capture(
51-
rule="({user.cursorless_first_modifier} | {user.cursorless_last_modifier}) <number_small> <user.cursorless_scope_type_plural>"
51+
rule="({user.cursorless_first_modifier} | {user.cursorless_last_modifier}) <user.private_cursorless_number_small> <user.cursorless_scope_type_plural>"
5252
)
5353
def cursorless_first_last(m) -> dict[str, Any]:
5454
"""First/last `n` scopes; eg "first three funks"""
5555
if m[0] == "first":
5656
return create_ordinal_scope_modifier(
57-
m.cursorless_scope_type_plural, 0, m.number_small
57+
m.cursorless_scope_type_plural, 0, m.private_cursorless_number_small
5858
)
5959
return create_ordinal_scope_modifier(
60-
m.cursorless_scope_type_plural, -m.number_small, m.number_small
60+
m.cursorless_scope_type_plural,
61+
-m.private_cursorless_number_small,
62+
m.private_cursorless_number_small,
6163
)
6264

6365

src/modifiers/relative_scope.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,27 @@ def cursorless_relative_scope_singular(m) -> dict[str, Any]:
3131

3232

3333
@mod.capture(
34-
rule="<user.cursorless_relative_direction> <number_small> <user.cursorless_scope_type_plural>"
34+
rule="<user.cursorless_relative_direction> <user.private_cursorless_number_small> <user.cursorless_scope_type_plural>"
3535
)
3636
def cursorless_relative_scope_plural(m) -> dict[str, Any]:
3737
"""Relative previous/next plural scope. `next three funks`"""
3838
return create_relative_scope_modifier(
3939
m.cursorless_scope_type_plural,
4040
1,
41-
m.number_small,
41+
m.private_cursorless_number_small,
4242
m.cursorless_relative_direction,
4343
)
4444

4545

4646
@mod.capture(
47-
rule="<number_small> <user.cursorless_scope_type_plural> [{user.cursorless_backward_modifier}]"
47+
rule="<user.private_cursorless_number_small> <user.cursorless_scope_type_plural> [{user.cursorless_backward_modifier}]"
4848
)
4949
def cursorless_relative_scope_count(m) -> dict[str, Any]:
5050
"""Relative count scope. `three funks`"""
5151
return create_relative_scope_modifier(
5252
m.cursorless_scope_type_plural,
5353
0,
54-
m.number_small,
54+
m.private_cursorless_number_small,
5555
getattr(m, "cursorless_backward_modifier", "forward"),
5656
)
5757

src/number_small.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""
2+
This file allows us to use a custom `number_small` capture. See #1021 for more
3+
info.
4+
"""
5+
from talon import Context, Module
6+
7+
mod = Module()
8+
mod.tag(
9+
"cursorless_custom_number_small",
10+
"This tag causes Cursorless to use the global <number_small> capture",
11+
)
12+
13+
ctx = Context()
14+
ctx.matches = """
15+
not tag: user.cursorless_custom_number_small
16+
"""
17+
18+
19+
@mod.capture(rule="<number_small>")
20+
def private_cursorless_number_small(m) -> int:
21+
return m.number_small
22+
23+
24+
digit_list = "zero one two three four five six seven eight nine".split()
25+
teens = "ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen".split()
26+
tens = "twenty thirty forty fifty sixty seventy eighty ninety".split()
27+
28+
number_small_list = [*digit_list, *teens]
29+
for ten in tens:
30+
number_small_list.append(ten)
31+
number_small_list.extend(f"{ten} {digit}" for digit in digit_list[1:])
32+
number_small_map = {n: i for i, n in enumerate(number_small_list)}
33+
34+
mod.list("private_cursorless_number_small", desc="List of small numbers")
35+
ctx.lists["self.private_cursorless_number_small"] = number_small_map.keys()
36+
37+
38+
@ctx.capture(
39+
"user.private_cursorless_number_small",
40+
rule="{user.private_cursorless_number_small}",
41+
)
42+
def override_private_cursorless_number_small(m) -> int:
43+
return number_small_map[m.private_cursorless_number_small]

0 commit comments

Comments
 (0)