From 8ea18f0165b00a2a141d72f86ad6cbf474b249de Mon Sep 17 00:00:00 2001 From: wsbak Date: Tue, 12 Mar 2024 21:51:47 +0100 Subject: [PATCH] Start with last searched value or current editor selection --- CHANGELOG.md | 4 ++++ package.json | 2 +- src/extension.ts | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 401e04c..3603106 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,3 +22,7 @@ - feat: can select multiple cases. - feat: add Capital Case. - feat: add path/case. + +## 0.0.6 + +- feat: start with last searched value or current editor selection diff --git a/package.json b/package.json index 10f2b93..6ce638c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "case-search", "displayName": "Case Search", "description": "A VS Code search extension based on native search component.", - "version": "0.0.5", + "version": "0.0.6", "engines": { "vscode": "^1.40.0" }, diff --git a/src/extension.ts b/src/extension.ts index 2630635..e604ba1 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -75,6 +75,36 @@ function saveSelectedItems(context: ExtensionContext, selectedItems: readonly Qu } } +function getSelectedText() { + const editor = window.activeTextEditor; + const selection = editor?.selection; + const selectedText = editor?.document.getText(selection); + return selectedText; +} + +// Get the initial value to search +function getInitialValue(context: ExtensionContext) { + const lastSearchedValue = context.workspaceState.get("lastSearchedValue", ""); + const selectedText = getSelectedText(); + + if (selectedText === undefined) { + // No selected text + // So start with last searched value or "" + return lastSearchedValue; + } + + const lastSelectedText = context.workspaceState.get("lastSelectedText", ""); + if (selectedText !== lastSelectedText) { + // Selected text modified (by user) since last search + // So start with it + return selectedText; + } + + // Selected text NOT modified since last search + // So start with last searched value or "" + return lastSearchedValue; +} + export function activate(context: ExtensionContext) { context.subscriptions.push(commands.registerCommand('case-search.showSearchBox', async () => { @@ -83,11 +113,15 @@ export function activate(context: ExtensionContext) { quickPick.canSelectMany = true; quickPick.selectedItems = readSelectedItems(context); quickPick.placeholder = "please input query text, default scope is all cases"; + quickPick.value = getInitialValue(context); quickPick.onDidAccept(() => { // console.log("onDidAccept", "value", quickPick.value, "selectedItems", quickPick.selectedItems); saveSelectedItems(context, quickPick.selectedItems); if (quickPick.value) { + context.workspaceState.update("lastSearchedValue", quickPick.value); + context.workspaceState.update("lastSelectedText", getSelectedText()); + // If no selectedItems, we take all quickPickItems let items = quickPick.selectedItems.length <= 0 ? quickPickItems : quickPick.selectedItems; let query = buildRegexQuery(quickPick.value, items);