Kurzbefehl, um alle offenen Terminals nach vorne zu bringen

17

Gibt es eine Möglichkeit, nach dem Aufrufen einer Webseite oder eines Editors alle geöffneten Terminals an ihren ursprünglichen Positionen wieder nach vorne zu bringen? Es ist ein bisschen mühsam, auf das Terminalsymbol zu klicken und dann jedes einzeln zurückzubringen.

Vielen Dank!

Beispiel:

  • Pre-Shortcut:

Pre-Image-Verknüpfung


  • Post-Verknüpfung:

Post-Image-Verknüpfung

Tom Selleck
quelle
1
+1 sehr interessante Frage, finden Sie diese Antwort auf eine nicht verwandte Frage nützlich - das Programm Devilspie könnte für dieses Problem relevant sein, wenn es kein vorhandenes GUI-Tool gibt.
Evilsoup
Für das Archiv: gist.github.com/psi-4ward/18c3a596d28a3cfa772101af755545df Ein Skript, das kürzlich verwendete Anwendungen berücksichtigt
Psi

Antworten:

9

Sie können Alt+ drücken Tab, um vorwärts zwischen den Fenstern zu wechseln, und Alt+ Shift+ Tab, um rückwärts zwischen den Fenstern zu wechseln. Diese Verknüpfung funktioniert in fast allen grafischen Betriebssystemen. Yow kann für den gleichen Zweck auch die Pfeiltasten Super+ Wund verwenden.

Nachdem Sie ein Terminalfenster nach vorne gebracht haben, drücken Sie Alt+ ~, um alle anderen Terminalfenster nacheinander nach vorne zu bringen:

zu Windows wechseln


Um alle offenen Terminals automatisch nach vorne zu bringen (nicht wie zuvor beschrieben nacheinander), müssen Sie eine Tastenkombination für das folgende Skript hinzufügen (Skript aus der Antwort von Adobe und verbessert, da die Skriptversion nicht funktioniert hat) für mich):

#!/bin/bash

if [ $# -ne 1 ];then
  echo -e "Usage: `basename $0` PROGRAM_NAME\n
           For example:\n\t
           '`basename $0` gnome-terminal' for Terminal\n\t
           '`basename $0` firefox' for Firefox\n\t
           '`basename $0` chromium-browser' for Chromium\n\t..."
  exit 1
fi

pids=" $(pidof $@) "

if [ "$pids" = "  " ]; then # the string "  " contain two spaces
    echo "There is no program named '$@' opened at the moment."
    exit 1
fi

wmctrl -lp | while read identity desktop_number PID window_title; do 
    if [ "${pids/ $PID }" != "$pids" ]; then
        wmctrl -ia $identity
    fi
done

Vergiss nicht, das Skript ausführbar zu machen:

chmod +x /path/to/script/script_name

Nachdem Sie das Skript im Terminal getestet haben, müssen Sie Folgendes sehen:

Radu Rădeanu
quelle
3
Vielen Dank, aber das entspricht im Wesentlichen dem Klicken auf das Terminalsymbol und dem Auswählen der einzelnen Symbole, die in den Vordergrund gebracht werden sollen. Ich meine eine Abkürzung, die alle offenen Terminals nach vorne bringt. Ein Beispiel dafür ist, dass ich Code in gedit schreibe und ihn in einem Terminal kompilieren möchte, während ich die Ausgabe eines Protokolls in einem anderen Terminal beobachte.
TomSelleck
"Screenshot wird in 1 Sekunde aufgenommen" ... hmm, hier hat gerade jemand gelogen ...
Carlos Campderrós
1
@Tomcelic Siehe meine neuen Änderungen. Ich möchte sagen, dass ich an einem solchen Skript gearbeitet habe, während Adobe sein Antwortverfahren veröffentlicht hat (was für mich nicht funktioniert hat). Verstehen Sie dies also bitte nicht falsch.
Radu Rădeanu
8

Hier ist ein kleines Bash-Skript, das alle Fenster, deren Titel mit ARG übereinstimmt, nach vorne bringt:

bring-all-windows.bash ARG

Das Drehbuch:

#!/bin/bash

Program=$@

wmctrl -l | while read Window; do
    if [[ "$Window" == *"$Program"* ]]; then
        echo "DEBUG: I bring $Window"
        code=`echo "$Window" | cut -f 1 -d " "`
        wmctrl -i -a $code
    fi
done

Sie können binden

bring-all-windows.bash Terminal

zu einem Hotkey (vergessen Sie nicht, das Skript in einem Login-Shell-Pfad abzulegen, oder schreiben Sie einen vollständigen Pfad dazu).

Das Skript muss wmctrlinstalliert sein.

Bearbeiten :

Um etwas vom Terminal aus auszuführen, navigieren Sie zu dem Verzeichnis, in dem Sie das Skript abgelegt haben

chmod +x bring-all-windows.bash
./bring-all-windows.bash Terminal

Wenn Sie sicher sind, dass es vom Terminal aus funktioniert, versuchen Sie, es an einen Hotkey zu binden und geben Sie den vollständigen Pfad an. Wenn Sie sicher sind, dass es mit einem Hotkey und dem vollständigen Pfad zum Skript funktioniert, versuchen Sie, das Verzeichnis der Anmeldeshell PATH hinzuzufügen, und prüfen Sie, ob es auf diese Weise funktioniert.

Adobe
quelle
Das klingt gut! Ich werde es in Kürze versuchen und mich bei Ihnen melden. Ich bin immer noch ein bisschen ratlos, warum es dafür keine native Methode gibt, es scheint, als sollte es natürlich sein.
TomSelleck
@Tomcelic: Es gibt ein wmctrlund bash: das ist natürlich.
Adobe
Stimmt, aber es ist nicht heimisch: P
TomSelleck
Gibt es eine Chance, dass es Ihnen etwas ausmacht, die Verwendung dieses Skripts durchzuspielen? Ich habe das Skript erstellt und in meinem Home-Ordner gespeichert und den Pfad zu / etc / shells hinzugefügt. Ich habe auch eine Verknüpfung in den Tastatureinstellungen mit dem Namen bring_terminals_forward hinzugefügt und der Befehl lautet bash /home/michael/Scripts/bring-all-windows.bash Terminal
TomSelleck
Das Ausführen des Skripts direkt von einem laufenden Terminal aus scheint auch nicht zu funktionieren ... Es funktioniert für Programme wie gedit, aber nicht für Terminal
TomSelleck
0

Ein anderer Weg ist die Verwendung xdotool. Sie sollten es zuerst installieren, es sudo apt-get install xdotoolist also obligatorisch.

xdotool search --class "terminal" windowactivate %@
xdotool search --name "braiam@bt" windowactivate %@

Der erste sucht nach einer aufgerufenen Binärdatei *terminal*, der zweite nach einem Fenster, das den Titel hat *braiam@bt*. Wenn Sie das dann in ein Bash-Skript schreiben:

#!/bin/bash

set -e
program=$@

xdotool search --class '$program' windowactivate %@
xdotool search --name '$program' windowactivate %@

Mehr dazu erfahren Sie im xdotoolHandbuch.

Braiam
quelle
0

Auf meinem Ubuntu-Desktop sind meine Symbole grafisch vertikal am linken Rand meines Desktops angeordnet. Wenn Sie mit der linken Maustaste auf das Terminalsymbol klicken, werden alle Terminalfenster angezeigt. Anschließend können Sie auswählen, in welchem ​​Terminal Sie arbeiten möchten. Wenn Sie mit der rechten Maustaste auf das Terminalsymbol klicken, wird eine Liste der Menüs mit einem "Neuen Terminal" und allen offenen Terminals im unteren Teil der Liste angezeigt. Sie können auswählen, welches Ihr aktives Terminal sein soll.

Dieselbe Methode sollte für jede andere Anwendung wie Ihren Browser funktionieren.

Kemin Zhou
quelle