使用 Ubuntu 14.04,我正在寻找一款 40 英寸 4k 显示器,并找到了如何将窗口大小调整为屏幕的四分之一,但我希望能够根据需要进一步调整它们的大小。例如,我想将默认 compiz 键绑定为全屏窗口并将其放在屏幕左上角的四分之一,但如果再次按下,则将其进一步缩小到屏幕左上角的八分之一,或将窗口放在屏幕顶部四分之一的右下角四分之一(垂直和水平占据屏幕的八分之一)。此功能是否隐藏在 compiz 或我不熟悉的任何其他应用程序中?
答案1
下面的脚本可以用作 14.04 版中“resize-to-quarter”选项的附加功能。可以使用以下参数运行它:“left”、“right”、“up”、“down”,以进一步将四分之一切成八份。
它能做什么
如果您将窗口移动到屏幕的四分之一处:
该脚本会将窗口切成两半,左半、右半、上半或下半,具体取决于运行它时使用的参数(见下文)。
如何使用
该脚本使用
wmctrl
,这在您的系统上不是默认的:sudo apt-get install wmctrl
将下面的脚本复制到一个空文件中,将其保存为
organize_w
目录~/bin
。使脚本可执行。可能您仍需要创建目录~/bin
。它的优点是您只需通过脚本名称即可运行脚本:将四个命令添加到自定义键盘快捷键。打开系统设置 > “键盘” > “快捷键” > “自定义快捷键”。将四个命令添加到组合键。
在我的系统上,我发现仍然有四个非常合适的快捷键可用:我建议添加这些组合键下的命令:organize_w left
Shift+ Ctrl+数字键盘<
影响:
organize_w right
Shift+ Ctrl+数字键盘>
影响:
organize_w up
Shift+ Ctrl+数字键盘^
影响:
organize_w down
Shift+ Ctrl+数字键盘v
影响:
这样,您只需按几个键就可以像下面这样排列窗口:
剧本:
#!/usr/bin/env python3
import subprocess
import sys
arg = sys.argv[1]
WA_correction = 28
def get(command):
return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
def execute(command):
subprocess.Popen(["/bin/bash", "-c", command])
xprop_data = get("xprop -root").split()
w_id = xprop_data[xprop_data.index("_NET_ACTIVE_WINDOW(WINDOW):")+4].replace(",", "")
frontmost = w_id[:2]+"0"+w_id[2:]
w_data = [l for l in get("wmctrl -lG").splitlines() if frontmost in l][0].split()
new_G = w_data[2:6]
new_G[1] = str(int(int(new_G[1])-WA_correction))
xy_corr = lambda x: -10 if int(x) < 100 else 0
if arg == "left":
new_G[2] = str(int(int(new_G[2])/2 + xy_corr(new_G[0])))
new_G[3] = str(int(int(new_G[3]) + xy_corr(new_G[1])))
elif arg == "right":
new_G[0] = str(int(int(new_G[0])+int(new_G[2])/2))
new_G[2] = str(int(int(new_G[2])/2))
new_G[3] = str(int(int(new_G[3]) + xy_corr(new_G[1])))
elif arg == "up":
new_G[2] = str(int(new_G[2]) + xy_corr(new_G[0]))
new_G[3] = str(int(int(new_G[3])/2 + xy_corr(new_G[1])))
elif arg == "down":
new_G[1] = str(int(int(new_G[1]) + int(new_G[3])/2))
new_G[2] = str(int(new_G[2]) + xy_corr(new_G[0]))
new_G[3] = str(int(int(new_G[3])/2))
execute("wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz")
execute("wmctrl -ir "+frontmost+" -e 0,"+(",").join(new_G))
编辑:
XFCE 版本
经过一些小的改动,该脚本还可用于在 XFCE 上将窗口大小调整为原来的一半 / 四分之一或八分之一(在 14.04 上测试)。
与 Unity 版本使用方式完全相同:
#!/usr/bin/env python3
import subprocess
import sys
arg = sys.argv[1]
WA_correction = 48
def get(command):
return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
def execute(command):
subprocess.Popen(["/bin/bash", "-c", command])
xprop_data = get("xprop -root").split()
w_id = xprop_data[xprop_data.index("_NET_ACTIVE_WINDOW(WINDOW):")+4].replace(",", "")
frontmost = w_id[:2]+"0"+w_id[2:]
w_data = [l for l in get("wmctrl -lG").splitlines() if frontmost in l][0].split()
new_G = w_data[2:6]
new_G[1] = str(int(int(new_G[1])-WA_correction))
if arg == "left":
new_G[2] = str(int(int(new_G[2])/2))
elif arg == "right":
new_G[0] = str(int(int(new_G[0])+int(new_G[2])/2))
new_G[2] = str(int(int(new_G[2])/2))
elif arg == "up":
new_G[3] = str(int(int(new_G[3])/2))
elif arg == "down":
new_G[1] = str(int(int(new_G[1]) + int(new_G[3])/2))
new_G[3] = str(int(int(new_G[3])/2))
execute("wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz")
execute("wmctrl -ir "+frontmost+" -e 0,"+(",").join(new_G))
(XFCE 版本也发布在gist.gisthub)