javascript - 如何在 GNOME 中获得活动窗口的监视器?
问题描述
我对 GNOME 扩展开发非常陌生,并且由于 API 的文档严重缺乏(或者我的 Internet 可能被秘密审查),我很难使用它。我首先修改了一个现有的扩展,以便更容易绕过它。
问题是,我可以使用 获取活动窗口global.display.focus_window
,还可以使用 获取连接到计算机的监视器列表Main.layoutManager.monitors
。现在,我想做的是找出获得的窗口位于哪个监视器上(这样我就可以将顶部面板移动到该监视器,因为这可能意味着我目前正在使用该监视器)。我尝试了各种方法,例如 .screen、.monitor 等,但没有成功。我对此没有 IntelliSense 完成,我试图猜测成员可能是什么,因为我似乎找不到任何文档。
我很欣赏 GNOME 比我以前使用的更可定制的事实(Unity,它根本不提供定制),但我不知道如何使用它并且资源稀缺。我尝试查看源代码,但我不熟悉它的组织方式,我找不到我需要的成员(如果存在)被声明的代码的相关部分。
我正在编写 .js 文件,所以我想我需要一些 JavaScript 代码。
非常感谢你。
解决方案
虽然 Gnome Shell 的大部分用户可见部分都是用 JavaScript 编写的,但它们通常只是底层 C 库的绑定。如果您正在使用 Windows、监视器和屏幕,那么您将需要参考 Mutter 文档,可能还需要参考 Shell 文档:
- 嘀咕:https ://gjs-docs.gnome.org/#q=meta
- 外壳:https ://gjs-docs.gnome.org/shell01/
- St(Shell 工具包):https ://gjs-docs.gnome.org/st10/
global
对象上有一个名为screen
(so )的属性,global.screen
它无疑是 a MetaScreen
,它具有函数、get_n_monitors()
以及和其他函数。另一方面,它包含一个调用的函数,该函数返回一个整数。我收集到监视器由整数引用,该整数被传递给 and 的各种函数,因为在 Mutter 文档中似乎没有一个对象。get_primary_monitor()
get_current_monitor()
MetaWindow
get_monitor()
MetaScreen
MetaWindow
大多数与您想做的相关的 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 的文档以及一些值得一读的内置模块:
推荐阅读
- sql - 如何创建只有每个月末的日历表 SQL Server 2017
- r - ggplot2中几何对象(geoms)的参数(美学)
- c - opendir 在 C 语言中没有得到缓冲区 char * 的内容?
- php - 需要帮助使用带有数字范围的 SQL 查询值更改 PHP 代码中的表格颜色
- python - 为什么我的 Openstack 身份验证模块不再工作?
- ansible - 无法让 Ansible 剧本在初始运行时运行
- python - 计算机关闭时如何安排任务?
- erp - 在 Infor syteline erp 中生成报告后,我们可以向特定用户发送一次电子邮件吗?
- azure - 使用 Microsoft Azure 将日志分析查询保存到存储帐户
- visual-studio - 通过 LAN 从 Visual Studio for Mac 连接到 .NETCore 3 应用程序