Apakah ada pintasan keyboard untuk meminimalkan semua jendela kecuali yang aktif?

21

Saat membuka program seperti GIMP, saya mendapati jendela latar terbuka yang mengganggu karena GIMP memiliki tiga jendela terpisah yang terkait dengannya.

Membayar harus mengunjungi setiap jendela non-Gimp secara manual untuk menguranginya. Yang saya butuhkan adalah pintasan keyboard di Ubuntu yang cocok dengan pintasan Super+ Windows Home. Yang meminimalkan semua jendela kecuali yang aktif.

Apakah mungkin untuk mencapai perilaku ini di Ubuntu?

Chad
sumber
Ide yang menarik! Lihatlah jawaban pertama di sini untuk petunjuk: askubuntu.com/questions/13709/… Tulisan itu adalah tentang menambahkan fungsi untuk meminimalkan semua. Dari melihatnya menambahkan garis 'memaksimalkan aktif saat ini sebelumnya' atau mengubahnya menjadi 'meminimalkan kecuali yang aktif saat ini' setelah itu akan melakukan trik (?)
Rinzwind
ada kemungkinan pengembang akan menambahkan opsi "Minimalkan Semua Tapi Jendela Aktif" di menu Pintasan Keyboard di versi Ubuntu yang akan datang? Dengan cara ini binding ini "siap dan menunggu" untuk dikonfigurasi ketika pengguna menginstal Ubuntu?
Chad

Jawaban:

20

Dimungkinkan untuk mencapai ini dengan skrip python. Script membutuhkan python-wnckdan python-gtkdiinstal untuk berfungsi, meskipun saya pikir ini diinstal secara default.

Salin dan tempel ini ke editor teks dan simpan di tempat yang masuk akal (mis. Sebagai minimise.py di folder rumah Anda):

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

Anda kemudian dapat mengatur pintasan keyboard dengan membuka Pintasan Keyboard.

Pintasan Keyboard di Dash

Klik Tambah untuk membuat pintasan baru.

Jendela Pintasan Keyboard

Gunakan perintah bash -c 'python ~/minimise.py'(ini dengan asumsi Anda menyimpannya sebagai minimise.py di folder rumah Anda).

buat pintasan

Anda kemudian dapat menetapkan kombinasi keyboard pilihan Anda untuk tindakan ini.

Skrip akan meminimalkan semua jendela yang tidak aktif. Saya tidak berpikir ini sangat berguna untuk use case Anda karena Anda ingin semua jendela Gimp terbuka. Anda dapat menggunakan skrip yang sedikit berbeda untuk memperkecil semua jendela yang bukan dari aplikasi saat ini:

#!/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
sumber
4
+1! Inilah sebabnya saya suka Linux! Luar biasa. @chad: jika beberapa jendela gimp bermasalah, sepertinya ada cara agar gimp bertindak sebagai 1 jendela. Ups: tampaknya ini adalah default dari 2.6 (lihat gambar; saya belum pernah menggunakan gimp untuk waktu yang lama).
Rinzwind
Inilah sebabnya saya suka Python - ia memiliki modul untuk semuanya!
dv3500ea
1
python-wnck harus diinstal pada sistem saya, 14,04. Pertanyaannya, di dalam shell python itu berfungsi ok tanpa bagian gtk.main_loop, tetapi tanpa di dalam script, itu tidak. Jadi pada dasarnya untuk membuat skrip bisa dijalankan dari file .py, bagian gtk.main_loop adalah suatu keharusan. Adakah yang bisa menjelaskan mengapa?
Sergiy Kolodyazhnyy
Kenapa bash -c 'python... dan tidak adil python ...?
Michael Campbell
1

Karena python-wnck tidak lagi berada di repositori apt (Kubuntu 18.04 Bionic), di bawah ini adalah kode python yang dimodifikasi (dari jawaban di atas oleh @Aditya dan @ dv3500ea).

Dari python3 dan seterusnya, wnck adalah bagian dari GObject Introspection API ( sumber ). Jadi, sintaks untuk mengimpor wnck (dan objek Gtk) telah berubah.

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

kemudian tetapkan pintasan ke skrip python: (di Kubuntu) kmenueditor -> buat item baru -> skrip bash -c 'python path_to_the_python_script.py'-> tetapkan pintasan yang diinginkan

PEMBARUAN (19 Mei):

Di Kubuntu 19.04 saya perlu menginstal modul gir1.2-wnck-3.0 untuk membuat skrip di atas berfungsi.

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

skrip bash menggunakan 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

ini hanya meminimalkan jendela pada desktop saat ini.

Untuk meminimalkan jendela di semua desktop:

currentwindowid=$(xdotool getactivewindow)

for w in $(xdotool search --all --maxdepth 3 --name ".*"); do
  if [ $w -ne $currentwindowid ] ; then
    xdotool windowminimize "$w"
  fi
done
pengguna3804598
sumber
Mengingat masalah dengan versi Python yang berbeda, saya lebih suka solusi bash ini.
WinEunuuchs2Unix