Можно ли использовать клавишу «решетка» (#, решетка) в привязке клавиш в Sublime Text 3?

Можно ли использовать клавишу «решетка» (#, решетка) в привязке клавиш в Sublime Text 3?

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

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

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

решение1

Короткий ответ на ваш вопрос: это возможно, но нужная вам привязка может оказаться не такой, какой вы ожидаете, из-за раскладки вашей клавиатуры и/или небольшой логической «ситуации», которую вы, возможно, не ожидаете от того, как 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события, что означает, что они учитывают состояние shift. Клавиши, которые не генерируют символ, сообщаются как 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клавиши, потому что это действительно та клавиша, которую я нажимаю.

Связанный контент