Você estará mais confortável em um X11 Emacs, que pode receber entrada do teclado e exibir texto sem passar pela codificação e decodificação do terminal . O principal motivo para usar um editor de modo de texto é executá-lo na tela ou tmux em uma máquina remota, mas graças ao Tramp, geralmente é mais fácil editar o arquivo remoto no Emacs local. Dito isto, você pode fazer o que quiser, desde que o emulador de terminal coopere, como é o caso do Xterm.
Quando você pressiona uma tecla ou combinação de teclas em um terminal, ele é transmitido ao aplicativo em execução no terminal como uma sequência de um ou mais caracteres. Por exemplo, quando você pressiona a, o aplicativo recebe a
. Quando você pressiona Enter, o aplicativo recebe o caractere CR
(aka ^M
(pronunciado “control-emm”), também conhecido como número 13, aka \r
ou \015
). As combinações de teclas envolvendo Altsão normalmente transmitidas como o caractere ESC
(também ^[
conhecido como \e
ou \033
) seguido pela sequência da combinação de teclas ou teclas sem Alt. As teclas de função e outras combinações de teclas são transmitidas como seqüências de escape começando com \e[
ou \eO
.
As seqüências de escape não são totalmente padronizadas e os terminais geralmente ignoram certos atributos para determinadas chaves. Por exemplo, os hiper e super modificadores geralmente são ignorados. Você pode ver o que o seu terminal envia para uma combinação de teclas pressionando Ctrl+ Vseguido por essa combinação de teclas em um prompt de shell ou C-q
ou C-h c
seguido pela combinação de teclas no Emacs.
Xterm permite configurar as sequências de escape para cada tecla através de recursos X . A maioria das configurações lê recursos a partir do ~/.Xresources
momento em que o X é iniciado e você pode carregar o arquivo manualmente com xrdb -merge ~/.Xresources
.
XTerm.VT100.translations: #override \n\
Ctrl ~Shift ~Meta <Key> Return: string("\033[73;5~") \n\
Ctrl Shift ~Meta <Key> percent: string("\033[37;6~")
Uma convenção comum usa seqüências de escape do formulário ESC [ number1 ; number2 ~
para teclas de função com modificadores. number1
indica a tecla de função ( 15
para 24
para F5a F12- por razões históricas, F1 a F4ter sequências de escape diferentes) e number2
indica o modificador ( 2
para Shift, 5
para Ctrl, 3
para Meta, 8
para Ctrl+ Meta, e adicione 1 para + Shift- não, não é muito consistente).
Você precisará especificar os modificadores Hyper e Super através do seu número, como Mod1
através Mod5
. Execute xmodmap -pm
para ver o mapeamento de academias de teclas para modificadores. Por exemplo, se Super_L
estiver associado ao Mod5, a seguinte linha (use exatamente esse caso) define uma ligação para Super+ Space:
~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\
O Emacs converte seqüências de escape em sua representação interna de chave através input-decode-map
oulocal-function-key-map
(ou function-key-map
antes do Emacs 23).
(define-key local-function-key-map "\033[32;16~" [(super ?\ )])
Esta publicação é composta por 80% de material reciclado. Existem terminais Linux que podem lidar com todas as combinações de teclas?
(global-set-key "\033[32;16~" 'set-rectangular-region-anchor)
. Mas, para ser completo, tentei o que você dissedefine-key
acima, mas não pude acionar(global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor)
. Estava apenas imprimindo; 16 ~ no buffer. Teria sido bom vincular essa sequência a (kbd "s-SPC") para que eu tenha a sequência de teclas vinculada e possa atribuí-la novamente a outros comandos.C-h l
retorna o seguinte pressionando s-SPC agora:ESC [ 3 2 ; 1 6 ~
mas o emacs ainda reclama disso #M-[ 32 is undefined
function-key-map
vez delocal-function-key-map
? Pode ser uma questão de quando você definirlocal-function-key-map
, pois depende do terminal.Se você deseja instalar um pacote Emacs e configurar seu terminal, escrevi um pacote Emacs que pode ensinar ao Emacs e aos terminais como reconhecer corretamente todas as teclas do teclado do PC e combinações de teclas modificadoras:
https://github.com/CyberShadow/term-keys
A codificação do super modificador não está ativada por padrão, mas o pacote é personalizável e permite configurar quais combinações de teclas modificadoras são codificadas. Para habilitar combinações de teclas de codificação que incluem o Super modificador, defina
term-keys/want-key-p-func
uma função que retornet
quando(elt mods 3)
não for nula (consulte a implementação padrão para obter uma explicação).fonte
Eu tenho o seguinte nos meus arquivos init:
Isso me permite enviar teclas super e hiper usando as teclas de função.
fonte
Resposta curta: use
Konsole
.Explicação:
local-function-key-map
tem um mapeamento de entradaC-x @ s
paraevent-apply-super-modifier
.Konsole
mapeiaSuper
(a tecla do logotipo do Windows) para a sequência de escape^X@s
(que parece não estar documentada em nenhum lugar, descobri-a por acaso). Você pode tentar isso abrindoKonsole
e pressionando, por exemplo Ctrl-v Win-o.fonte