1
votes

Comment trouver la fenêtre / le volet tmux d'un tty?

Disons que j'ai plusieurs sessions tmux et fenêtres / volets. Après un certain temps, j'ai peut-être lancé plusieurs vim dans diverses fenêtres / volets. ps afficherait les tty s de tous les processus vim. Comment pourrais-je trouver la fenêtre / le volet tmux pour un tty donné?


1 commentaires

Je suis tombé sur une question similaire et j'ai pensé que ce guide était utile stackoverflow.com/questions/29439835/...


3 Réponses :


2
votes

Bien que vous puissiez essayer de faire quelque chose avec tmux list-panes utilisant #{pane_pid} et en examinant les résultats, il est probable que votre problème puisse être résolu plus facilement avec

tmux choose-tree

Il donne une liste des sessions / fenêtres / volets que tmux exécute, ce qui est en cours d'exécution dans ces volets et un instantané du volet lui-même lorsqu'il est mis en surbrillance.


1 commentaires

Merci pour votre réponse! Ces deux commandes sont super utiles (merci de les partager) bien qu'elles ne résolvent pas tout à fait le problème que j'ai décrit.



3
votes

Pour tmux list-panes directement à un tty connu, vous pouvez utiliser une combinaison de tmux list-panes au -F format et de tmux switch-client . Dans le format, vous pouvez utiliser #{pane_tty} abd #{pane_id} pour façonner la sortie, puis simplement grep (par exemple pts / 2).

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}: #{pane_title} :#{pane_id}" | grep vim | sort | fzf | grep -oE "[^:]*$") 

Si vous êtes comme moi et que vous aimez les sélections floues faciles, lancez un fzf:

autocmd BufReadPost,FileReadPost,BufNewFile,BufEnter,FocusGained * call system("tmux select-pane -T 'vim | " . expand("%:t") . "'")

Il peut être encore plus convivial lorsque vous utilisez le pane_title. Comme vous l'avez spécifiquement demandé pour vim, voici comment définir dynamiquement le titre d'un volet sur le fichier que vous éditez dans vim (mettez-le dans votre vimrc).

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}:#{pane_id}" | sort | fzf | grep -oE "[^:]*$") 

puis déclencher une recherche floue pour celui-ci

tmux switch-client -t $(tmux list-panes -aF "#{pane_tty}:#{pane_id}" | grep pts/2 | grep -oE "[^:]*$") 

Cela vous donnera beaucoup plus de liberté sur la liste que vous devez traiter que sur l'arbre de choix car vous avez la possibilité de filtrer et de rechercher (flou) dans la liste.


0 commentaires

0
votes
find /tmp/tmux-$UID -type s -print0 |
  xargs -0i tmux -S '{}' list-panes -a -F '#{session_name} #{window_index} #{pane_tty} #{window_name}' 2>/dev/null |
  grep -w "$(ps -p "$1" -o tty= || echo pts/NO_SUCH_TTY)"
I wish list-panes took a filter, then it would be even easier.I call this script p2mux.My answer is a bit complicated (find | xargs tmux) because I nest tmux sessions, with default being the top-level and all nested sessions being attached each in a window of the same name in the default session.  This way I can very quickly find all my workspaces.  I also have a script I call ntmux that I give a directory to and it will create a new session named after the basename of that directory, and a new window in the default session named the same, and then it will run tmux -S ... attach-session in that window -- this makes it trivial to launch new nested sessions.

0 commentaires