我可以使用键盘一次移动/调整窗口一个像素吗?

Wil*_*n F 4 keyboard window-manager shortcut-keys

在 Windows 中(至少从 XP 开始,可能以前),如果您使用键盘移动或调整窗口大小,则可以通过使用 Ctrl 键和箭头组合获得非常精确的位置和大小 - 甚至比使用鼠标更准确键(在从窗口菜单 [Alt+Space]调用MoveResize功能之后)将窗口边框一次移动一个像素。

有没有办法在 Ubuntu 中做同样(或类似)的事情?

Jac*_*ijm 5

移动/调整窗口大小 1px

假设您使用 Unity,下面的脚本将窗口移动或调整大小 1 像素。该脚本可以使用 8 个不同的参数运行。根据您要使用的移动/重新调整大小选项,您可以将命令添加到快捷键组合中。下面是选项和相应命令的概述:

在此处输入图片说明


例外/限制

有一些限制:

  • gnome-terminal窗口只能逐步调整大小。因此,将窗口大小增加/减少 1px 不适用于gnome-terminal.
  • 要移动/重新调整大小的窗口需要距离 Unity 启动器和顶部面板至少有几个像素。

如何使用

  • 首先安装wmctrl,它是获取窗口几何形状和移动窗口所需要的。

    sudo apt-get install wmctrl
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建一个目录~/bin(所以在你的主目录中)

  • 将下面的脚本复制到一个空文件中,另存为move_window(无扩展名)
  • 使其可执行(右键单击文件 > 属性 > 权限(选项卡),勾选“允许执行”)

    要进行测试,请打开终端窗口并随后运行:

    move_window l
    move_window r
    move_window u
    move_window d
    
    Run Code Online (Sandbox Code Playgroud)

    由于终端窗口是最前面的,它应该向左/右/上/下移动 1px。

    (如前所述,调整大小不适用于gnome-terminal

  • 如果正常,将命令添加到快捷键;
    选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。单击“+”并将命令添加到四个不同的快捷键组合中。这可能很棘手,因为您提到的命令可能已被占用。什么对我的系统有效:

    • Shift+ Ctrl+arrow key left
    • Shift+ Ctrl+arrow key right
    • Shift+ Ctrl+arrow key up
    • Shift+ Ctrl+arrow key down

    为移动动作。
    对于调整大小操作,您必须尝试其他组合。

剧本

sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)

笔记

wmctrl 报告窗口几何形状的方式和wmctrl 设置窗口几何形状的方式略有不同。在第一种情况下,它从全屏(分辨率)计算,在第二种情况下仅从工作区域 (??) 计算。即便如此,脚本也必须垂直“校准”4 像素,对此我没有找到令人满意的解释。好消息是,在不同的计算机上,我发现偏差没有差异。

如果在您的情况下窗口意外跳转,请发表评论。


解释

这个怎么运作

  1. 在以下帮助下查找最前面的窗口xprop

    xprop -root
    
    Run Code Online (Sandbox Code Playgroud)

    在(广泛的)输出中的某处,有这样一行:

    _NET_ACTIVE_WINDOW(WINDOW): window id # 0x4600a8d
    
    Run Code Online (Sandbox Code Playgroud)

    从我们的窗口-ID可以被解析:0x4600a8d。由于格式与 有点不同wmctrl,我们需要在第三个位置添加一个零:0x04200085

  2. 窗口 id 用于在 的输出中查找窗口及其当前几何数据wmctrl -lG。一旦我们有了正确的行,我们在窗口上的数据看起来像:

    0x04200085  0 322  52   823  998  <computer_name> <window_name> 
    
    Run Code Online (Sandbox Code Playgroud)

    其中第 2、3、4、5 列随后是:

    • 窗口左上角的 x 坐标
    • y坐标
    • 窗口的宽度
    • 窗户的高度
  3. 通过操作这些图形,我们可以使用以下命令移动/调整窗口大小:(
    例如将窗口向右移动 1 像素,将“322”更改为“323”)

    wmctrl -ir 0x04200085 -e 0,323,52,823,998
    
    Run Code Online (Sandbox Code Playgroud)

有一些复杂情况需要处理,但这基本上就是它的工作原理。