J'ai récemment commencé à utiliser tmux (était un utilisateur d'écran auparavant) et je l'adore, sauf pour un petit problème. J'utilise emacs au sein de ma session tmux et j'ai l'habitude d'utiliser les touches fléchées pour se déplacer entre les fenêtres emacs (pas les fenêtres tmux). Lors de l'exécution dans tmux, ces liaisons semblent cesser de fonctionner complètement (c'est comme si elles ne s'enregistraient pas du tout sur emacs). Si je quitte tmux et que je lance juste emacs dans mon shell, ils fonctionnent très bien.
J'utilise iTerm2, ssh'd dans une boîte Linux, y exécutant tmux / emacs. J'ai les liaisons de touches Maj-flèche configurées comme suit dans mes .emacs:
(global-set-key "\M-[1;2A" 'windmove-up)
(global-set-key "\M-[1;2B" 'windmove-down)
(global-set-key "\M-[1;2C" 'windmove-right)
(global-set-key "\M-[1;2D" 'windmove-left)
Quand il n'est pas exécuté dans tmux, je peux confirmer que ce sont les bonnes séquences de caractères pour les combinaisons de touches Maj-Flèche en faisant Cq dans emacs puis en appuyant sur la séquence de touches. Dans tmux, même cela ne fonctionne pas car il ne semble pas voir d'entrée de la touche Maj + flèche (il se trouve juste à l'invite Cq).
En regardant les raccourcis clavier pour tmux, je ne pense pas que quelque chose soit lié aux touches Shift-arrow et même si c'était le cas, ils ne s'enregistreraient qu'après avoir entré le préfixe (qui est lié à Co dans mon cas).
Une idée sur la façon de faire fonctionner à nouveau les touches fléchées avec tmux?
Réponses:
Tout d'abord, assurez-vous que votre TERM est correct à chaque emplacement:
xterm
-quelque chose (par exemplexterm-256color
) à l'intérieur de votre shell local fonctionnant dans votre fenêtre iTerm2xterm
-quelque chose à l'intérieur de votre shell après SSHing au système LinuxCela devrait être le même que celui que vous utilisez localement dans iTerm2 , car SSH devrait le transmettre au côté distant (et, ce qui est important, le côté distant ne doit pas ignorer aveuglément le dans un fichier d'initialisation du shell).
screen
-quelque chose (par exemplescreen-256color
) à l'intérieur de votre shell fonctionnant sous tmux sur le système LinuxVous devez toujours utiliser un
screen
TERM basé sur l'intérieur de tmux .Avoir un
xterm
TERM immédiatement à l'extérieur de tmux permettra à tmux de reconnaître les touches fléchées modifiées, mais il ne les passera pas à moins que sonxterm-keys
option de fenêtre ne soit également activée. Mettez ceci dans votre~/.tmux.conf
sur le système Linux:Les séquences des touches décalées devraient maintenant passer à Emacs , s'exécutant à l'intérieur de tmux , via une connexion SSH, à l'intérieur d'une fenêtre iTerm2 .
la source
export XTERM=xterm-256color
(J'écris ceci parce que je ne savais pas ce que signifie "votre TERME" dans la réponse, je cherchais un commentaire expliquant que ... il n'y en avait pas, et maintenant il y en a un.)Vous devez d'abord activer
xterm-keys
dans votre configuration tmux. Mettez donc ce qui suit dans~/.tmux.conf
Mais cela rompra d'autres combinaisons de touches. Pour les corriger, mettez ce qui suit dans votre
~/.emacs
ou~/.emacs.d/init.el
configJ'ai aussi ma solution dans le wiki archlinux
la source
La FAQ tmux contenait l'entrée suivante :
J'ai ouvert le problème tmux # 1349 pour demander la restauration de l'entrée FAQ.
la source
Dans le cas général, des problèmes comme celui-ci se produisent en raison d'un décalage entre ce que l'émulateur de terminal envoie et ce que l'application client attend.
Différents émulateurs de terminaux ont différents degrés de personnalisation, il est donc nécessaire de se familiariser avec les paramètres d'émulation d'un paramètre particulier.
Les applications client dépendent de la valeur
$TERM
utilisée pour rechercher les capacités du terminal (émulateur) dans la base de donnéesterminfo
(outermcap
).Dans votre cas, vos liaisons emacs utilisent donc des séquences explicites
$TERM
et terminfo ne sont pas pertinentes: un émulateur de terminal spécifique est attendu - comme vous l'avez déjà compris, un émulateurxterm
compatible.la source