Pencerenin bash betiğinden büyütülüp küçültülmediğini belirleme


11

Çift ekran kurulumunda pencerelerimi sol ekrandan sağ ekrana hareket ettiren bir bash betiğim var. Şu anda çalışma şekli, tarafından verilen pencere kimlikleri arasında geçiş yapmak xdotool search --onlyvisible --maxdepth 2 --class ""ve ardından bunları ekran genişliği ile sağa hareket ettirmektir. Söz konusu pencere büyütülmediği veya simge durumuna küçültülmediği sürece zaten çalışıyor.

Yani gereken, pencerenin mevcut durumunu kontrol etmenin bir yoludur. Bu bitleri ekleme ve kaldırma yolunu sağlayan bir yanıt buldum , ancak önceden ayarlanmış olup olmadıklarını kontrol etmenin yolu nedir?

Xdotool ile yapmak mümkün değilse , yukarıda belirtilen komutla sağlanan pencere kimliğini yeniden kullanmak mümkün olmalıdır.


hangisinin devilspietam olarak bu tür bir pencere çalışması yapmak için tasarlandığını da görebilirsiniz .
Yeniden kodlamaya

Yanıtlar:


11

Pencere durumu hakkında bilgi alma

Bilgileri (ve çok daha fazlasını) komuttan alabilirsiniz:

xprop -id <window_id>

Özellikle aradığınızı almak için:

xprop -id 0x04c00010 | grep "_NET_WM_STATE(ATOM)"

Çıktı şöyle görünecektir:

_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_HIDDEN

aynı anda simge durumuna küçültülmüş (h + v) ve simge durumuna küçültülmüş bir pencerede veya yalnızca

_NET_WM_STATE(ATOM) =

(ya da hiç çıktı yok) durum böyle değilse.

daha fazla eğlence

Tabii ki, çeşitli dilleri kullanarak, aşağıdaki python snippet'indeki gibi Wnck'i kullanabilirsiniz . ( pencere karıştırıcıdan snippet ). Snippet, pencere adını + Trueveya False(simge durumuna küçültülmüş) gösteren bir liste çıkarır .

#!/usr/bin/env python3
import gi
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck


def get_winlist(scr=None, selecttype=None):
    """
    get the window list. possible args: screen, select_type, in case it is
    already fetched elsewhere. select type is optional, to fetch only
    specific window types.
    """
    if not scr:
        scr = Wnck.Screen.get_default()
        scr.force_update()
    windows = scr.get_windows()
    if selecttype:
        windows = [w for w in windows if check_windowtype(w, selecttype)]
    return windows

wlist = get_winlist()
for w in wlist:
    print(w.get_name(), ",", w.is_maximized())

Çıktı şöyle görünür:

Wnck.Window - Classes - Wnck 3.0 - Mozilla Firefox , True
Postvak IN - vlijm@planet.nl - Mozilla Thunderbird , True
Showtime , False
settingsexample.vala - Visual Studio Code , False
*Niet-opgeslagen document 1 - gedit , False
desktop_weather , False
Tilix: Standaard , False

NB

  • xprophem hex (örn. çıktı olarak wmctrl) hem de ondalık (örn. çıktı olarak xdotool) id'lerini eşit olarak ele alır, örneğin:

    xprop -id 111371626
    

    veya

    xprop -id 0x06a3656a
    
  • Yöntemler Wayland üzerinde çalışmaz!


1
Mükemmel öneri +1. Yorum olarak, denedim (Linux, X11 altında) ve biraz farklı sonuçlar aldım. Bir pencere ne gizli ne de maksimize _NET_WM_STATE(ATOM)edildiğinde, yanıtta gösterildiği gibi boş bir değerle görünmez. Bunun yerine, çıktıda hiç yoktur.
John1024

@ John1024 Ah, teşekkürler! cevaba ekleyecek.
Jacob Vlijm

Sistemimde boş da olsa her iki durumda da gösterilir.
v010dya

Ben pencere kimliği bir onaltılık sayı olarak verilebilir eklemek istiyorum, bu yüzden hex dönüştürmek gerek. Bunun birine yardım etmesi durumunda.
v010dya

@ v010dya Teşekkürler! Güncellenmiş cevaba bakınız.
Jacob Vlijm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.