Есть ли сочетание клавиш для минимизации всех окон, кроме активного?

21

Когда я открываю такие программы, как GIMP, открывающиеся фоновые окна отвлекают, потому что с ним связаны три отдельных окна.

Обязательным является переход к любому другому окну, не являющемуся Gimp, чтобы свести его к минимуму. Что мне нужно, так это сочетание клавиш в Ubuntu, которое соответствует сочетанию клавиш Windows Super+ Home. Тот, который минимизирует все окна, кроме активного.

Возможно ли добиться такого поведения в Ubuntu?

Чад
источник
Интересная идея! Посмотрите на 1-й ответ здесь для указателей: askubuntu.com/questions/13709/… Этот пост о добавлении функции, чтобы минимизировать все. Если вы посмотрите на это, добавив строку «максимизировать предыдущий текущий активный» или изменив ее на «минимизировать, кроме текущего активного», после того, как это сделает свое дело (?)
Rinzwind
Есть ли шанс, что разработчики добавят параметр «Свернуть все, кроме активного окна» в меню «Сочетание клавиш» в будущих версиях Ubuntu? Таким образом, эта привязка «готова и ждет» для настройки, когда пользователи устанавливают Ubuntu?
Чад

Ответы:

20

Этого можно добиться с помощью скрипта Python. Сценарий требует python-wnckи python-gtkдолжен быть установлен для работы, хотя я думаю, что они установлены по умолчанию в любом случае.

Скопируйте и вставьте это в текстовый редактор и сохраните в разумном месте (например, как minimise.py в вашей домашней папке):

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

Затем вы можете настроить сочетание клавиш, открыв сочетания клавиш.

Сочетания клавиш в тире

Нажмите « Добавить», чтобы создать новый ярлык.

Окно сочетаний клавиш

Используйте команду bash -c 'python ~/minimise.py'(предполагается, что вы сохранили ее как minimise.py в вашей домашней папке).

создать ярлык

Затем вы можете назначить предпочитаемую комбинацию клавиш этому действию.

Скрипт свернет все неактивные окна. Я не думаю, что это очень полезно для вашего случая использования, потому что вы захотите открыть все окна Gimp. Вы можете использовать немного другой скрипт, чтобы минимизировать все окна, которые не из текущего приложения:

#!/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
источник
4
+1! Вот почему я люблю Linux! Превосходно. @chad: если проблема заключается в нескольких окнах gimp, возможно, есть способ заставить gimp действовать как 1 окно. Упс: кажется, что это значение по умолчанию из 2.6 (пойди разберись; я давно не использовал gimp).
Rinzwind
Вот почему я люблю Python - в нем есть модуль для всего!
dv3500ea
1
Python-wnck должен был быть установлен в моей системе, 14.04. Вопрос, однако, внутри оболочки python он работает нормально без части gtk.main_loop, но без него внутри скрипта это не так. Таким образом, чтобы сделать скрипт работоспособным из файла .py, необходима часть gtk.main_loop. Может кто-нибудь объяснить, почему?
Сергей Колодяжный
Почему bash -c 'python... и не просто python ...?
Майкл Кэмпбелл
1

Поскольку python-wnck больше не находится в репозитории apt (Kubuntu 18.04 Bionic), ниже приведен модифицированный код Python (из приведенных выше ответов @Aditya и @ dv3500ea).

Начиная с python3 и далее, wnck является частью GObject Introspection API ( источник ). Таким образом, синтаксис для импорта wnck (и объектов 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()

затем назначьте ярлык скрипту Python: (в Kubuntu) kmenueditor -> создайте новый элемент -> скрипт bash -c 'python path_to_the_python_script.py'-> назначьте нужный ярлык

ОБНОВЛЕНИЕ (май 19):

На Kubuntu 19.04 мне нужно было установить модуль gir1.2-wnck-3.0, чтобы скрипт работал выше.

$ python -V
Python 2.7.16
$ sudo apt-get install python3-gi gir1.2-wnck-3.0
user3804598
источник
1

скрипт bash с использованием 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

он минимизирует только окна на текущем рабочем столе.

Чтобы свернуть окна на всех рабочих столах:

currentwindowid=$(xdotool getactivewindow)

for w in $(xdotool search --all --maxdepth 3 --name ".*"); do
  if [ $w -ne $currentwindowid ] ; then
    xdotool windowminimize "$w"
  fi
done
user3804598
источник
Учитывая проблемы с различными версиями Python, я предпочитаю это решение bash.
WinEunuuchs2Unix