我可以设置一个键绑定来将窗口的大小调整为选定方向的一半大小吗?

使用Ubuntu 14.04,我正在寻找一个40“4k显示器,并且已经找到了如何将窗口调整到屏幕的四分之一部分,但我希望能够根据需要进一步调整它们的大小。例如,我想键盘绑定默认compiz以进入全屏幕窗口并将其放在屏幕的左上角,但如果再次按下,则进一步缩小到屏幕的左上角八分之一,或者将窗口放在右下角的四分之一处屏幕的顶部四分之一(占据屏幕的垂直和水平方向)。这个function隐藏在compiz或我不熟悉的任何其他应用程序中吗?

下面的脚本可用作14.04中“resize到四分之一”选项的附加function。 它可以使用参数运行:“left”,“right”,“up”,“down”,以进一步减少8个季度。

它能做什么

如果您将窗口移动到屏幕的四分之一处:

在此处输入图像描述

该脚本会将窗口切成两半,可以是左,右,上,下半部分,具体取决于您运行它的参数(见下文)。

如何使用

  • 该脚本使用wmctrl ,默认情况下不在您的系统上:

     sudo apt-get install wmctrl 
  • 将下面的脚本复制到一个空文件中,将其另存为~/bin目录下的organize_w 。 使脚本可执行。 可能你仍然需要创建目录~/bin 。 它的优点是您可以仅通过脚本的名称来运行脚本:

  • 向自定义键盘快捷键添加四个命令。 打开系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。 向键组合添加四个命令。
    在我的系统上,我发现还有四个非常合适的快捷方式:我建议在这些组合键下添加命令:

     organize_w left 

    Shift + Ctrl + Numpad <

    影响:

    在此处输入图像描述

     organize_w right 

    Shift + Ctrl + Numpad >

    影响:

    在此处输入图像描述

     organize_w up 

    Shift + Ctrl + Numpad ^

    影响:

    在此处输入图像描述

     organize_w down 

    Shift + Ctrl + Numpad 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上将wndows调整为一半/四分之一或八分之一(在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上 )