xdotool windows 平铺 3 x 3 网格

xdotool windows 平铺 3 x 3 网格

我想做的事?

我希望能够单击某个窗口(终端窗口、任何软件窗口等...)来激活它,然后单击快捷键,该快捷键将调整大小并将活动窗口移动到屏幕上的指定大小和 xy 坐标。我将打开几个窗口(大约 20 个),并且我想非常轻松地将它们拆分为每个工作环境 3 x 3 的网格,而不是手动调整它们。

到目前为止我尝试过

我在网上搜索过,发现该软件包xdotool提供了实现该功能的功能。我试图分配 1 到 9 键(因为我想要一个 3 x 3 网格)以自动调整每个选定窗口在给定工作环境中的相应位置。下面显示了一个脚本,它部分实现了我想要做的事情。下面的脚本基于这里,仅在提供参数时调整终端窗口(因为脚本在那里运行)。我如何更改此脚本以使其连续运行,以便当我选择任何窗口时,我可以按 1 到 9 之间的键,活动窗口将自动调整大小并移动?

#!/bin/bash

# grabbing screen width and height
SIZE=`xdpyinfo | awk '/dimensions/{print $2}'`
SW=`echo $SIZE | cut -f1 -dx`
SH=`echo $SIZE | cut -f2 -dx`

# function that changes a window's position and size
function set_win {
    # args: pos_x, pos_y size_x, size_y
    # don't move Desktop
    if [ "$(xdotool getactivewindow getwindowname)" != "Desktop" ]; then
        xdotool getactivewindow windowsize $3 $4
        xdotool getactivewindow windowmove $1 $2
    fi
}

case "$1" in
    1) set_win 0 0 $((SW/3)) $((SH/3)) ;;
    2) set_win $((SW/3)) 0 $((SW/3)) $((SH/3)) ;;
    3) set_win $((2*SW/3)) 0 $((SW/3)) $((SH/3)) ;;
    
    4) set_win 0 $((SH/3)) $((SW/3)) $((SH/3)) ;;
    5) set_win $((SW/3)) $((SH/3)) $((SW/3)) $((SH/3)) ;;
    6) set_win $((2*SW/3)) $((SH/3)) $((SW/3)) $((SH/3)) ;;
    
    7) set_win 0 $((2*SH/3)) $((SW/3)) $((SH/3)) ;;
    8) set_win $((SW/3)) $((2*SH/3)) $((SW/3)) $((SH/3)) ;;
    9) set_win $((2*SW/3)) $((2*SH/3)) $((SW/3)) $((SH/3)) ;;

esac

答案1

只要您在 Xorg 上运行,该脚本就可以正常工作。如果您使用 Ubuntu 22.04,则您正在运行 Wayland。以前的版本默认使用 Xorg。如果您愿意,您可以轻松切换回 Xorg。如果您不想运行 Xorg 而不是 Wayland,则该脚本将不起作用。

一旦你进入 Xorg,脚本应该可以正常工作。但是,请注意,脚本需要争论。该参数是 1 到 9 之间的数字,它告诉脚本要创建哪个图块。参见循环case。在 中case "$1" in,“$1”是您提供给脚本的第一个参数的占位符。因此,例如,

tile_window 3

将调整窗口大小并将其放置在 9x9 网格最右侧列的第一行中。这假设您的脚本名为tile_window,并且它被放置在搜索目录中PATH,搜索目录是系统搜索可执行文件的目录列表。~/.local/bin是一个很好的位置,尽管您也可以使用~/bin。创建目录:它可能尚不存在于您的系统中。然后注销并重新登录 - 它将自动包含在搜索中PATH

分配快捷键的命令将是

tile_window 1
tile_window 2

...等等,您希望1通过进行分配9

您还可以指定可执行文件的完整路径为

/home/alourenco/.local/share/tile_window 1

假设是您的登录名。在终端中可以使用的alourenco快捷方式符号,在分配给快捷键的命令中不起作用,因此您需要完整地写出路径。~/home/alourenco

答案2

我最终使用下面的方法解决了我的问题,但请参见用户@vanadium 发布的有关这样做的危险的评论。

在用户@vanadium 和这个的帮助下邮政,我设法找到了一个解决方案,虽然不是很优雅,但它满足了我的要求。我创建了 9 个脚本(每个键一个),如下所示(下面的示例显示了键 1 绑定,它调整大小并将活动窗口移动到屏幕的左上角):

#!/bin/bash

# grabbing screen width and height
SIZE=`xdpyinfo | awk '/dimensions/{print $2}'`
SW=`echo $SIZE | cut -f1 -dx`
SH=`echo $SIZE | cut -f2 -dx`

# function that changes a window's position and size
function set_win {
    # args: pos_x, pos_y size_x, size_y
    # don't move Desktop
    if [ "$(xdotool getactivewindow getwindowname)" != "Desktop" ]; then
        xdotool getactivewindow windowsize $3 $4
        xdotool getactivewindow windowmove $1 $2
    fi
}

set_win 0 0 $((SW/3)) $((SH/3)) 

然后我将所有脚本复制到/bin/,将工作目录更改为该文件夹,并对每个脚本运行以下命令(再次,脚本示例,此处名为tilling_1.sh,键绑定为键 1):

sudo touch tilling_1.sh
sudo chmod +x tilling_1.sh

然后,我进入 Ubuntu 的键盘菜单,创建一个自定义快捷键并给出命令的名称,将脚本的名称放在“命令”字段中并分配相应的键。

相关内容