如何在屏幕角落制作大小相等的窗口?

用户名

我最近看到了一个很好的问题的答案,我想知道,是否可以在具有GNOME 3.18和GDM的Ubuntu GNOME 15.10上以及在Compiz上解决该问题?

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

雅各布·弗利姆(Jacob Vlijm)

在发布的副本的边缘这一个(但问题略有不同),下面的脚本做你的描述,如果你用的参数运行

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,具体取决于启动器的设置宽度。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在角落制作Flexbox项目并做出响应?

如何在pygame游戏窗口的角落添加健康分数

如何使用组合键使窗口在角落显示 1/4 的屏幕?

如何在XAML中更改窗口大小时使具有相等空间(宽度和高度)的内容重新调整大小?

如何制作成比例相等大小的随机采样训练集?

css - 如何在调整窗口大小时连续制作 flex 项目 3 并保持 1:1 的比例

如何在不增加页面大小的情况下使元素卡在页面的角落?

如何在不让 UIView 移动到角落的情况下使用大小约束?

即使我在 QT 中调整大小,如何在 Windows 的角落设置 QLabel?

如何在其他屏幕上方制作屏幕或组件

如何在GNU屏幕中移动窗口

如何在屏幕中央打开终端窗口?

如何在D3.js中根据屏幕/浏览器大小制作强制布局图

如何在运行时根据屏幕分辨率自动调整表单窗口的大小(设计期间创建的窗口大小太大)

将窗口移到角落并在gnome shell中调整大小

如何制作带有自动换行大小的Swing弹出窗口?

制作一个可以调整到屏幕的pygame可调整大小的窗口

如何更改拆分屏幕emacs窗口的大小?

使用GhostDriver时如何设置屏幕/窗口大小

CSS:如何根据屏幕/窗口大小设置宽度和高度?

ReactJS:调整窗口大小时如何停止屏幕刷新状态?

如何使用硒捕获特定大小窗口的屏幕截图?

如何使Gridview大小相等

如何在点击时调整窗口大小

如何在Vala中调整窗口大小?

如何在颤动的角落添加图像?

如何在图像外找到遗漏的角落

如何在ImageView的不同角落对齐textLabel

如何在Android中制作侧滚动屏幕?