Verwenden Sie gnome-terminal und tmux zusammen: Wie starte ich mit dem neuesten Arbeitsverzeichnis?

0

Ich verwende derzeit gnome-terminal und tmux zusammen: Jedes Mal, wenn ich gnome-terminal starte, wird ein tmux gestartet:

#!/bin/bash

args=()
if type tmux > /dev/null; then
  args+=('-e' "tmux new-session")
fi

exec gnome-terminal "${args[@]}" "$@"

Aber wie kann ich tmux mit dem Arbeitsverzeichnis der zuletzt aktiven tmux-Sitzung starten, wenn es eine aktive tmux-Sitzung gibt?

xuhdev
quelle

Antworten:

1

Was helfen könnte, ist der list-panesBefehl, den Sie -afür alle verwenden können. Standardmäßig stellt es nicht das bereit, was Sie möchten, aber Sie können es in einem Format angeben, das beispielsweise die pane_current_pathund möglicherweise genügend andere Werte enthält, damit Sie entscheiden können, welche Bereiche Sie kopieren möchten. Z.B

$ tmux list-panes -a -F 'uniq=#D pane=#P title="#T" sess=#S windex=#I winnam=#W activ=#{pane_active} pwd=#{pane_current_path}'
uniq=%0 pane=0 title="myhost 2" sess=0 windex=0 winnam=bash activ=0 pwd=/home/meuh
uniq=%1 pane=1 title="myhost 3" sess=0 windex=0 winnam=bash activ=1 pwd=/home/meuh
uniq=%2 pane=0 title="myhost 4" sess=1 windex=0 winnam=bash activ=0 pwd=/tmp
uniq=%4 pane=1 title="myhost 5" sess=1 windex=0 winnam=bash activ=1 pwd=/usr/lib
uniq=%3 pane=0 title="myhost 1" sess=2 windex=0 winnam=bash activ=1 pwd=/tmp

Die Bedeutung jeder Variablen, z. B. #Dfür eine eindeutige Fenster-ID, ist in der Manpage unter FORMATE beschrieben. Sie können die größte dieser IDs als aktuellsten Bereich und den pwd=Wert als gewünschtes Verzeichnis auswählen . ZB leiten Sie den obigen tmux-Befehl in

 | awk '{id=substr($1,7)+0;if(id>max){max=id;pwd=$NF}} END{print substr(pwd,5)}'

Wenn Sie die window_activityVariable in späteren tmuxes verwenden, die die Zeit in Sekunden seit der letzten Aktivität im Fenster angibt, können Sie das Obige vereinfachen, indem Sie nur diesen Wert und den aktuellen Pfad auflisten und den Pfad für den maximalen Aktivitätswert angeben:

tmux list-panes -a -F '#{window_activity} #{pane_current_path}' |
awk '{time=$1+0;if(time>max){max=time;pwd=substr($0,length($1)+2)}} END{print pwd}'
meuh
quelle
Danke! Ich schlage vor, die Sitzung mit der größten window_activityals die zuletzt verwendete Sitzung zu verwenden. Sind Sie einverstanden? Können wir es in die Antwort setzen?
Xuhdev
Mein tmux hat keine window_activityVariable. Meinen Sie window_activity_flagoder window_active? Da beide Werte nur 0 oder 1 sind, gibt es möglicherweise viele Bereiche mit demselben Wert.
Meuh
Es ist mindestens auf 2.3 verfügbar: "window_activity Integer time of window last activity"
xuhdev
Das ist eine großartige Lösung. Ich habe keinen neueren tmux aber ich habe die Manpage durchgesehen und meine Antwort aktualisiert. Vielen Dank.
Meuh