Gnome 工作区使用起来非常方便,但我发现它们很难管理。例如:
- 关闭工作区中的最后一个窗口会导致该工作区关闭(如果不是立即关闭,那么很快就会关闭)
- 只能在底部始终存在的空白工作区中插入新窗口。
- 移动工作区需要单独移动每个窗口,并且如果工作区在该预期过程中变空,则该工作区将关闭。
我虽然存在但找不到的功能是:
- 能够抑制工作区的自动关闭,或许可以用关闭(空)工作区命令来代替。
- 能够旋转工作区(因此空的工作区可以放置在任何地方)
- 能够将任何工作空间与其下方相邻的工作空间交换
也许我只是对众所周知的事实一无所知。或者,也许 Gnome 提供了用于这种行为编程的 API。或者也许这是不可能的。
请告知。
附录:选择此问题的答案几天后,我发现了一个相对简单的 API 来实现所述目标。该信息提供以下作为一个新的答案。
答案1
注:回答我自己的问题-同时保留接受的答案,因为它准确反映了 Gnome 状态。
有一个项目工具它以 Ubuntu 18.04 托管包的形式提供。它提供对桌面、窗口及其关系的读写访问权限。(还有许多其他我没有使用的功能。)
使用此包,编写所需功能非常简单。直接 CLI 没什么用,但将它们链接到 Ubuntu 自定义快捷方式意味着我能够使用按键上下移动、选择和移动单个桌面,同时使用 Gnomes 标准鸟瞰视图查看所有桌面。
Gnome 标准鸟瞰图可以通过“Super+a、Super+a”获得,然后将鼠标移动到屏幕右侧,此时所有桌面将以垂直阵列出现。
为了避免干扰 Gnome,必须关闭 Gnome 的动态桌面并使用静态桌面设置。使用静态桌面在选定的答案中被建议。
我的完整代码以要点形式提供。
例如,此代码摘录用于交换桌面:
swaprelative(){
nbr=$1
ndt=$(xdotool get_num_desktops)
if [[ $ndt -lt 2 ]] ; then return 0 ; fi
adt=$(xdotool get_desktop)
bdt=$((( adt + ndt + nbr) % ndt ))
if [[ $bdt == $adt ]] ; then return 0; fi
if [[ $bdt -lt 0 ]] ; then
echo "relative neighbor value $nbr is out of bounds"
return 1;
fi
xdotool search '.*' | while read w ; do
if ! window_has_desktop $w ; then continue; fi
wdt=$(xdotool get_desktop_for_window $w)
if [[ $wdt -eq $adt ]] ; then
xdotool set_desktop_for_window $w $bdt
elif [[ $wdt -eq $bdt ]] ; then
xdotool set_desktop_for_window $w $adt
fi
done
xdotool set_desktop $bdt
}
必须强调的是,编码如此简单是由于项目的强大xdotool
。该项目不依赖于侏儒而是与侏儒访问相同的X原语。它可能可以在许多不同的窗口管理器中使用,只要注意避免 WM 和 xdotool 之间的相互干扰(例如,关闭 Gnome 中的动态桌面)。
答案2
在 GNOME Shell 中,默认情况下,无法移动整个工作区及其包含的应用程序。虽然这是一个强大的功能,但我不知道 Linux 桌面环境是否具有此功能。
关于 API,GNOME Shell 具有扩展机制。这实际上根本不是一个 API。它本质上是系统中的一个“(潜在的安全)漏洞”,开发人员可以在此注入自己的 javascript 代码来更改 Shell 的行为。现有的许多 GNOME Shell 扩展说明了可以做什么,在许多情况下取得了巨大的成功。
就您期望的功能而言,情况如下:
能够抑制工作区的自动关闭,或许可以用关闭(空)工作区命令来代替。
默认情况下,GNOME Shell 带有动态工作区。但是,可以关闭此功能,并设置多个固定工作区。要实现此功能,请安装 (GNOME) Tweaks,然后在“工作区”选项卡上选择“静态工作区”如图所示。
能够旋转工作区(因此空的工作区可以放置在任何地方)
不幸的是,无法更改工作区(及其内容)的顺序。您只能移动应用程序。当然,对于静态工作区,空工作区仍然是空的。
能够将任何工作空间与其下方相邻的工作空间交换
这取决于你的意思。如果你的意思是再次更改工作区的顺序,那么请参阅上面的要点。如果你的意思是快速切换工作区,那么这可以通过快捷键Ctrl+ Alt+ Up/Down或Super+ PgDn/轻松实现PgUp。
切换到静态工作区可以让您更好地控制什么在哪里,但限制是您不能移动整个工作区。
使用静态工作空间增强工作流程的一些技巧
您可以安装工作区指示器GNOME Shell 扩展程序可指示您当前所在的工作区。此扩展程序允许您根据需要重命名工作区(例如,使用“1 - 浏览”而不是“1”)。
您可以配置热键以快速切换到特定工作区或移动应用程序,例如:
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Super>4']" gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['<Super><Shift>4']"
这些命令将设置一个热键Super+ 4,立即带您进入 WS 4,以及一个热键Super+ Shift+ 4,将应用程序移动到 WS 4(与在平铺窗口管理器 i3 中的工作方式非常相似)。
答案3
能够将任何工作空间与其下方相邻的工作空间交换
有一个扩展可让您重新排序与 Gnome 3.38 兼容的工作区:Reorder Workspaces
https://extensions.gnome.org/extension/3685/reorder-workspaces/
请注意,快捷方式仅适用于工作区概览。我已打开一个问题,以便从窗口视图中实现此操作:https://github.com/jeremiahmegel/gnome-reorder-workspaces/issues/5