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

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

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

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

21
задан 5 May 2014 в 17:27

4 ответа

Этого можно добиться с помощью скрипта на 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()

Затем можно настроить комбинацию клавиш, открыв комбинацию клавиш.

Keyboard Shortcuts in Dash

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

Keyboard Shortcuts window

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

create shortcut

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

Скрипт свернет все неактивные окна. Я не думаю, что это очень полезно для вашего случая использования, потому что вы захотите открыть все окна 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()
0
ответ дан 5 May 2014 в 17:27

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

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

0
ответ дан 5 May 2014 в 17:27

сценарий удара с помощью 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
1
ответ дан 23 November 2019 в 01:44

Ubuntu 21.10 работает под управлением Wayland, и я хочу, чтобы эта функциональность была на моем новом мониторе. Это решение, которое работает для меня, это сценарий bash, который я привязываю к пользовательской комбинации клавиш.

#!/bin/bash
gdbus call \
  --session \
  --dest org.gnome.Shell \
  --object-path /org/gnome/Shell \
  --method org.gnome.Shell.Eval \
  "global
      .get_window_actors()
      .filter(w=>w.meta_window.has_focus()===false)
      .forEach(w=>w.meta_window.minimize())"

0
ответ дан 25 December 2021 в 10:44

Другие вопросы по тегам:

Похожие вопросы: