Sadece güncel çalışma alanlarının uygulamalarını başlatıcıda göstermek için ayarlama yapmak ister misiniz?

22

Mevcut çalışma alanının açılmış uygulamalarını başlatıcıda değil, diğer çalışma alanlarındakileri kullanabiliyor mu?

    
sordu user165749 09.06.2013 11:02

3 cevap

8

(diğer) çalışma alanlarında izlenemeyen uygulamalar nasıl yapılır?

xdotool 's windowunmap değerini kullanarak, bir pencereyi tamamen gizlemek mümkündür. Pencere, ne de uygulaması, başlatıcı simgesinde daha fazla meydana gelir ve artık wmctrl çıkışında listelenmez.

Teorik olarak, bu , bu uygulamasında kullanılan "çalışma alanı motoruna" bağlanabilir. / a> ve bu yanıtı. En zarif çözüm bu olurdu.

Ancak, yalnızca diğer çalışma alanlarındaki pencereleri gizleme ve geçerli çalışma alanında bulunanları otomatik olarak yükseltmek işleminin devam etmekte olan bir arka planında kullanılması çok zorludur. komut dosyası (şimdilik) ve "soğuk algınlığı" da olası değil. Hatalar için pencerelerin iyi olması nedeniyle, bu nedenle prosedürü otomatik (arka plan) işlemi olarak sunmamaya karar verdim.

Yine de bu yanıt sizin için yararlı olacaksa veya duruma bağlı değilse ve diğer çalışma alanlarında çalışan uygulamaların simgelerini gizlemenin nedenini; karar sizindir.

Çözüm; ne ve pratikte nasıl çalışıyor?

Komut dosyası

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"

def get_wlist(res):
    res = get_res()
    try:
        wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        return [w for w in wlist if all([
            0 < int(w[2]) < res[0],
            0 < int(w[3]) < res[1],
            "_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
            ])]
    except subprocess.CalledProcessError:
        pass

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current(res):
    # get the current viewport
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

res = get_res()

try:
    f = workspace_data+current(res)
    wlist = eval(open(f).read().strip())
    for w in wlist:
        subprocess.Popen(["xdotool", "windowmap", w[0]])
    os.remove(f)
except FileNotFoundError:
    current_windows = get_wlist(res)
    open(f, "wt").write(str(current_windows))
    for w in current_windows:
        subprocess.Popen(["xdotool", "windowunmap", w[0]])

Nasıl kullanılır?

  1. Komut dosyasının hem wmctrl hem de xdotool olması gerekiyor:

    sudo apt-get install wmctrl xdotool
    
  2. Komut dosyasını boş bir dosyaya kopyalayın, toggle_visibility.py olarak kaydedin
  3. Komut dosyasını test edin: bir terminal penceresinde şu komutu çalıştırın:

    python3 /path/to/toggle_visibility.py
    

    Şimdi yeni bir terminal penceresi açın (birincisi yeryüzünün yüzeyinden görünüşte kayboldu) ve aynı komutu tekrar çalıştırın. Tüm pencereler tekrar görünmelidir.

    NB : test ederken "değerli" pencerelerin açık olmadığından emin olun

  4. Tüm işlemler düzgün çalışıyorsa, komutu kısayol tuş bileşimine ekleyin: seçim: Sistem Ayarları & gt; "Klavye" & gt; "Kısayollar" & gt; "Özel Kısayollar". "+" İşaretini tıklayın ve komutu ekleyin:

    python3 /path/to/toggle_visibility.py
    

Açıklama

Belirtildiği gibi, komut dosyası, pencereleri ve ait oldukları uygulamaları gizlemek (%) için xdotool 's windowunmap kullanır. Komut dosyası:

  • mevcut çalışma alanının ne olduğunu okur
  • mevcut çalışma alanında bulunan pencereleri okur (yalnızca)
  • pencere listesini, geçerli çalışma alanından sonra adlandırılmış bir dosyaya yazar
  • pencereleri gizler

Bir sonraki çalışmada, komut dosyası:

  • dosyanın mevcut çalışma alanına karşılık gelip gelmediğini kontrol eder
  • öyleyse, pencere listesini okur ve pencereleri gizler.

Böylece mevcut çalışma alanında pencerelerin ve uygulamaların görünürlüğünü değiştirmek.

    
6

Ne yazık ki imkansız.

Birlik her zaman tüm uygulamaları her yerden gösterir ve bunu değiştirmenin bir yolu yoktur. Bir hata raporu var - İşte Ama geliştiriciler hiçbir şey yapmayacak gibi görünüyor. Muhtemelen sayfanın üst kısmında bu hatanın sizi etkilediğine işaret ederseniz, geliştiricilerin bu seçeneğin önemini anlamalarına yardımcı olacaktır.

    
verilen cevap dofeoct 01.09.2013 23:29
5

Diğer cevaplar oldukça eskidir, bu yüzden güncel bir cevap eklemem gerektiğini düşünüyorum. Şu anda bunu yapmak mümkün ve çok zor değil tbh (Ubuntu 17.10 ve Gnome ile).

Sadece dconf editörü kullanın:

sudo apt install dconf-editor

org & gt; konumuna gidin gnome & gt; kabuk & gt; uzantılar & gt; sabitleme işaretini ve ayrı çalışma alanlarını kontrol et

    
verilen cevap Jakub Kopyś 01.02.2018 13:39

Etiketlerdeki diğer soruları oku