Skip to content

Commit 6721b8e

Browse files
authored
feat: double-click to run (#129)
1 parent 2a629fa commit 6721b8e

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,11 @@
300300
"default": true,
301301
"description": "Check if there is a newer version of Task on startup."
302302
},
303+
"doubleClickToRun": {
304+
"type": "number",
305+
"default": 500,
306+
"description": "The double-click timeout for a task in the tree view. To disable double-click to run, set this to 0."
307+
},
303308
"tree": {
304309
"type": "object",
305310
"description": "Tree view configuration options.",

src/services/taskfile.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ class TaskfileService {
4040
private lastTaskDir: string | undefined;
4141
private lastTaskCliArgs: string | undefined;
4242
private version: semver.SemVer | undefined;
43+
private previousSelection: string | undefined;
44+
private previousSelectionTimestamp: number | undefined;
4345

4446
private constructor() {
4547
TaskfileService.outputChannel = vscode.window.createOutputChannel('Task');
@@ -291,6 +293,16 @@ class TaskfileService {
291293
}
292294

293295
public async goToDefinition(task: Task, preview: boolean = false): Promise<void> {
296+
const currentTime = Date.now();
297+
const doubleClicked = this.previousSelection !== undefined && this.previousSelectionTimestamp !== undefined
298+
&& this.previousSelection === task.name
299+
&& (currentTime - this.previousSelectionTimestamp) < settings.doubleClickToRun;
300+
if (doubleClicked) {
301+
this.previousSelection = undefined;
302+
this.previousSelectionTimestamp = undefined;
303+
return this.runTask(task.name);
304+
}
305+
294306
log.info(`Navigating to "${task.name}" definition in: "${task.location.taskfile}"`);
295307

296308
let position = new vscode.Position(task.location.line - 1, task.location.column - 1);
@@ -311,6 +323,9 @@ class TaskfileService {
311323
} catch (err) {
312324
log.error(err);
313325
}
326+
327+
this.previousSelection = task.name;
328+
this.previousSelectionTimestamp = currentTime;
314329
}
315330
}
316331

src/utils/settings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class Settings {
77
public path!: string;
88
public outputTo!: OutputTo;
99
public checkForUpdates!: boolean;
10+
public doubleClickToRun!: number;
1011
public tree!: TreeSettings;
1112
public terminal!: TerminalSettings;
1213

@@ -30,6 +31,7 @@ class Settings {
3031
this.path = config.get("path") ?? "task";
3132
this.outputTo = config.get("outputTo") ?? OutputTo.output;
3233
this.checkForUpdates = config.get("checkForUpdates") ?? true;
34+
this.doubleClickToRun = config.get("doubleClickToRun") ?? 500;
3335
this.tree = new TreeSettings();
3436
this.terminal = new TerminalSettings();
3537
}

0 commit comments

Comments
 (0)