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 tweak
vb.) Varsayalım .
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 tweak
vb.) Varsayalım .
Yanıtlar:
Ç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:
Son sütuna veya satıra gelirseniz, ek görünüm alanları eklenir:
Ç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:
#!/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)
add_space.py
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
Komut ile test edin:
python3 /path/to/add_space.py
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`
Her zaman olduğu gibi, komut dosyası son derece "meyve suyunda az" ve işlemcinize fark edilir bir yük eklemiyor.
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,1050
bize 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 1680
geniş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 1680
ve şu anda açık VP: 1680,1050
olduğ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.
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, 3425
pencerenin 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/1680
yuvarlatılmış sütunda olduğunu biliyoruz , çünkü aradaki her şey 3360 and 5040
matristeki 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:
Ve böylece senaryo yapar :)
Satırlar aynı prosedürle yönetilir.
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.
.local/share/applications
klasöre veya istediğiniz yere kaydedin .chmod 755 /path/to/script
Örneğin, bu kurulum var:
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:
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