Можно ли использовать ключ хеша (#, pound) в привязке клавиш в Sublime Text 3?

504
Dan

На британских клавиатурах символ хеша (#, иначе фунт в другом месте) имеет свой собственный ключ (с тильдой над ним).

Предположительно, поскольку это не стандартная клавиша на клавиатурах США, она не указана в списке именованных клавиш в документации для использования при пользовательских сочетаниях клавиш.

Есть ли способ ссылаться на него при создании пользовательских привязок клавиш?

1
Немного поздно, но если ввести `sublime.log_input (True)` в консоли Sublime, а затем нажать клавишу, вы узнаете, как Sublime видит это. Затем вы можете использовать этот ключ в своей привязке. OdatNurd 6 лет назад 2
@OdatNurd Спасибо, это полезно знать. Консоль дает мне `chr evt: # (0x23)`. Оказывается, я могу связать с командами `#` или `~`, но не более полезные комбинации, такие как `ctrl + #` или `alt + #`. Я не думаю, что есть способ использовать код `0x23`? Я не мог видеть ничего, на что ссылаются таким образом в раскладке по умолчанию. Dan 6 лет назад 0
Вы можете использовать только символ / имя, а не шестнадцатеричный код. Что вы видите как вывод в журнале, когда вы нажимаете `ctrl + #` и `alt + #`? Возможно, с другой раскладкой клавиатуры клавиша выглядит как нечто иное, когда используется с модификаторами. OdatNurd 6 лет назад 1
@OdatNurd Хорошая идея, странные результаты. Комбинации `#` появляются так, как если бы они были объединены с `'` (апостроф) вместо этого, например, `ключ evt: shift + control +'`, за исключением `ctrl + #`, который регистрируется как `ключ evt: control + '`, а затем `chr evt: (0x1c)`. Все комбинации с настоящим ключом апострофа получаются, как если бы они были объединены с обратным трюком. Dan 6 лет назад 0

1 ответ на вопрос

2
OdatNurd

Короткий ответ на ваш вопрос заключается в том, что это возможно, но необходимая привязка может не соответствовать ожидаемой из-за раскладки клавиатуры и / или некоторого логического «икота», которого вы не ожидаете на пути. что Sublime отображает ключи.

Объяснение причины этого и того, как вы определяете, как должна выглядеть ваша привязка для этого (или любого другого) ключа, все же немного сложнее.

Вообще говоря, Sublime использует коды сканирования, чтобы определить, какую клавишу вы нажимаете. Скан-коды основаны на положении клавиши на клавиатуре, а не на символах, которые они фактически создают.

Результатом этого является то, что Sublime видит клавиши, которые вы нажимаете, как если бы они были на клавиатуре США, даже если это не так; список клавиш в списке, который вы упоминаете в своем вопросе, предполагает стандартную раскладку клавиатуры в США.

Чтобы диагностировать проблемы с привязкой клавиш или увидеть, как Sublime читает ваш ввод, вы можете включить ведение журнала ввода, открыв консоль Sublime с View > Show Consoleпомощью меню и введя следующую команду:

sublime.log_input(True) 

Пока входная регистрация включена, Sublime сообщит в консоли сообщение о каждом входном событии, которое он видит. Регистрация входных данных остается в силе до тех пор, пока вы не запустите ту же команду Falseили не перезапустите Sublime.

Как правило, вы увидите одно из следующего:

  • chr evt: #, который говорит вам, что вы нажали символ
  • key evt: backspace, который говорит вам, что вы нажали клавишу
  • key evtзатем chr evt, что означает, что нажатая клавиша является чем-то похожим на мертвую клавишу, которая пытается добавить диакритический знак к символу.
  • вообще ничего, если клавиша действительно мертва или что-то за пределами Sublime (например, ОС) съело событие клавиатуры, прежде чем Sublime получил шанс увидеть его

Чтобы связать ключ с чем-то, что сообщает о chrсобытии, ваше отображение должно включать только символ:

{ "keys": ["#"], "command": "echo"}, 

Чтобы связать ключ, который сообщает как keyсобытие, вы должны использовать ключ, как он сообщается в событии, включая любые модификаторы ( controlработает так же, как ctrl):

{ "keys": ["backspace"], "command": "echo"}, 

С учетом всего вышесказанного, отчеты о входных журналах не всегда могут быть такими, какими вы изначально ожидали, что является одним из пунктов, упомянутых в комментариях к исходному вопросу.

Комбинации клавиш, которые генерируют символы, сообщаются как chrсобытия, что означает, что они принимают во внимание состояние сдвига. Ключи, которые не генерируют символ, сообщаются как keyсобытия и включают модификатор и нажатую клавишу .

Этот бит подчеркивается, потому что это может быть не то, что вы изначально ожидали.

В качестве примера, на раскладке клавиатуры США, #и 3разделить клавишу, #будучи сдвинутой версией клавиши.

Таким образом:

  • 3: chr evt: 3 (0x33)
  • shift+3: chr evt: # (0x23)

Это имеет логический смысл; нажатие 3одной клавиши дает вам буквальное значение 3, а нажатие клавиши shift - хеш-символ.

Однако обратите внимание на следующее:

  • Ctrl+3: key evt: control+3
  • Ctrl+#: key evt: control+3
  • Ctrl+Shift+3: shift+control+3

То есть; для того, чтобы получить #символ, мне нужно нажать клавишу shift, но о событии, о котором сообщается, это 3клавиша, потому что это действительно клавиша, которую я нажимаю.