7 votes

Tmux : Invitation à sélectionner une fenêtre pour le volet de jonction tout en continuant à voir les numéros et les titres des fenêtres ?

Je joins régulièrement des fenêtres dans tmux, et j'aimerais créer un lien qui me demanderait de joindre la fenêtre, tout en me laissant voir les numéros et les titres des fenêtres. Ma première approche était basée sur une des réponses à la question suivante cette question :

bind-key < command-prompt -p "create pane from #(tmux list-windows|awk -vORS='  ' '/^[0-9]/{print $1 $2}'):"  "join-pane -s ':%%'"

Mais tmux ne fait pas l'interpolation qu'il fait avec d'autres commandes telles que "display-message", et l'invite elle-même prend la ligne d'état de sorte que je ne peux pas voir les numéros et les titres des fenêtres.

Ma deuxième approche consistait à essayer de tirer parti de choose-window, qui affiche une liste interactive de fenêtres :

bind < choose-window "join-pane -hs %%"

Cela fonctionne en général, mais cela occupe toute la fenêtre actuelle pendant que je fais mon choix. J'aimerais faire quelque chose comme bufexplore dans vim, où la fenêtre est d'abord divisée, puis une invite apparaît dans le nouveau volet où je peux sélectionner la fenêtre pour l'ouvrir. Ce qui suit semble assez proche de ce que je veux, mais je me retrouve avec le volet qui a été utilisé pour afficher l'invite :

bind < split-window -h \; choose-window 'join-pane -hs %%'

Je déplacerais bien la fenêtre à la place, mais, pour autant que je sache, il est impossible de déplacer une fenêtre vers un volet (ou de déplacer un volet sans le joindre), et ce qui suit ne fonctionne pas :

bind < split-window -h ; choose-window 'move-window -s %%'

Je soupçonne que l'approche implique quelque chose comme la séquence d'opérations suivante :

  1. Fenêtre divisée
  2. Choisir une fenêtre (volet)
  3. panneau de jonction
  4. tuer le volet précédent (celui qui contenait l'invite de choix de fenêtre)

Mais, quand j'essaie de faire quelque chose comme ce qui suit :

split-window -h ; choose-window 'join-pane -hs %%' ; kill-pane -t.-1

Le volet tué est celui d'où je suis parti, PAS celui utilisé pour afficher l'invite. En effet, changer la valeur de kill-pane ou lancer d'abord un select-pane ne semble pas faire de différence.

Peut-être que cela ne peut pas être fait, peut-être qu'il y a un moyen de déplacer une fenêtre/0-volet vers un nouveau volet, mais je n'arrive pas à le savoir. Il existe peut-être une combinaison de commandes interactives et d'appels à la fonction

run "tmux <command> etc etc %%"

Ça devrait régler le problème, mais je n'arrive pas à le comprendre. Des idées ?

4voto

Chris Johnsen Points 36743

Vous pourriez tuer le volet initial, temporaire, avant que join-pane re-split la fenêtre :

bind < split-window -h \; choose-window 'kill-pane ; join-pane -hs %%'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X