Nos teclados do Reino Unido, o símbolo de hash (#, também conhecido como libra em outros lugares) tem sua própria tecla (com til acima).
Presumivelmente porque não é uma tecla padrão nos teclados dos EUA, não está listada nolista de chaves nomeadas na documentaçãopara uso em pressionamentos de teclas personalizados.
Existe uma maneira de referenciá-lo ao criar combinações de teclas personalizadas?
Responder1
A resposta curta à sua pergunta é que isso é possível, mas a ligação necessária pode não ser o que você espera devido ao layout do teclado e/ou a um "soluço" lógico que você não espera no caminho que Sublime mapeia chaves.
Explicar o motivo disso e como você determina a aparência de sua ligação para essa (ou qualquer outra) chave é um pouco mais complicado.
De modo geral, o Sublime usa códigos de varredura para determinar qual tecla você está pressionando. Os scancodes são baseados na posição da tecla no teclado e não nos caracteres que eles realmente criam.
O resultado disso é que o Sublime vê as teclas que você pressiona como se estivessem em um teclado dos EUA, mesmo que não estejam; a lista de teclas mencionada na sua pergunta assume um layout de teclado padrão dos EUA.
Para diagnosticar problemas de vinculação de teclas ou ver como o Sublime está lendo sua entrada, você pode ativar o registro de entrada abrindo o console do Sublime no View > Show Console
menu e digitando o seguinte comando:
sublime.log_input(True)
Enquanto o registro de entrada estiver ativado, o Sublime reportará uma mensagem no console sobre cada evento de entrada que estiver vendo. O log de entrada permanece em vigor até que você execute o mesmo comando False
ou reinicie o Sublime.
Geralmente, você verá um dos seguintes:
chr evt: #
, que informa que você pressionou umpersonagemkey evt: backspace
, que informa que você pressionou umchavekey evt
seguido porchr evt
, o que significa que a tecla que você pressionou é algo semelhante a umchave mortaque está tentando adicionar um diacrítico a um caractere.- absolutamente nada se a tecla estiver realmente morta ou algo fora do Sublime (por exemplo, o sistema operacional) comeu o evento do teclado antes que o Sublime tivesse a chance de vê-lo
Para vincular uma chave a algo que está relatando um chr
evento, seu mapeamento deve incluir apenas o caractere:
{ "keys": ["#"], "command": "echo"},
Para vincular uma chave que está sendo relatada como um key
evento, você usaria a chave conforme ela é relatada no evento, incluindo quaisquer modificadores ( control
funciona tão bem quanto ctrl
):
{ "keys": ["backspace"], "command": "echo"},
Com tudo isso dito, o que os relatórios de registro de entrada podem nem sempre ser o que você esperaria inicialmente, que é um dos itens mencionados nos comentários da sua pergunta original.
As combinações de teclas que geram caracteres são relatadas como chr
eventos, o que significa que levam em consideração o estado de mudança. Chaves que não geram um caractere são relatadas como key
eventos e incluem o modificador e otecla que foi pressionada.
Essa parte é enfatizada porque pode não ser o que você esperava inicialmente.
A título de exemplo, em um layout de teclado dos EUA, #
e 3
compartilhe uma tecla, #
sendo a versão deslocada da tecla.
Por isso:
- 3:
chr evt: 3 (0x33)
- shift+3:
chr evt: # (0x23)
Isto faz sentido lógico; pressionar a 3
tecla sozinha fornece um literal 3
, enquanto usar shift fornece um caractere hash.
No entanto, observe o seguinte:
- Ctrl+3:
key evt: control+3
- Ctrl+#:
key evt: control+3
- Ctrl+Shift+3:
shift+control+3
Aquilo é; para obter o #
caractere preciso pressionar shift, mas o evento de tecla relatado é para a 3
tecla, porque essa é realmente a tecla que estou pressionando.