¿Hay un atajo de teclado para minimizar todas las ventanas excepto la activa?

21

Al abrir programas como GIMP, encuentro que las ventanas de fondo se abren distrayendo porque GIMP tiene tres ventanas separadas asociadas.

Es una carga tener que ir a cualquier otra ventana que no sea Gimp de forma manual para minimizarla. Lo que necesito es un atajo de teclado en Ubuntu que coincida con el atajo de Windows Super+ Home. Uno que minimiza todas las ventanas excepto la activa.

¿Es posible lograr este comportamiento en Ubuntu?

Chad
fuente
¡Idea interesante! Eche un vistazo a la primera respuesta aquí para los punteros: askubuntu.com/questions/13709/… Esa publicación trata sobre agregar una función para minimizar todo. Al mirarlo, agregar una línea 'maximizar el activo actual anterior' o cambiarlo a 'minimizar excepto el activo actual' después de que hiciera el truco (?)
Rinzwind
¿Hay alguna posibilidad de que los desarrolladores agreguen la opción "Minimizar todo menos la ventana activa" en el menú contextual del teclado en futuras versiones de Ubuntu? De esta manera, este enlace está "listo y esperando" para ser configurado cuando los usuarios instalan Ubuntu?
Chad

Respuestas:

20

Es posible lograr esto con un script de Python. El script requiere python-wncky python-gtkdebe instalarse para funcionar, aunque creo que de todos modos están instalados de forma predeterminada.

Copie y pegue esto en un editor de texto y guárdelo en un lugar sensible (por ejemplo, como minimise.py en su carpeta de inicio):

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

Luego puede configurar el atajo de teclado abriendo Atajos de teclado.

Atajos de teclado en el tablero

Haga clic en Agregar para crear un nuevo acceso directo.

Ventana de atajos de teclado

Use el comando bash -c 'python ~/minimise.py'(esto supone que lo guardó como minimise.py en su carpeta de inicio).

crear acceso directo

Luego puede asignar su combinación de teclado preferida a esta acción.

El script minimizará todas las ventanas no activas. No creo que esto sea muy útil para su caso de uso porque querrá tener abiertas todas las ventanas de Gimp. En su lugar, puede usar un script ligeramente diferente para minimizar todas las ventanas que no son de la aplicación actual:

#!/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
fuente
44
+1! ¡Es por eso que amo Linux! Excelente. @chad: si las múltiples ventanas de gimp son un problema, parece que hay una manera de hacer que gimp actúe como 1 ventana. Oops: parece ser el valor predeterminado de 2.6 (vaya a la figura; no he usado gimp durante mucho tiempo).
Rinzwind
Es por eso que amo Python: ¡tiene un módulo para todo!
dv3500ea
1
Python-wnck tuvo que instalarse en mi sistema, 14.04. Pregunta sin embargo, dentro del shell de Python funciona bien sin la parte gtk.main_loop, pero sin ella dentro del script, no funciona. Básicamente, para que el script funcione desde un archivo .py, la parte gtk.main_loop es imprescindible. ¿Alguien puede explicar por qué?
Sergiy Kolodyazhnyy
¿Por qué bash -c 'python... y no solo python ...?
Michael Campbell
1

Dado que python-wnck ya no está en el repositorio de apt (Kubuntu 18.04 Bionic), a continuación se muestra el código de python modificado (de la respuesta anterior de @Aditya y @ dv3500ea).

Desde python3 en adelante, wnck es parte de la API de introspección de GObject ( fuente ). Entonces, la sintaxis para importar wnck (y objetos Gtk) ha cambiado.

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

luego asigne el acceso directo al script de Python: (en Kubuntu) kmenueditor -> cree un nuevo elemento -> script bash -c 'python path_to_the_python_script.py'-> asigne un acceso directo deseado

ACTUALIZACIÓN (19 de mayo):

En Kubuntu 19.04, necesitaba instalar el módulo gir1.2-wnck-3.0 para que el script anterior funcionara.

$ python -V
Python 2.7.16
$ sudo apt-get install python3-gi gir1.2-wnck-3.0
usuario3804598
fuente
1

script bash usando 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

minimiza solo ventanas en el escritorio actual.

Para minimizar las ventanas en todos los escritorios:

currentwindowid=$(xdotool getactivewindow)

for w in $(xdotool search --all --maxdepth 3 --name ".*"); do
  if [ $w -ne $currentwindowid ] ; then
    xdotool windowminimize "$w"
  fi
done
usuario3804598
fuente
Dados los problemas con diferentes versiones de Python, prefiero esta solución bash.
WinEunuuchs2Unix