Ich möchte tmux als Standard beim Öffnen von Terminals (z. B. Yakuake, Konsole) festlegen, das Terminal jedoch im Dateimanager von Dolphin ausschließen.
Ich habe den folgenden Ausschnitt in die~/.zshrc
if [[ -x "$(command -v tmux)" ]] && [[ -n "${DISPLAY}" ]] && [[ -z "${TMUX}" ]]; then
windowname=$(xdotool getactivewindow getwindowname)
if [[ ${windowname} =~ ".*Yakuake$" ]] || [[ "${windowname}" =~ ".*Konsole$" ]]; then
exec tmux
fi
fi
Aber der Befehl xdotool getactivewindow
scheint immer das falsche aktive Fenster zu erhalten. Also habe ich diesen Codeausschnitt zum Testen eingefügt ~/.zshrc
.
xdotool getactivewindow && xdotool getactivewindow getwindowname
sleep 3
xdotool getactivewindow && xdotool getactivewindow getwindowname
Aber ich erhalte das folgende Ergebnis, wenn Yakuake über die Tastenkombinationen ctrl+ alt+ geöffnet wird Y. Es scheint, dass xdotool
der falsche Name des aktiven Fensters verwendet wurde, nämlich das letzte aktivierte Fenster (im Beispiel sublimetext
), und es sollte Yakuake sein.
94371843
~/.zshrc - Sublime Text
65011722
~ : sleep — Yakuake
Wenn Yakuake oder Konsole über KDE Plasma oder die Befehlszeile aktiviert werden, tritt das gleiche Phänomen auf.
Wie kann ich tmux als Standard starten, wenn Terminals geöffnet werden, und dabei das Terminal in Dolphin ausschließen?
Aktualisieren: Dank anKamil Maciorowskis Antwort, alles funktioniert perfekt, nachdem ich diesen Snippet in mein hinzugefügt habe ~/.zshrc
.
if [[ -x "$(command -v tmux)" ]] && [[ -n "${DISPLAY}" ]] && [[ -z "${TMUX}" ]]; then
if [[ ! "$(readlink -f /proc/${PPID}/exe)" =~ "dolphin" ]]; then
exec tmux
fi
fi
Antwort1
Ich denke, eine Shell in einem Terminal in Dolphin wird es /proc/$PPID/exe
als symbolischen Link zu oder so sehen. Verwenden Sie /usr/bin/dolphin
statt und bauen Sie Ihre Logik auf dem Ergebnis auf.xdotool
realpath /proc/$PPID/exe
$PPID
ist die Prozess-ID des übergeordneten Elements der Shell, die bei der Initialisierung der Shell festgelegt wird.