Yalnızca ihtiyaç duyduğumda çalışma alanlarını otomatik olarak nasıl ekleyebilirim?


16

4 çalışma alanı kullandığımı ve tesadüfen daha fazlasına ihtiyacım olduğunu, otomatik bir işlem olduğunu veya imkansızsa, daha fazla çalışma alanı eklemek için kolay bir yol (varsa Ubuntu tweakvb.) Varsayalım .



@JacobVlijm imgur.com/LaDYwGb Yukarıdakiler ve Kabul edildi, gerçekten güzel cevap için teşekkürler
kernel_panic

İlgili: Bu eski yazı "Otomatik olarak daha fazla Çalışma Alanı nasıl oluşturulur / kaldırılır?" iki farklı cevap. Daha sonra, eski yanıtlar buradaki yeni yanıtlara kıyasla daha az tatmin olur.
clearkimura

Yanıtlar:


14

Çalışma alanı sayısını otomatik olarak ayarlayın; ihtiyaçlarınıza bağlı olarak sütun ve satır ekleyin ve kaldırın

Çalışma alanı matrisinizin son sütununu veya satırını girdiyseniz, çalışma alanlarını otomatik olarak ekleyecek bir (artalanlar) artalan komut dosyasının sürümünün altında.

Bu nasıl çalışır:

  1. Son sütuna veya satıra gelirseniz, ek görünüm alanları eklenir:

    resim açıklamasını buraya girin

  2. Çalışma alanlarınız 5-10 saniye kullanılmazsa ve üzerinde pencere yoksa, ek çalışma alanları tekrar kaldırılır. Bununla birlikte, her zaman aşağıda bir satır daha ve geçerli görünüm pencerenizin sağında bir satır daha saklarsınız:

    resim açıklamasını buraya girin

Senaryo:

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

# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10

def set_workspaces(size, axis):
    subprocess.Popen([
        "dconf", "write", "/org/compiz/profiles/unity/plugins/core/"+axis,
                str(size)
                ])

def get_res():
    resdata = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    curr = resdata.index("current")
    return (int(resdata[curr+1]), int(resdata[curr+3].replace(",", "")))

def wspace():
    try:
        sp = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
        return ([int(n) for n in sp[3].split("x")],
                [int(n) for n in sp[5].split(",")])

    except subprocess.CalledProcessError:
        pass


def clean_up(curr_col, curr_row):
    try:
        w_list = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        xpos = max([math.ceil((int(w[2])+span[1][0])/res[0]) for w in w_list])
        min_x = max(xpos, curr_col+1, hsize)
        if xpos >= hsize:
            set_workspaces(min_x, "hsize")
        else:
            set_workspaces(min_x, "hsize")
        ypos = max([math.ceil((int(w[3])+span[1][1])/res[1]) for w in w_list])
        min_y = max(ypos, curr_row+1, vsize)
        if ypos >= vsize:
            set_workspaces(min_y, "vsize")
        else:
            set_workspaces(min_y, "vsize")
    except subprocess.CalledProcessError:
        pass

res = get_res()
t = 0

while True:
    span = wspace()
    if span != None:
        cols = int(span[0][0]/res[0]); rows = int(span[0][1]/res[1])
        currcol = int((span[1][0]+res[0])/res[0])
        if all([currcol == cols, cols*rows < max_ws]):
            set_workspaces(cols+1, "hsize")
        currrow = int((span[1][1]+res[1])/res[1])
        if all([currrow == rows, cols*rows < max_ws]):
            set_workspaces(rows+1, "vsize")
        if t == 10:
            clean_up(currcol, currrow)
            t = 0
        else:
            t = t+1
        time.sleep(1)

Nasıl kullanılır

  1. Aşağıdaki komut dosyasını boş bir dosyaya kopyalayın, add_space.py
  2. Komut dosyasının baş bölümünde, diğer ayarları (maksimum çalışma alanı sayısı, varsayılan matris örn. 2x2) isterseniz satırları düzenleyin:

    # --- set default workspaces below (horizontally, vertically)
    hsize = 2
    vsize = 2
    # --- set the maximum number of workspaces below
    max_ws = 10
    
  3. Komut ile test edin:

    python3 /path/to/add_space.py
    
  4. Her şey yolunda giderse, başlangıç ​​uygulamalarınıza ekleyin: Dash> Startup Applications> Komut ekle:

    /bin/bash -c "sleep 15 &&  python3 /path/to/add_space.py`
    

Not

Her zaman olduğu gibi, komut dosyası son derece "meyve suyunda az" ve işlemcinize fark edilir bir yük eklemiyor.

açıklama

Aşağıdaki hikaye biraz karmaşıktır ve çoğunlukla kodlamadan ziyade kavram ve prosedür hakkında bir açıklamadır . Sadece ilgilendiğiniz takdirde okuyun.

Gerekli çalışma alanları nasıl hesaplanır (örnek sütunlar)

Çıkışı wmctrl -dşöyle görünür:

0  * DG: 3360x2100  VP: 1680,1050  WA: 65,24 1615x1026  N/A

Çıktıda, VP: 1680,1050bize yayılma çalışma alanında nerede olduğumuz hakkında bilgi verir (tüm görünüm pencerelerinin matrisi). Bu bilgi, yalnızca ekran çözünürlüğümüz varsa da yararlıdır, çünkü örneğin ekran 1680genişliği iki (beklenmedik ancak sabit) veya bir kez olabilir.
Neyse ki, ekranın çözünürlüğünü komuttan ayrıştırabiliriz xrandr.

Ekranın x boyutunun olduğunu 1680ve şu anda açık VP: 1680,1050olduğumuzu bilirsek, çalışma alanının matrisindeki ikinci sütunda olduğumuzu biliyoruz . Ayrıca, toplam matrisin boyutunu da bildiğimizden ( DG: 3360x2100çıkışından da wmctrl -d), mevcut matrisin iki sütun (3360/1680) içerdiğini biliyoruz ve "son" birindeyiz.

resim açıklamasını buraya girin

Komut dosyası daha sonra komutla matrise sütun eklemek için bir talimat gönderir:

dconf write /org/compiz/profiles/unity/plugins/core/hsize <current_viewport_column+1>

İlke budur.

Kaldırılacak çalışma alanları nasıl hesaplanır (örnek sütunlar)

10 saniyede bir, komut dosyası şu anda açık olan tüm pencereleri listeleme komutunu çalıştırır:

wmctrl -lG

Bu bize pencerenin konumu hakkında bilgi verir, şöyle görünür:

0x04604837  0 3425 24   1615 1026 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit

Çıktıda, 3425pencerenin x konumudur. Ancak bu rakam mevcut çalışma alanına (sol taraf) göredir . Çalışma alanı matrisindeki pencerenin (x-wise) mutlak konumunu bilmek için, geçerli görünüm alanı bilgilerinin ilk sayısını (örneğin VP: 1680,1050, çıktısından wmctrl -d) eklememiz gerekir .
Bununla birlikte, basitlik nedenleriyle, görünüm alanında 1,1(üst sol görüş alanı) olduğumuzu varsayalım , böylece pencerenin göreceli konumu mutlak konumuna eşittir .

Ekranın çözünürlüğü olduğundan 1680, pencerenin 3425/1680yuvarlatılmış sütunda olduğunu biliyoruz , çünkü aradaki her şey 3360 and 5040matristeki aynı sütunda (çözünürlüğün 3 ila 4 katı arasında). Doğru hesaplama için kullanırızmath.ceil() ( python)

Komut yana da hep sağda fazladan çalışma alanı olması kuralını uygulayan / aşağıda, biz sütun sayısını ayarlamak gerekir en yüksek değerine:

  • mevcut çalışma kolon + 1
  • üzerinde bir pencere son sütun
  • komut dosyasının başında ayarlandığı gibi varsayılan sütun sayısı

Ve böylece senaryo yapar :)

Satırlar aynı prosedürle yönetilir.


1
Vay be, büyük cevap, zaten yükseltildi =)
AB

@AB Teşekkürler! :) Bu tür şeyler yapmak istiyorum :)
Jacob Vlijm

2
@kernel_panic Wow, teşekkürler :) Aslında bunu bir ppa yapmayı düşünüyorum, bunun gibi: askubuntu.com/a/608295/72216 ve bu: askubuntu.com/a/560734/72216, nihayet (gelecekte) her üçü de bir "workspace_tools" uygulamasında birleştirerek bir seçenek ya da bunun gibi bir şey olarak ayarlanabilir :).
Jacob Vlijm

1
@JacobVlijm Kısalık nedenleriyle eski cevabı buradan silebilirdim: ilgilenenlere düzenleme tarihinde hala görünecek ...
Fabby

1
Rica ederim ... Sohbet odasına ve toksine daha sık uğramalısın! : P
Fabby

6

Teknik olarak, çalışma alanlarını yeniden boyutlandırmak için bir kısayol yoktur, ancak aşağıdaki basit komut dosyasını kullanabilir ve bir kısayola bağlayabilirsiniz.

  1. Aşağıdaki komut dosyasını alın, .local/share/applicationsklasöre veya istediğiniz yere kaydedin .
  2. Komut dosyasının aşağıdakilerle çalıştırılabilir olduğundan emin olun: chmod 755 /path/to/script
  3. Sistem Ayarları -> Klavye -> Kısayollar -> Özel Kısayollar'daki bir kısayola bağlama

Örneğin, bu kurulum var:

resim açıklamasını buraya girin

Komut dosyası bağlı ShiftCtrlAltI. Ama CtrlAltIişe yarayabilir. Senaryoya tam yol veriyorum

/home/xieerqi/resize-workspaces.sh

Ve işte böyle görünmeli:

resim açıklamasını buraya girin

Senaryo

#!/bin/bash
# Author : Serg Kolo
# Date: Sept 19, 2015
# Purpose: simple script to resize 
# unity workspaces
# Written for: http://askubuntu.com/q/676046/295286

HEIGHT=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize)
WIDTH=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize)
NEWSIZE=$(zenity --entry --text="Current desktop set-up $HEIGHT x $WIDTH. Enter new setup in HEIGHTxWIDTH format"  --width=250 | tr 'x' ' ' )

ARRAY=( $NEWSIZE )
[ -z ${ARRAY[1]}  ] && exit
    gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize ${ARRAY[0]}
    gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize ${ARRAY[1]}

Kullanımı çok basit, kurulumu çok basit

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.