首页 > 解决方案 > 如何在 GNOME 中获得活动窗口的监视器?

问题描述

我对 GNOME 扩展开发非常陌生,并且由于 API 的文档严重缺乏(或者我的 Internet 可能被秘密审查),我很难使用它。我首先修改了一个现有的扩展,以便更容易绕过它。

问题是,我可以使用 获取活动窗口global.display.focus_window,还可以使用 获取连接到计算机的监视器列表Main.layoutManager.monitors。现在,我想做的是找出获得的窗口位于哪个监视器上(这样我就可以将顶部面板移动到该监视器,因为这可能意味着我目前正在使用该监视器)。我尝试了各种方法,例如 .screen、.monitor 等,但没有成功。我对此没有 IntelliSense 完成,我试图猜测成员可能是什么,因为我似乎找不到任何文档。

我很欣赏 GNOME 比我以前使用的更可定制的事实(Unity,它根本不提供定制),但我不知道如何使用它并且资源稀缺。我尝试查看源代码,但我不熟悉它的组织方式,我找不到我需要的成员(如果存在)被声明的代码的相关部分。

我正在编写 .js 文件,所以我想我需要一些 JavaScript 代码。

非常感谢你。

标签: javascriptubuntugnomegnome-3gnome-shell-extensions

解决方案


虽然 Gnome Shell 的大部分用户可见部分都是用 JavaScript 编写的,但它们通常只是底层 C 库的绑定。如果您正在使用 Windows、监视器和屏幕,那么您将需要参考 Mutter 文档,可能还需要参考 Shell 文档:

global对象上有一个名为screen(so )的属性,global.screen它无疑是 a MetaScreen,它具有函数、get_n_monitors()以及和其他函数。另一方面,它包含一个调用的函数,该函数返回一个整数。我收集到监视器由整数引用,该整数被传递给 and 的各种函数,因为在 Mutter 文档中似乎没有一个对象。get_primary_monitor()get_current_monitor()MetaWindowget_monitor()MetaScreenMetaWindow

大多数与您想做的相关的 JavaScript 似乎都在layout.js中,它可能有比我能给您更好的例子来说明 Mutter 在 Gnome Shell 中的使用方式。它还包括一个Monitor类,它似乎只是监视器索引的 JS 包装器。该类用于LayoutManager类中(即实例的定义Main.layoutManager)。

关于文档的说明

最初,没有“正确”的 gnome-shell 文档的理由是(内部 JavaScript)API 非常不稳定。交易是,您没有获得稳定的 API,但您可以使用您将要编写的相同语言阅读源代码。在某些方面这是有道理的,因为您可以修改prototype活动对象和猴子- 随心所欲地打补丁。

API 已经稳定了很多,但还没有人真正加紧编写脚本来自动记录它。我最好的建议是为 Mutter、Shell 和 St 文档添加书签,并使用 Github 或 GitLab 的搜索让事情变得更容易。

然而,有关于 Gnome API 的文档以及一些值得一读的内置模块:


推荐阅读