web-dev-qa-db-ja.com

画面の隅に同じサイズのウィンドウを作成する方法は?

最近、素晴らしい質問に対する この回答 を見ましたが、これはUbuntu GNOME 15.10とGNOME 3.18およびGDMで可能ですが、その質問への回答が示すようにCompizでも可能ですか?

しかし、キーボードショートカットはそれほど重要ではありません。ウィンドウを角にドラッグして、マウスを離したときに横ではなく角に自動的にサイズ変更できるようにしたいだけです。

3
user364819

this one の複製を投稿するというエッジで(ただし質問は少し異なります)、以下のスクリプトはあなたが説明することを行いますif引数を指定して実行します

python3 /path/to/script.py 2 2

ただし、ウィンドウが4つ以上ある場合(またはグリッドのセルを超える場合、2 2以外の引数を使用する場合)、スクリプトは4つのoldestグリッド内のウィンドウ。

何をする

4つのウィンドウが開かれると、画面にランダムに配置されます。

enter image description here

スクリプトを実行すると、グリッドに配置されます:

enter image description here

スクリプト

#!/usr/bin/env python3
import subprocess
import sys

#--- set your preferences below: padding between windows, margin(s)
cols = int(sys.argv[1]); rows = int(sys.argv[2]); padding = 10; left_margin = 0; top_margin = 30
#---

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_res():
    xr = get("xrandr").split(); pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def check_window(w_id):
    w_type = get("xprop -id "+w_id)
    if " _NET_WM_WINDOW_TYPE_NORMAL" in w_type:
        return True
    else:
        return False

# get resolution
res = get_res()
# define (calculate) the area to divide
area_h = res[0] - left_margin; area_v = res[1] - top_margin
# create a list of calculated coordinates
x_coords = [int(left_margin+area_h/cols*n) for n in range(cols)]
y_coords = [int(top_margin+area_v/rows*n) for n in range(rows)]
coords = sum([[(cx, cy) for cx in x_coords] for cy in y_coords], [])
# calculate the corresponding window size, given the padding, margins, columns and rows
w_size = [str(int(area_h/cols - padding)), str(int(area_v/rows - padding))]
# find windows of the application, identified by their pid
wlist = [w.split()[0] for w in get("wmctrl -lp").splitlines()]
w_list = [w for w in wlist if check_window(w) == True][:cols*rows]
print(w_list)

# remove possibly maximization, move the windows
for n, w in enumerate(w_list):
    data = (",").join([str(item) for item in coords[n]])+","+(",").join(w_size)
    cmd1 = "wmctrl -ir "+w+" -b remove,maximized_horz"
    cmd2 = "wmctrl -ir "+w+" -b remove,maximized_vert"
    cmd3 = "wmctrl -ir "+w+" -e 0,"+data
    for cmd in [cmd1, cmd2, cmd3]:
        subprocess.Popen(["/bin/bash", "-c", cmd])

使い方

  1. スクリプトにはxdotoolwmctrlの両方が必要です。

    Sudo apt-get install xdotool wmctrl
    
  2. スクリプトを空のファイルにコピーし、twobytwo.pyとして保存します

  3. 4つのウィンドウ(コマンドを実行するための少なくとも1つのターミナルウィンドウ)を開いてテストを実行し、コマンドを実行します。

    python3 /path/to/twobytwo.py 2 2
    

    2番目の画像のように、ウィンドウは4のグリッドに移動するはずです

  4. すべてが正常に機能する場合は、ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、コマンドを追加します。

    python3 /path/to/twobytwo.py 2 2
    

ノート)

  • ヘッドセクションにはセクションがあります。

    left_margin = 0
    

    Gnomeの左側にはランチャーがないため、これをゼロに設定します。 Unityの場合、これはランチャーの設定幅に応じて、(少なくとも)65になります。

  • 前述のとおり、このスクリプトは、4つのoldestウィンドウをグリッドします。つまり、同じグリッドにさらにウィンドウを配置する必要がある場合、スクリプトを編集する必要があります。その場合は言及してください。
1
Jacob Vlijm

Gnomeシェルは Gnome Extensions を使用して変更できます- この拡張機能 が機能すると思います:

これは、ウィンドウを所定の位置にドラッグアンドドロップすることで行われ、オレンジ色のハイライトが表示されます(テーマに一致しないようです:/)。設定でウィンドウ間のギャップを変更できます:

enter image description here

現在、この拡張機能はGNOME 3.18では使用できませんが、 この回避策を行ってください にする必要があります。

5
Wilf