Czy istnieje skrót klawiaturowy do minimalizowania wszystkich okien oprócz aktywnego?

21

Podczas otwierania programów takich jak GIMP, okna w tle są rozpraszające, ponieważ GIMP ma z nim trzy osobne okna.

Konieczne jest ręczne przejście do każdego okna innego niż Gimp, aby je zminimalizować. Potrzebuję skrótu klawiaturowego w Ubuntu, który pasuje do skrótu Windows Super+ Home. Jeden, który minimalizuje wszystkie okna oprócz aktywnego.

Czy w Ubuntu można osiągnąć takie zachowanie?

Czad
źródło
Ciekawy pomysł! Spójrz na pierwszą odpowiedź tutaj na wskaźniki: askubuntu.com/questions/13709/… Ten post dotyczy dodania funkcji minimalizującej wszystko. Od patrzenia na to przez dodanie wiersza „maksymalizuj poprzedni bieżący aktywny” lub zmień go na „minimalizuj, z wyjątkiem bieżącego aktywnego” po wykonaniu sztuczki (?)
Rinzwind
czy istnieje szansa, że ​​programiści dodadzą opcję „Minimalizuj wszystko oprócz aktywnego okna” w menu Skrótów klawiszowych w przyszłych wersjach Ubuntu? W ten sposób to powiązanie jest „gotowe i czeka” na skonfigurowanie, gdy użytkownicy instalują Ubuntu?
Czad

Odpowiedzi:

20

Można to osiągnąć za pomocą skryptu python. Skrypt wymaga python-wncki python-gtkmusi zostać zainstalowany, aby działał, chociaż myślę, że i tak są instalowane domyślnie.

Skopiuj i wklej to do edytora tekstu i zapisz w rozsądnym miejscu (np. Jako minimise.py w folderze domowym):

#!/usr/bin/env python
import wnck
import gtk

screen = wnck.screen_get_default()

while gtk.events_pending():
    gtk.main_iteration()

windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not w == active:
        w.minimize()

Następnie możesz skonfigurować skrót klawiaturowy, otwierając skróty klawiaturowe.

Skróty klawiaturowe w Dash

Kliknij Dodaj, aby utworzyć nowy skrót.

Okno skrótów klawiaturowych

Użyj polecenia bash -c 'python ~/minimise.py'(zakładając, że zapisałeś go jako minimise.py w folderze domowym).

Utwórz skrót

Następnie możesz przypisać preferowaną kombinację klawiszy do tej akcji.

Skrypt zminimalizuje wszystkie nieaktywne okna. Nie sądzę, że jest to bardzo przydatne w twoim przypadku użycia, ponieważ będziesz chciał mieć wszystkie okna Gimp otwarte. Zamiast tego możesz użyć nieco innego skryptu, aby zminimalizować wszystkie okna, które nie pochodzą z bieżącej aplikacji:

#!/usr/bin/env python
import wnck
import gtk

screen = wnck.screen_get_default()

while gtk.events_pending():
    gtk.main_iteration()

windows = screen.get_windows()
active_app = screen.get_active_window().get_application()

for w in windows:
    if not w.get_application() == active_app:
        w.minimize()
dv3500ea
źródło
4
+1! Właśnie dlatego kocham Linuksa! Doskonały. @ czad: jeśli problemem jest wiele okien gimp, wydaje się, że istnieje sposób, aby gimp działał jak 1 okno. Ups: wydaje się, że jest to domyślna wersja 2.6 (przejdź do rysunku; dawno nie używałem gimpa).
Rinzwind
Właśnie dlatego uwielbiam Python - ma moduł do wszystkiego!
dv3500ea
1
Python-wnck musiał być zainstalowany w moim systemie, 14.04. Pytanie jednak, wewnątrz powłoki Pythona działa ok bez części gtk.main_loop, ale bez skryptu nie działa. W zasadzie, aby skrypt działał z pliku .py, część gtk.main_loop jest koniecznością. Czy ktoś może wyjaśnić, dlaczego?
Sergiy Kolodyazhnyy
Dlaczego bash -c 'python... nie tylko python ...?
Michael Campbell
1

Ponieważ python-wnck nie znajduje się już w repozytorium apt (Kubuntu 18.04 Bionic), poniżej znajduje się zmodyfikowany kod python (z powyższej odpowiedzi @Aditya i @ dv3500ea).

Począwszy od python3 wnck jest częścią GObject Introspection API ( źródło ). Tak więc zmieniła się składnia do importowania wnck (i obiektów Gtk).

#!/usr/bin/env python

# import necessary objects
import gi
gi.require_version('Wnck', '3.0') # specify Wnck version
from gi.repository import Wnck

from gi.repository import Gtk


# the script itself
screen = Wnck.Screen.get_default()

while Gtk.events_pending():
    Gtk.main_iteration()

windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not w == active:
        w.minimize()

następnie przypisz skrót do skryptu python: (w Kubuntu) kmenueditor -> utwórz nowy element -> skrypt bash -c 'python path_to_the_python_script.py'-> przypisz żądany skrót

AKTUALIZACJA (19 maja):

W Kubuntu 19.04 musiałem zainstalować moduł gir1.2-wnck-3.0, aby powyższy skrypt działał.

$ python -V
Python 2.7.16
$ sudo apt-get install python3-gi gir1.2-wnck-3.0
użytkownik3804598
źródło
1

skrypt bash za pomocą xdotool:

currentwindowid=$(xdotool getactivewindow)
currentdesktopid=$(xdotool get_desktop)

for w in $(xdotool search --all --maxdepth 3 --desktop $currentdesktopid --name ".*"); do
  if [ $w -ne $currentwindowid ] ; then
    xdotool windowminimize "$w"
  fi
done

minimalizuje tylko okna na bieżącym pulpicie.

Aby zminimalizować okna na wszystkich komputerach:

currentwindowid=$(xdotool getactivewindow)

for w in $(xdotool search --all --maxdepth 3 --name ".*"); do
  if [ $w -ne $currentwindowid ] ; then
    xdotool windowminimize "$w"
  fi
done
użytkownik3804598
źródło
Biorąc pod uwagę problemy z różnymi wersjami Pythona, wolę to rozwiązanie bash.
WinEunuuchs2Unix