如何使屏幕各个角落的窗口大小相同?

如何使屏幕各个角落的窗口大小相同?

我最近看到这个答案这是一个很好的问题,我想知道,这在装有 GNOME 3.18 和 GDM 的 Ubuntu GNOME 15.10 上是否也可以实现,以及在 Compiz 上是否也可以实现,正如该问题的答案所示?

但是键盘快捷键对我来说并不是那么重要,我只是希望能够将窗口拖到角落,并让它们在我释放鼠标时自动调整到这些角落而不是侧面。

答案1

Gnome Shell 可以使用以下方式更改Gnome 扩展- 我认为此扩展将为您工作:

通过将窗口拖放到适当位置即可完成此操作,它将显示橙色高亮(似乎与主题不匹配 :/ )。您可以在设置中更改窗口之间的间隙:

在此处输入图片描述

虽然目前此扩展不适用于 GNOME 3.18,所以你必须尝试一下这个解决方法

答案2

即将发布这个(但问题略有不同),下面的脚本执行您所描述的操作,如果使用参数运行它

python3 /path/to/script.py 2 2

但是,如果有超过四个窗口(或超过网格的单元格,如果您使用除 之外的其他参数2 2),则脚本只会放置四个最老的网格中的窗口。

它能做什么

当打开四个窗口时,随机放置在屏幕上:

在此处输入图片描述

运行脚本会将它们排列在网格中:

在此处输入图片描述

剧本

#!/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. 通过打开四个窗口(至少一个终端窗口来运行命令)进行测试运行,然后运行以下命令:

    python3 /path/to/twobytwo.py 2 2
    

    窗户应该移动到 4 个网格中,如第二张图所示

  4. 如果一切正常,请将其添加到快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:

    python3 /path/to/twobytwo.py 2 2
    

笔记)

  • 在头部部分,有一个部分:

    left_margin = 0
    

    我将其设置为零,因为 gnome 没有左侧启动器。对于 Unity,该值应(至少)为65,具体取决于启动器的设置宽度。

  • 如上所述,脚本本身将四个最老的窗口。这意味着如果您需要将更多窗口放置在同一个网格中,则脚本需要进行编辑。如果是,请提及。

相关内容