¿Es posible utilizar la tecla almohadilla (#, libra) en una combinación de teclas en Sublime Text 3?

¿Es posible utilizar la tecla almohadilla (#, libra) en una combinación de teclas en Sublime Text 3?

En los teclados del Reino Unido, el símbolo de almohadilla (#, también conocido como libra en otros lugares) tiene su propia tecla (con tilde encima).

Presumiblemente debido a que no es una tecla estándar en los teclados de EE. UU., no aparece en la listalista de claves nombradas en la documentaciónpara usar en pulsaciones de teclas personalizadas.

¿Hay alguna manera de hacer referencia a él al crear combinaciones de teclas personalizadas?

Respuesta1

La respuesta corta a su pregunta es que esto es posible, pero el enlace que necesita puede no ser el que esperaba debido a la distribución de su teclado y/o un pequeño "hipo" lógico que quizás no esperaba en la forma. que Sublime asigna claves.

Sin embargo, explicar el motivo de esto y cómo se determina cómo debe verse su enlace para esa (o cualquier otra) clave es un poco más complicado.

En términos generales, Sublime utiliza códigos de escaneo para determinar qué tecla estás presionando. Los códigos de escaneo se basan en la posición de la tecla en el teclado y no en los caracteres que realmente crean.

El resultado de esto es que Sublime ve las teclas que presionas como si estuvieran en un teclado estadounidense, incluso si no lo están; la lista de teclas en la lista que menciona en su pregunta asume una distribución de teclado estándar de EE. UU.

Para diagnosticar problemas de combinación de teclas o ver cómo Sublime lee su entrada, puede activar el registro de entrada abriendo la consola Sublime desde View > Show Consoleel menú e ingresando el siguiente comando:

sublime.log_input(True)

Mientras el registro de entrada está activado, Sublime informará un mensaje en la consola sobre cada evento de entrada que esté viendo. El registro de entrada permanece vigente hasta que ejecute el mismo comando con FalseSublime o reinicie.

Generalmente verá uno de los siguientes:

  • chr evt: #, que le indica que presionó unpersonaje
  • key evt: backspace, que le indica que presionó unllave
  • key evtseguido de chr evt, lo que significa que la tecla que presionó es algo parecido a unllave muertaeso es intentar agregar un signo diacrítico a un carácter.
  • nada en absoluto si la tecla está realmente muerta o si algo fuera de Sublime (por ejemplo, el sistema operativo) se comió el evento del teclado antes de que Sublime tuviera la oportunidad de verlo

Para vincular una clave a algo que informa un chrevento, su mapeo debe incluir solo el carácter:

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

Para vincular una clave que se informa como un keyevento, debe usar la clave tal como se informa en el evento, incluidos los modificadores ( controlfunciona tan bien como ctrl):

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

Dicho todo esto, es posible que los informes de registro de entrada no siempre sean lo que esperaba inicialmente, que es uno de los elementos mencionados en los comentarios sobre su pregunta original.

Las combinaciones de teclas que generan caracteres se informan como chreventos, lo que significa que tienen en cuenta el estado del cambio. Las claves que no generan un carácter se informan como keyeventos e incluyen el modificador y eltecla que fue presionada.

Se enfatiza esa parte porque puede que no sea lo que esperaba inicialmente.

A modo de ejemplo, en una distribución de teclado de EE. UU., #comparta 3una tecla, #siendo la versión desplazada de la tecla.

De este modo:

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

Esto tiene sentido lógico; presionar 3solo la tecla te da un literal 3, mientras que usar shift te da un carácter hash.

Sin embargo, tenga en cuenta lo siguiente:

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

Eso es; Para obtener el #carácter necesito presionar Mayús, pero el evento clave reportado es para la 3clave, porque esa es realmente la tecla que estoy presionando.

información relacionada