Skip to content

Commit 6f01c31

Browse files
authored
Add keyboard special target (#2168)
- Depends on #2170 ## Checklist - [x] I have added [tests](https://www.cursorless.org/docs/contributing/test-case-recorder/) - [-] I have updated the [docs](https://github.com/cursorless-dev/cursorless/tree/main/docs) and [cheatsheet](https://github.com/cursorless-dev/cursorless/tree/main/cursorless-talon/src/cheatsheet) - [-] I have not broken the cheatsheet
1 parent f2c9f4a commit 6f01c31

File tree

16 files changed

+120
-87
lines changed

16 files changed

+120
-87
lines changed

packages/common/src/StoredTargetKey.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ export const storedTargetKeys = [
22
"that",
33
"source",
44
"instanceReference",
5+
"keyboard",
56
] as const;
67
export type StoredTargetKey = (typeof storedTargetKeys)[number];

packages/common/src/types/command/ActionDescriptor.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const simpleActionNames = [
4949
"toggleLineBreakpoint",
5050
"toggleLineComment",
5151
"unfoldRegion",
52+
"private.setKeyboardTarget",
5253
"private.showParseTree",
5354
"private.getTargets",
5455
] as const;

packages/common/src/types/command/PartialTargetDescriptor.types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ export interface ThatMark {
66
type: "that";
77
}
88

9+
export interface KeyboardMark {
10+
type: "keyboard";
11+
}
12+
913
export interface SourceMark {
1014
type: "source";
1115
}
@@ -69,6 +73,7 @@ export type PartialMark =
6973
| CursorMark
7074
| ThatMark
7175
| SourceMark
76+
| KeyboardMark
7277
| DecoratedSymbolMark
7378
| NothingMark
7479
| LineNumberMark

packages/cursorless-engine/src/CommandHistory.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ function sanitizeActionInPlace(action: ActionDescriptor): void {
194194
case "swapTargets":
195195
case "wrapWithPairedDelimiter":
196196
case "findInDocument":
197+
case "private.setKeyboardTarget":
197198
break;
198199

199200
default: {

packages/cursorless-engine/src/actions/Actions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ export class Actions implements ActionRecord {
134134
scrollToBottom = new ScrollToBottom();
135135
scrollToCenter = new ScrollToCenter();
136136
scrollToTop = new ScrollToTop();
137+
["private.setKeyboardTarget"] = new SetSpecialTarget("keyboard");
137138
["experimental.setInstanceReference"] = new SetSpecialTarget(
138139
"instanceReference",
139140
);

packages/cursorless-engine/src/actions/actions.types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ export interface ActionReturnValue {
5252
* to determine either the range for "every", or the start point for "next"
5353
*/
5454
instanceReferenceTargets?: Target[];
55+
56+
/**
57+
* A list of targets that become the active keybaord targets
58+
*/
59+
keyboardTargets?: Target[];
5560
}
5661

5762
export interface SimpleAction {

packages/cursorless-engine/src/core/commandRunner/CommandRunnerImpl.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export class CommandRunnerImpl implements CommandRunner {
5454
sourceSelections: newSourceSelections,
5555
sourceTargets: newSourceTargets,
5656
instanceReferenceTargets: newInstanceReferenceTargets,
57+
keyboardTargets: newKeyboardTargets,
5758
} = await this.runAction(action);
5859

5960
this.storedTargets.set(
@@ -65,6 +66,7 @@ export class CommandRunnerImpl implements CommandRunner {
6566
constructStoredTarget(newSourceTargets, newSourceSelections),
6667
);
6768
this.storedTargets.set("instanceReference", newInstanceReferenceTargets);
69+
this.storedTargets.set("keyboard", newKeyboardTargets);
6870

6971
return returnValue;
7072
}

packages/cursorless-engine/src/generateSpokenForm/defaultSpokenForms/actions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export const actions = {
6565
getText: null,
6666
replace: null,
6767
["private.getTargets"]: null,
68+
["private.setKeyboardTarget"]: null,
6869

6970
// These actions are implemented talon-side, usually using `getText` followed
7071
// by some other action.

packages/cursorless-engine/src/generateSpokenForm/defaultSpokenForms/marks.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export const marks = {
3535
source: "source",
3636
nothing: "nothing",
3737

38+
keyboard: null,
3839
explicit: null,
3940
decoratedSymbol: null,
4041
lineNumber: null,

packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ export class SpokenFormGenerator {
104104
case "replace":
105105
case "executeCommand":
106106
case "private.getTargets":
107+
case "private.setKeyboardTarget":
107108
throw new NoSpokenFormError(`Action '${action.name}'`);
108109

109110
case "replaceWithTarget":

0 commit comments

Comments
 (0)