Skrót, aby przenieść wszystkie otwarte terminale na przód

17

Czy po przejściu do strony internetowej lub edytora jest jakiś sposób na przywrócenie wszystkich otwartych terminali z powrotem na ich pierwotne pozycje? Trochę bólu powoduje kliknięcie ikony terminala, a następnie przywrócenie każdego z osobna.

Dzięki!

Przykład:

  • Skrót wstępny:

Skrót przed obrazem


  • Skrót po:

Skrót po obrazie

TomSelleck
źródło
1
+1 bardzo interesujące pytanie, może okazać się przydatna ta odpowiedź na niezwiązane pytanie - program devilspie może być odpowiedni do tego problemu, jeśli nie ma istniejącego narzędzia GUI.
evilsoup
Do archiwum: gist.github.com/psi-4ward/18c3a596d28a3cfa772101af755545df Skrypt szanujący ostatnio używane aplikacje
Psi

Odpowiedzi:

9

Możesz nacisnąć Alt+, Tababy przełączyć się między oknami i Alt+ Shift+, Tababy przełączyć między oknami. Ten skrót działa w prawie wszystkich graficznych systemach operacyjnych. Yow może również używać Superklawiszy + Wi strzałek w tym samym celu.

Po przeniesieniu jednego okna terminala z przodu naciśnij Alt+, ~aby wszystkie pozostałe okna terminali z przodu jeden po drugim:

przejdź do systemu Windows


Aby automatycznie przynieść wszystkie otwarte zaciski z przodu (a nie jeden po drugim, jak opisałem wcześniej) trzeba będzie dodać skrót klawiaturowy do poniższego skryptu (skrypt pobranej od Adobe jest odpowiedzią oraz lepszą biorąc pod uwagę, że wersja skryptu nie pracował dla mnie):

#!/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

Nie zapomnij, aby skrypt był wykonywalny:

chmod +x /path/to/script/script_name

Po przetestowaniu skryptu w terminalu musisz zobaczyć:

Radu Rădeanu
źródło
3
Dzięki, ale to w zasadzie to samo, co kliknięcie ikony terminala i wybranie każdego z nich, aby wyświetlić go na pierwszym planie. Mam na myśli skrót, który przeniesie wszystkie otwarte terminale na przód. Przykładem może być pisanie kodu w gedit, chcę skompilować go w jednym terminalu, obserwując dane wyjściowe dziennika w innym terminalu.
TomSelleck,
„Zrzut ekranu zostanie zrobiony za 1 sekundę” ... hmm, ktoś właśnie tu skłamał ...
Carlos Campderrós
1
@Tomcelic Zobacz moje nowe zmiany. Chcę powiedzieć, że pracowałem nad takim skryptem, podczas gdy Adobe opublikował jego Jak odpowiedzieć (co dla mnie nie zadziałało), więc proszę nie bierz tego w niewłaściwy sposób.
Radu Rădeanu
8

Oto mały skrypt bash, który wyświetla wszystkie okna, których tytuł pasuje do ARG:

bring-all-windows.bash ARG

Scenariusz:

#!/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

Możesz związać

bring-all-windows.bash Terminal

do skrótu (nie zapomnij wstawić skryptu do PATH powłoki logowania lub napisać do niego pełną ścieżkę).

Skrypt wymaga wmctrlinstalacji.

Edytuj :

Aby uruchomić coś z terminala, przejdź do katalogu, w którym umieściłeś skrypt

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

Gdy masz pewność, że działa z terminala, spróbuj powiązać go ze skrótem, podając pełną ścieżkę. Gdy masz pewność, że działa on ze skrótem klawiszowym i pełną ścieżką do skryptu, spróbuj dodać jego katalog do ścieżki logowania PATH i sprawdź, czy działa w ten sposób.

Cegła suszona na słońcu
źródło
To brzmi dobrze! Niedługo spróbuję i skontaktuję się z tobą. Nadal jestem trochę zaskoczony, dlaczego nie ma natywnej metody, wydaje się, że powinna być naturalna.
TomSelleck
@Tomcelic: Jest wmctrli bash: to naturalne.
Adobe
To prawda, ale nie jest natywny: P
TomSelleck 16.09.13
Czy jest jakaś szansa, byś mógł przejrzeć, jak korzystać z tego skryptu? Stworzyłem skrypt i zapisałem go w moim katalogu domowym i dodałem ścieżkę do / etc / shells. Dodałem także skrót w ustawieniach klawiatury o nazwie bring_terminals_forward, a polecenie to bash /home/michael/Scripts/bring-all-windows.bash Terminal
TomSelleck
Uruchamianie skryptu bezpośrednio z działającego terminala również nie działa ... Działa z programami takimi jak gedit, ale nie z terminalem
TomSelleck 16.09.2013
0

Innym sposobem jest użycie xdotool. Powinieneś go najpierw zainstalować, więc sudo apt-get install xdotooljest to obowiązkowe.

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

Pierwszy szuka dowolnego wywołanego pliku binarnego *terminal*, drugi szuka dowolnego okna, które ma tytuł *braiam@bt*. Następnie, jeśli umieścisz to w skrypcie bash:

#!/bin/bash

set -e
program=$@

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

Możesz dowiedzieć się więcej na ten temat w xdotoolinstrukcji.

Braiam
źródło
0

Graficznie na pulpicie Ubuntu mam ikony ułożone pionowo na marginesie po lewej stronie pulpitu. Jeśli klikniesz lewym przyciskiem myszy ikonę terminala, zobaczysz wszystkie okna terminala. Następnie możesz wybrać, w którym z nich chcesz pracować. Jeśli klikniesz prawym przyciskiem myszy ikonę terminala, zobaczysz listę menu z „Nowym terminalem” u góry, a wszystkie otwarte terminale w dolnej części listy. Możesz wybrać dowolną, która będzie Twoim aktywnym terminalem.

Ta sama metoda powinna działać w przypadku każdej innej aplikacji, takiej jak przeglądarka.

Kemin Zhou
źródło