Como vincular C- [de verdade (desta vez a sério)

11

Existe alguma maneira de vincular C-[a algo e não ter todas as M-vinculações (Meta) desarrumadas?

Não é a primeira vez que essa pergunta surge. Infelizmente, a única solução oferecida no encadeamento anterior é a) específica para Linux, b) requer uma ferramenta externa (novamente específica para Linux) que não tem nada a ver com o Emacs. Na mesma linha, eu poderia ter usado algo como o Karabiner no OS X para roubar a C-[sequência antes que o Emacs o entenda, mas isso é desajeitado e caro.

Dado que é Emacs que insiste em traduzir C-[a ESC, C-ia TABe, provavelmente, outros que eu gostaria muito de quebrar essas relações e obter sequências de teclas preciosos para trás. Recentemente, corri a toda velocidade para esse problema e culpei o modo silencioso de smartparens inocente .

Uma possível solução que envolveu function-key-mape key-translation-mapfoi discutida aqui, mas infelizmente ela não funciona mais ou não funcionou em primeiro lugar (ou estou fazendo algo errado). Eu acho que estava indo na direção certa.

zeRusski
fonte
3
O Emacs não insiste em "traduzir C-[para ESC". Os dois são a mesma coisa . Da mesma forma, C-ie TABexistem nomes diferentes para o mesmo código de controle ASCII.
Tirou
2
@ Drew Não é nem um pouco óbvio que combinações de teclas com controle devem ser mapeadas para códigos de controle ASCII (dos quais existem apenas 32) em um aplicativo GUI. (Ou, Parreira, mesmo em xterm, que tem um modo de modifyOtherKeys para enviar sequências de escape único em muitos casos, embora eu não tenho certeza sobre isso em particular)
Random832
3
@ Random832: Você tem razão em distinguir teclas de caracteres . É um tanto lógico e direto para um editor mapear a sequência de teclas C-[ (pressionar Ctrle pressionar [) para o caractere deC-[ controle (também conhecido como personagem), mas não, isso não é obrigatório para alguém que cria um editor. E sim, o Emacs faz isso. e são o mesmo caractere, mas as teclas + e não precisam ser mapeadas para caracteres específicos. ESCC-[ESCCtrl[Esc
Tirou

Respostas:

8

Adaptado da minha própria configuração :

(define-key input-decode-map [?\C-\[] (kbd "<C-[>"))
(global-set-key (kbd "<C-[>") 'butterfly)

Obviamente, isso funcionará apenas na GUI.

edit: Observe que input-decode-mapé terminal-local, o que significa que modificá-lo não funcionará se você estiver usando emacsclient, mas funcionará se estiver usando emacs. Corrigi o problema na minha configuração, envolvendo-o em um comando operando em um quadro e adicionando-o ao after-make-frame-functionsgancho.

wasamasa
fonte
obrigado isso parece legítimo! Gostaria de saber se existe uma maneira de impedir o Emacs de tratar Meta e ESC como a mesma coisa? Também estou querendo saber se eu estou simplesmente bagunçar alguma terminologia Emacs e não pensando direito aqui
zeRusski
1
Essa é uma pergunta diferente, abra uma nova para isso.
wasamasa
Curiosamente ter <C-i>e <C-[>volta ligado a TABe ESCno-mapa global como você sugere em sua configuração plana fora trava minha Emacs cada vez que eu bati em:
zeRusski
1
Bem, considerando que você é o cara que entregou um bug por falha no leme após a entrada da letra "j" , culpo sua construção do Emacs por ser travada e sugeriria que você tentasse outra para o OS X.
wasamasa 24/03
acredite em mim, eu tentei muitas construções. Será outro mistério com o qual vou ter que viver. Vou gerenciar -) obrigado para a solução
zeRusski