From 5607d6b36548950fa5cc8b63e7cd5874b1415e29 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 10 Jul 2017 14:05:07 -0700 Subject: [PATCH] Seed terminal find widget with current selection (#30351) * Seed terminal find widget with current selection Fixes #29712 Use the current selection as the search when we first show the find widget for the terminal * Making requested changes --- src/vs/editor/contrib/find/browser/simpleFindWidget.ts | 6 +++++- src/vs/workbench/parts/terminal/common/terminal.ts | 5 +++++ .../parts/terminal/electron-browser/terminalInstance.ts | 4 ++++ .../parts/terminal/electron-browser/terminalPanel.ts | 7 ++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/contrib/find/browser/simpleFindWidget.ts b/src/vs/editor/contrib/find/browser/simpleFindWidget.ts index cdf0a0f223d..404da3a75ca 100644 --- a/src/vs/editor/contrib/find/browser/simpleFindWidget.ts +++ b/src/vs/editor/contrib/find/browser/simpleFindWidget.ts @@ -194,7 +194,11 @@ export abstract class SimpleFindWidget extends Widget { return this._domNode; } - public reveal(): void { + public reveal(initialInput?: string): void { + if (initialInput) { + this._findInput.setValue(initialInput); + } + if (this._isVisible) { this._findInput.select(); return; diff --git a/src/vs/workbench/parts/terminal/common/terminal.ts b/src/vs/workbench/parts/terminal/common/terminal.ts index 449cf29d2fc..3148eb3aaaf 100644 --- a/src/vs/workbench/parts/terminal/common/terminal.ts +++ b/src/vs/workbench/parts/terminal/common/terminal.ts @@ -232,6 +232,11 @@ export interface ITerminalInstance { */ copySelection(): void; + /** + * Current selection in the terminal. + */ + readonly selection: string | undefined; + /** * Clear current selection. */ diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts index b946d869c6d..2dcfd8726fa 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts @@ -344,6 +344,10 @@ export class TerminalInstance implements ITerminalInstance { } } + get selection(): string | undefined { + return this.hasSelection() ? this._xterm.getSelection() : undefined; + } + public clearSelection(): void { this._xterm.clearSelection(); } diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts index cd8300d6b54..1b550324c4c 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalPanel.ts @@ -159,7 +159,12 @@ export class TerminalPanel extends Panel { } public focusFindWidget() { - this._findWidget.reveal(); + const activeInstance = this._terminalService.getActiveInstance(); + if (activeInstance && activeInstance.hasSelection()) { + this._findWidget.reveal(activeInstance.selection); + } else { + this._findWidget.reveal(); + } } public hideFindWidget() { -- GitLab