Vous serez plus à l'aise dans un X11 Emacs, qui peut recevoir une entrée au clavier et afficher du texte sans passer par l' encodage et le décodage du terminal . La principale raison d'utiliser un éditeur de mode texte est de l'exécuter à l'intérieur de l'écran ou de tmux sur une machine distante, mais grâce à Tramp, il est généralement plus facile de modifier le fichier distant dans votre Emacs local. Cela étant dit, vous pouvez faire ce que vous voulez tant que votre émulateur de terminal coopère, ce qui est le cas avec Xterm.
Lorsque vous appuyez sur une touche ou une combinaison de touches dans un terminal, elle est transmise à l'application exécutée dans le terminal sous la forme d'une séquence d'un ou plusieurs caractères. Par exemple, lorsque vous appuyez sur a, l'application reçoit a
. Lorsque vous appuyez sur Enter, l'application reçoit le caractère CR
(aka ^M
(prononcé "control-emm"), aka caractère numéro 13, aka \r
ou \015
). Les combinaisons de touches impliquant Altsont généralement transmises sous la forme du caractère ESC
( ^[
alias aka \e
ou \033
) suivi de la séquence de la touche ou de la combinaison de touches sans Alt. Les touches de fonction et autres combinaisons de touches sont transmises sous forme de séquences d'échappement commençant par \e[
ou \eO
.
Les séquences d'échappement ne sont pas entièrement standardisées et les terminaux ignorent généralement certains attributs pour certaines clés. Par exemple, les hyper et super modificateurs sont généralement ignorés. Vous pouvez voir ce que votre terminal envoie pour une combinaison de touches en appuyant sur Ctrl+ Vsuivi de cette combinaison de touches dans une invite du shell, ou C-q
ou C-h c
suivi de la combinaison de touches dans Emacs.
Xterm vous permet de configurer les séquences d'échappement pour chaque clé par les ressources X . La plupart des configurations lisent les ressources à partir du ~/.Xresources
démarrage de X, et vous pouvez charger le fichier manuellement avec 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~")
Une convention courante utilise des séquences d'échappement du formulaire ESC [ number1 ; number2 ~
pour les touches de fonction avec des modificateurs. number1
indique la touche de fonction ( 15
à 24
pour F5à F12- pour des raisons historiques, F1 à F4ont des séquences d'échappement différentes) et number2
indique le modificateur ( 2
pour Shift, 5
pour Ctrl, 3
pour Meta, 8
pour Ctrl+ Metaet ajoutez 1 pour + Shift- non, ce n'est pas très cohérent).
Vous devrez spécifier les modificateurs Hyper et Super à travers leur nombre, comme à Mod1
travers Mod5
. Exécutez xmodmap -pm
pour voir le mappage des clés-clés aux modificateurs. Par exemple, si Super_L
est lié à Mod5, la ligne suivante (utilisez ce cas exact) définit une liaison pour Super+ Space:
~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\
Emacs traduit les séquences d'échappement en sa représentation de clé interne via input-decode-map
oulocal-function-key-map
(ou function-key-map
avant Emacs 23).
(define-key local-function-key-map "\033[32;16~" [(super ?\ )])
Ce poste est composé à 80% de matériaux recyclés. Existe-t-il des terminaux Linux qui peuvent gérer toutes les combinaisons de touches?
(global-set-key "\033[32;16~" 'set-rectangular-region-anchor)
. Mais pour être complet, j'ai essayé votredefine-key
ci-dessus, mais je n'ai pas pu ensuite déclencher(global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor)
. C'était juste en train d'imprimer, 16 ~ dans le tampon. Il aurait été bien de lier cette séquence à (kbd "s-SPC") pour que la séquence de touches soit liée et que je puisse la réaffecter à d'autres commandes.C-h l
retourne ce qui suit en appuyant sur s-SPC maintenant:ESC [ 3 2 ; 1 6 ~
mais emacs se plaint toujours queM-[ 32 is undefined
function-key-map
au lieu delocal-function-key-map
? Cela peut être une question de moment où vous définissezlocal-function-key-map
, car cela dépend du terminal.Si vous êtes prêt à installer un package Emacs et à configurer votre terminal, j'ai écrit un package Emacs qui peut enseigner à Emacs et aux terminaux comment reconnaître correctement toutes les touches du clavier du PC et les combinaisons de touches de modification:
https://github.com/CyberShadow/term-keys
L'encodage du modificateur Super n'est pas activé par défaut, mais le package est personnalisable et permet de configurer les combinaisons de touches de modification qui sont encodées. Pour activer les combinaisons de touches d'encodage qui incluent le modificateur Super, définissez
term-keys/want-key-p-func
une fonction qui renvoiet
quand(elt mods 3)
est non nul (voir l'implémentation par défaut pour une explication).la source
J'ai les éléments suivants dans mes fichiers init:
Cela me permet d'envoyer des touches super et hyper en utilisant les touches de fonction.
la source
Réponse courte: utiliser
Konsole
.Explication:
local-function-key-map
a un mappage d'entréeC-x @ s
versevent-apply-super-modifier
.Konsole
mappeSuper
(la clé du logo Windows) à la séquence d'échappement^X@s
(qui ne semble documentée nulle part, je l'ai découverte par hasard). Vous pouvez essayer ceci en ouvrantKonsole
et en appuyant par exemple Ctrl-v Win-o.la source