Şu anda etkin olan pencereyi algılama


52

Linux komut satırı aracı wmctrl, diğer pencerelerin yanı sıra tüm pencereleri veya tüm masaüstlerini listelemenizi sağlar. Masaüstü listeleme modunda, geçerli masaüstü yıldız işareti ile işaretlenmiştir.

Şu anda aktif olan pencerenin başlığını çözebilecek bir araca ihtiyacım var. Ne yazık ki, wmctrlhangi pencerenin aktif olduğunu bilmesine rağmen, bunu yapan bir yardımcı yok :ACTIVE:.

Geçerli pencerenin pencere kimliğini ve / veya pencere başlığını bana verebilecek başka bir komut satırı aracı var mı?

Yanıtlar:


56

Kur xdotool, sonra çalıştır

xdotool getwindowfocus getwindowname

Örneğin Firefox’ta açılan mevcut web sayfası için:

linux - Detecting currently active window - Super User - Mozilla Firefox

Güçlü araç! Mevcut etkin pencereyi açmanın yanı sıra, birçok başka kullanışlı işlevi de vardır.
Searene

Jim Paris'in cevabına kıyasla, bunun kurulumu bir bağımlılığın dezavantajı var, ancak özellikle xdotool zaten disk önbelleğinde ise, daha hızlı çalışıyor gibi görünüyor.
mc0e

1
Geçerli pencereyi ile değiştirmek isterseniz wmctrl, şunları yapabilirsiniz:, wmctrl -i -r `xdotool getwindowfocus` -e 0,10,10,-1,-1burada -iwmctrl'ye pencere başlığı yerine pencere kimliğini beklemesini söyler.
01

34

Bu daha doğrudan ve sadece kullanır xpropve cut:

xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME

Bu komutlar sadece kök pencereden ve uygulama penceresinden özelliklerin çıkarılmasıdır, ancak Lorenzo von Matterhorn'un isteğine göre:

  • İlk,

    xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
    

    Ayıklar _NET_ACTIVE_WINDOWsize etkin pencerenin XID verir kökünden, malını. 32x '\t$0'Söyler xpropbir şekilde çıkışını biçimlendirmek için cutkolayca sonradan ayrıştırma yapabilir.

  • Ardından, çıktıdan yalnızca XID'yi çıkarın. cut -f 2

  • Ardından, XID'yi parametre olarak girin

    xprop -id XID _NET_WM_NAME
    

Bu pencerenin adını basan.


1
merhaba, lütfen argümanları ve biraz sözdizimi açıklayabilir misiniz? KG ve gelecekteki okuyucular için yararlı olabilir.
Lorenzo Von Matterhorn,

9

Kısa bir cevap veya çözüm yok, ancak.

$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
    awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')

sonuç:

0x03800004  0 16459  xxxxxxxxxx /bin/bash

Kullanımda:

$ for x in $(seq 1 10); do sleep 5; wmctrl -lp | grep $(xprop -root | \
    grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | \
    sed 's/^0x/0x0/'); done

0x03800004  0 16459  xxxxxxxxxx /bin/bash
0x020000a4  0 13524  xxxxxxxxxx linux - Detecting currently active window - Super User - Mozilla Firefox (Build 20120129142219)

1
Bu iyi bir çözüm gibi görünüyor, xprop yardımcı programını bilmiyordum. Bu arada, böyle bir seçenek sağlamak için wmctrl'i yattım ve yazara gönderdim. Ne yazık ki, henüz bir yanıt alamadım.
Dave Vogt

1
Kodunda etkinlik ve "basitlik" için +1
Lorenzo Von Matterhorn

5

Bu benim için çalıştı.

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME

verir:

WM_NAME(STRING) = "~"

Belki de adı tek başına almak için biraz çirkinlik yaparsın:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | sed -e 's/.*"\(.*\)".*/\1/'

verir:

~

Şu anda benim odaklanan pencere adımı, kendi başına.

Ya da biraz daha az çirkinle baştan kaçın:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | awk -F '"' '{print $2}'


1
Ya da kesim kesin olarak tanıtıldığından beri, bunu tekrar kullanabilirsiniz:xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | cut -d '"' -f 2
mc0e

3

Nispeten kısa ve alıntıları içeren pencere adlarını doğru şekilde işler:

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | 
sed -nr 's/.*= "(.*)"$/\1/p'
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.