web-dev-qa-db-fra.com

Lier Ctrl + Tab et Ctrl + Maj + Tab dans tmux

J'essaye de ctrl+tab et ctrl+shift+tab liaison pour travailler à l'intérieur d'une session tmux (j'utilise également PuTTY).

J'ai déjà eu du mal à recompiler PuTTY pour qu'il envoie ctrl et shift correctement. Après avoir utilisé ctrl+v, et je peux voir que ^[[27;5;9~ et ^[[27;6;9~ sont envoyés pour ctrl+tab et ctrl+shift+tab, respectivement. Existe-t-il un moyen de les lier à la fenêtre suivante et à la fenêtre précédente à l'intérieur de tmux?

Edit: Après quelques recherches, je pense que je pourrais avoir à configurer xterm pour inclure ces codes clés. Une idée de comment j'allais faire ça?

Edit2: J'ai donc découvert que je pouvais récupérer infocmp et le recompiler. J'ai ajouté

kctab=\E[27;5;9~, kcstab=\E[27;6;9~,

à la fin de celui-ci, sauf que maintenant cela me donne une erreur. "l'entrée ne commence pas par les noms des terminaux dans la première colonne"

40
dook

Les versions "inédites" récentes de tmux reconnaissent automatiquement ces séquences de touches de style xterm une fois que votre terminal les a envoyées (pas besoin de changer votre entrée terminfo) . La prochaine version (1.8?) Devrait également avoir ce support. Avec une version appropriée de tmux 1, tout ce que vous avez à faire est de lier les clés dans votre configuration tmux :

bind-key C-Tab next-window
bind-key C-S-Tab previous-window

Vous devrez toujours taper votre clé de préfixe avant ces clés.

(Remarque: ~/.tmux.conf n'est traité qu'au démarrage du serveur. Si vous y apportez des modifications, vous devrez soit quitter toutes vos sessions et redémarrer le serveur, soit utiliser (par exemple) tmux source ~/.tmux.conf pour que votre serveur existant retraite le fichier.)

De plus, si vous voulez que tmux transmette ces séquences de touches de style xterm (et d'autres) aux programmes exécutés à l'intérieur tmux , vous devrez alors activer le xterm-keys option de fenêtre.

set-option -gw xterm-keys on

(Si vous préférez, vous pouvez le faire fenêtre par fenêtre en utilisant -w au lieu de -gw.)


Si vous voulez pouvoir utiliser ces clés sans taper le préfixe, vous pouvez utiliser à la place des liaisons "sans préfixe":

bind-key -n C-Tab next-window
bind-key -n C-S-Tab previous-window

Cela "dédiera" plus ou moins les clés à tmux , cependant. Il sera difficile de taper ces clés sur n'importe quel programme exécuté à l'intérieur tmux (par exemple, vous devrez utiliser le tmux commande send-keys C-Tab-comme d'habitude, xterm-keys doit être activé pour envoyer ces séquences de touches de style xterm).


Le problème avec la modification de votre entrée terminfo est probablement dû au fait que chaque ligne après celle qui nomme le type de terminal doit commencer par un onglet. Les lignes qui ne commencent pas par un onglet sont le début d'une nouvelle entrée de terminal. Techniquement, la séquence NL TAB est essentiellement une continuation de ligne dans ce format de fichier; chaque entrée est une seule ligne logique.

De plus, si vous redéfinissez des entrées terminfo, veillez à utiliser -x avec infocmp et tic pour préserver les capacités définies par l'utilisateur ( dont certains sont assez standard).


1 C'est à dire. construit à partir de code récent dans le référentiel Git tmux sur sf.net (sur l'URL clonable git://git.code.sf.net/p/tmux/tmux-code).

38
Chris Johnsen