From 0a6fb7dcb433c23a8d62097883ffc399474e2809 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Fri, 20 Jul 2018 11:37:19 +0300 Subject: [PATCH] IDEA-195309 Support Ctrl+Backspace in SpeedSearch --- .../src/com/intellij/openapi/keymap/KeymapUtil.java | 7 +++++++ .../src/com/intellij/ui/speedSearch/SpeedSearch.java | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java b/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java index 240193abaf2f..b7f51440ef37 100644 --- a/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java @@ -231,6 +231,13 @@ public class KeymapUtil { return shortcut == null? "" : getShortcutText(shortcut); } + public static boolean isEventForAction(@NotNull KeyEvent keyEvent, @NotNull String actionId) { + for (KeyboardShortcut shortcut : ContainerUtil.findAll(getActiveKeymapShortcuts(actionId).getShortcuts(), KeyboardShortcut.class)) { + if (AWTKeyStroke.getAWTKeyStrokeForEvent(keyEvent) == shortcut.getFirstKeyStroke()) return true; + } + return false; + } + @NotNull public static String getFirstKeyboardShortcutText(@NotNull AnAction action) { return getFirstKeyboardShortcutText(action.getShortcutSet()); diff --git a/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearch.java b/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearch.java index fbfadb4e34f2..7edf267f64c3 100644 --- a/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearch.java +++ b/platform/platform-api/src/com/intellij/ui/speedSearch/SpeedSearch.java @@ -15,6 +15,7 @@ */ package com.intellij.ui.speedSearch; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.util.TextRange; import com.intellij.psi.codeStyle.AllOccurrencesMatcher; import com.intellij.psi.codeStyle.FixingLayoutMatcher; @@ -68,7 +69,15 @@ public class SpeedSearch extends SpeedSearchSupply implements KeyListener { String old = myString; if (e.getID() == KeyEvent.KEY_PRESSED) { - if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) { + if (KeymapUtil.isEventForAction(e, "EditorDeleteToWordStart")) { + if (isHoldingFilter()) { + while (!myString.isEmpty() && !Character.isWhitespace(myString.charAt(myString.length() - 1))) { + backspace(); + } + e.consume(); + } + } + else if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) { backspace(); e.consume(); }