Jak natychmiast zamknąć wszystkie wystąpienia programu?

11

Kot mojej dziewczyny chodził po moim laptopie i jej nie zauważyłem. Kiedy odwróciłem się, by sprawdzić, widzę, że mam 32 zakładki „Menedżer archiwum”. Jak mogę zamknąć je wszystkie natychmiast, jakbyś używał Alt+ F4na wszystkich z nich jednocześnie.

Sticsk
źródło

Odpowiedzi:

14

Z linii poleceń:

killall file-roller

Możesz zrobić Alt + F4, ale musisz to zrobić dla każdego menedżera archiwum, który został otwarty.

Rinzwind
źródło
21
Chociaż niektórzy mogą argumentować, że polecenie „killall” jest nieco ciężkie, twoje rozwiązanie jest o wiele bardziej humanitarne niż kill catdziałanie, które zamierzałem zasugerować.
Nick Weinberg,
Nie sądzę, że istnieje łatwiejszy sposób na powstrzymanie ich wszystkich. Mnóstwo alt + f4 zrobiłoby to, ale nie o to chodziło ;-)
Rinzwind
5
@NickWeinberg Doceniam to :)
kot
5
Czytam to pytanie i źle odpowiadam. Myślałem, że chodzi o kota, który wszystko zamknął, i że OP nie wiedział, jak to zrobił. Byłem zaskoczony, że kot był w stanie napisać killall file-roller: D
Viktor Mellgren
1
cholera @ViktorMellgren przestań robić mi kawę na ekranie
Rinzwind
3

Innym podejściem byłoby użycie wmctrlnarzędzia (kontrolka Menedżera okien). Można tego użyć, aby poinformować menedżera okien, aby udawał, że kliknąłeś przycisk zamknięcia. Pozwala to uniknąć potencjalnie ciężkiej natury killall; na przykład niektóre programy z niezapisanym dokumentem natychmiast zakończą działanie po ich zabiciu (nawet delikatnie), a kliknięcie przycisku zamykania powoduje wyświetlenie komunikatu „Czy chcesz zapisać?” skłonić.

Podstawowym poleceniem jest wmctrl -c WINDOWTITLE, więc w tym przypadku wmctrl -c "Archive Manager"(zakładając, że nie ma otwartego pliku: to zmienia tytuł). Niestety, zamyka się tylko jeden na raz, więc musimy zrobić więcej, aby zamknąć je wszystkie.

wmctrl zwraca sukces, jeśli znajdzie dopasowanie, dzięki czemu możemy zapętlać, dopóki się nie powiedzie:

while wmctrl -c "Archive Manager"; do sleep 0.1; done

To zawsze wybiera pierwsze okno, które znajdzie, więc musimy trochę przespać, aby uniknąć ciągłego wysyłania strumienia poleceń zamykania do pierwszego okna, które jest już zajęte zamykaniem - może to spowodować błąd, który zatrzymuje pętlę.

Jest to proste i zwykle działa, ale spanie przez określony czas i nadzieja, że ​​okno się zamknie, zanim spróbujemy ponownie, jest niechlujnym i powolnym sposobem uniknięcia błędu. To, co naprawdę chcemy zrobić, to natychmiastowe wysłanie jednej zamkniętej wiadomości do każdego pasującego okna.

Możemy znaleźć wszystkie otwarte okna za pomocą wmctrl -l. Podaje numeryczny identyfikator okna, którego możemy użyć do zidentyfikowania każdego okna osobno, nawet jeśli wszystkie mają ten sam tytuł. Następnie musimy filtrować tylko do pasujących okien ( greppolecenie), wyciągnąć tylko identyfikator okna ( cutpolecenie) i wywołać wmctrl -i -cdla każdego z nich. Konieczne -ijest dopasowanie identyfikatora okna zamiast tytułu okna.

for w in $(wmctrl -l | grep "Archive Manager" | cut -d" " -f1); do
    wmctrl -i -c $w
done

Nieco skomplikowane jest pisanie za każdym razem, gdy kot pojawia się na klawiaturze, ale mam nadzieję, że jest to przydatna technika, którą można zachować w przyborniku skryptów.

Harun
źródło
2
Więc spodziewasz się, że kot napisze coś, co warto oszczędzić?
Rinzwind 24.04.17
0

Możesz użyć skrótu klawiaturowego Ctrl+, Qktóry zamknie wszystkie otwarte okna Archive Managera.


Ctrl+ QSkrót jest powszechne na Ubuntu (i wielu innych dystrybucjach również). Działa tak samo z większością aplikacji, z których dotychczas korzystałem. Oznacza to, że zamknie wszystkie okna działającej aplikacji.

Dan
źródło
Cofnę głos, ponieważ nie mogę potwierdzić, że Ctrl+Qtak właśnie jest. Chociaż Quitmenu zamknęło wszystkie otwarte okna Archive Managera, klawisz skrótu nie zrobił tego samego (przynajmniej w 14.04).
clearkimura
1
@clearkimura Nie mogę potwierdzić, czy wynika to z faktu, że używam gnome, czy z powodu wersji Ubuntu, ale działa dla mnie na Ubuntu 17.04 (z gnome), który używa Archive Managera w wersji 3.22.3
Dan