Есть ли способ изменить ярлыки, чтобы нажатие escape
в виджете поиска (красная точка) давало фокус редактору (зеленая точка), не закрывая виджет поиска?
Я провел небольшое исследование самостоятельно, и я думаю, что мне придется внести два изменения для этого:
escape
к ярлыку, который дает фокус редактору. Я нашел один, который делает это, по имени View: Focus Active Editor Group
. Вероятно, вместо этого я мог бы использовать более подходящий ярлык, и я хотел бы знать, что это такое.escape
.Я совершенно потерял на второй пункт. Есть ярлык под названием Search: Cancel Search
, который кажется очевидным выбором, но колонка «когда» предполагает обратное: listFocus && searchViewletVisible && !inputFocus && searchState != '0'
Во-первых, я не знаю, что означает listFocus
, и официальная документация не объясняет. Во-вторых, !inputFocus
не похоже на сценарий, который я пытаюсь изменить.
В-третьих, поиск сочетаний клавиш escape
нетривиален, так как он закрывает диалоговое окно поиска. К счастью, я сообразил, что это можно сделать с помощью печатание"escape"
в поиск по сочетанию клавиш. Я предоставляю эту информацию другим, потому что им может понадобиться знать это, чтобы помочь мне.
Если я нажму escape в виджете поиска, отладка клавиатуры скажет:
[2022-05-06 04:03:00.883] [renderer1] [info] [KeybindingService]: / Received keydown event - modifiers: [], code: Escape, keyCode: 27, key: Escape
[2022-05-06 04:03:00.883] [renderer1] [info] [KeybindingService]: | Converted keydown event - modifiers: [], code: Escape, keyCode: 9 ('Escape')
[2022-05-06 04:03:00.883] [renderer1] [info] [KeybindingService]: | Resolving Escape
[2022-05-06 04:03:00.883] [renderer1] [info] [KeybindingService]: \ From 52 keybinding entries, matched closeFindWidget, when: editorFocus && findWidgetVisible && !isComposing, source: built-in.
@rioV8 Я думал, что это может быть так, но я не понимал, почему это будет ожидатьlistFocus
и !inputFocus
, если это так.
inputFocus
— это когда у вас есть поле ввода, такое как QuickPick или InputBox вверху, если у вас есть список с фокусом, например проводник, это listFocus
Я думаю
вместо Esc
вы всегда можете использовать Ctrl+1
или Ctrl+2
,..., Ctrl+9
Определите это в своем keybindings,json
Используется последняя привязка клавиш, которая соответствует клавише и when
(поиск осуществляется снизу)
{ "key": "escape",
"command": "workbench.action.focusActiveEditorGroup",
"when": "findInputFocussed && editorFocus || replaceInputFocussed && editorFocus"
}
Предложение when
выглядит странно, но это потому, что вы не можете использовать ()
.
хорошо, так как я не могу использовать ()
, что это говорит? (editorTextFocus && findInputFocussed) || (editorTextFocus && replaceInputFocussed)
? Кроме того, Focussed
это опечатка?
@DanielKaplan Если фокус находится в одном из полей ввода диалогового окна поиска, предложение when
имеет значение True. нет опечатки, это переменная контекста, которая используется в привязках клавиш по умолчанию, да &&
имеет более высокий приоритет, чем ||
, они сначала разбивают строку на ||
Я поместил это внизу моего keybindings,json
[так в оригинале], но когда я нажимаю escape, он все равно закрывает виджет.
@DanielKaplan, вы пробовали отладка привязки клавиш, чтобы увидеть, выбрана ли эта привязка клавиш?
Спасибо за совет. Я обновил свой исходный пост, но я знаю, каким будет мой следующий шаг.
@DanielKaplan посмотри мое редактирование, у меня оно работает, я использовал когда из стандартных привязок, но у тебя нет фокуса в редакторе И в findInput, может быть editorFocus
лучше, editorTextFocus
ложно, если курсор в диалоге поиска, я проверил , я неправильно прочитал это из графического интерфейса привязки клавиш, вы не можете копировать и вставлять, когда предложения
Добавляет ли findWidgetVisible
что-нибудь к пункту when
? Будет ли это не всегда верно, если findInputFocussed || replaceInputFocussed
верно?
@Mark да, я изменил ответ, чтобы использовать when
, аналогичный привязкам по умолчанию.
Search: Cancel Search
выглядит как побег, когда у вас открыта панель поиска и вы ищете в файлах.