私は4つのワークスペースを使用しており、偶然にもっと必要なものがあると仮定します、自動化されたプロセスがありますか、不可能な場合は(インストールUbuntu tweak
などではなく)偶発的にワークスペースを追加する簡単な方法があります。
私は4つのワークスペースを使用しており、偶然にもっと必要なものがあると仮定します、自動化されたプロセスがありますか、不可能な場合は(インストールUbuntu tweak
などではなく)偶発的にワークスペースを追加する簡単な方法があります。
回答:
ワークスペースマトリックスの最後の列または行を入力した場合にワークスペースを自動的に追加する(the)バックラウンドスクリプトのバージョンの下。
これがどのように機能するかです:
最後の列または行に到達すると、追加のビューポートが追加されます。
ワークスペースは、5〜10秒間使用されていない場合や、それには窓がない、追加のワークスペースが再び削除されます。ただし、常に現在のビューポートの右に1行追加し、右に1列追加します。
#!/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
スクリプトのヘッドセクションで、他の設定(ワークスペースの最大数、デフォルトのマトリックス(2x2など))が必要な場合は、行を編集します。
# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10
次のコマンドでテスト実行します:
python3 /path/to/add_space.py
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します。[ダッシュ]> [スタートアップアプリケーション]> [コマンドを追加]:
/bin/bash -c "sleep 15 && python3 /path/to/add_space.py`
いつものように、このスクリプトは非常に「低負荷」であり、プロセッサーに目立った負荷を加えません。
以下の話は少し複雑で、主にコーディングではなく概念と手順に関する説明です。興味がある場合にのみ読んでください。
必要なワークスペースの計算方法(例の列)
出力はwmctrl -d
次のようになります。
0 * DG: 3360x2100 VP: 1680,1050 WA: 65,24 1615x1026 N/A
出力でVP: 1680,1050
は、スパニングワークスペース(すべてのビューポートのマトリックス)のどこにいるかについての情報を提供します。この情報は、画面の解像度も持っている場合にのみ役立ちます。たとえば、画面の1680
幅が2(おそらくないがまだ)または1回である可能性があるためです。
幸いなことに、コマンドから画面の解像度を解析できますxrandr
。
次に、画面のxサイズがわかってい1680
てVP: 1680,1050
、現在オンになっている場合、ワークスペースのマトリックスの2列目にあることがわかります。合計マトリックスのサイズ(ものDG: 3360x2100
出力からwmctrl -d
)もわかっているため、現在のマトリックスには2つの列(3360/1680)が含まれ、「最後の」列にあることがわかります。
スクリプトは、コマンドによってマトリックスに列を追加する指示を送信します。
dconf write /org/compiz/profiles/unity/plugins/core/hsize <current_viewport_column+1>
これが原則です。
削除するワークスペースの計算方法(列の例)
10秒に1回、スクリプトはコマンドを実行して、現在開いているすべてのウィンドウを一覧表示します。
wmctrl -lG
これにより、次のようなウィンドウの位置に関する情報も得られます。
0x04604837 0 3425 24 1615 1026 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
出力で3425
は、ウィンドウのx位置です。ただし、この図は現在のワークスペース(左側)を基準にしています。ワークスペースマトリックス内のウィンドウの絶対位置(x方向)を知るには、現在のビューポート情報の最初の数を追加する必要があります(たとえばVP: 1680,1050
、の出力からwmctrl -d
)。
ただし、簡単にするために、ビューポート1,1
(左上のビューポート)にいると仮定します。そのため、ウィンドウの相対位置は絶対位置に等しくなります。
画面の解像度は1680
なので3425/1680
、間3360 and 5040
はすべてマトリックスの同じ列(解像度の3倍から4倍)にあるため、ウィンドウはcolumn に切り上げられます。適切な計算のためにmath.ceil()
(python
)を使用します
また、スクリプトはルールを実行して常に右/下に追加のワークスペースを配置するため、列の数を次の最大値に設定する必要があります。
そして、スクリプトは:)
行はまったく同じ手順で管理されます。
技術的には、ワークスペースのサイズを変更するためのショートカットはありませんが、以下の簡単なスクリプトを使用してショートカットにバインドできます。
.local/share/applications
フォルダに保存するか、任意の場所に保存します。chmod 755 /path/to/script
たとえば、私はこのセットアップを持っています:
スクリプトはにバインドされていShiftCtrlAltIます。しかし、CtrlAltIうまくいく可能性もあります。スクリプトの完全なパスを指定します
/home/xieerqi/resize-workspaces.sh
そして、次のようになります。
脚本
#!/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]}
非常に使いやすく、セットアップが非常に簡単