如何在GNOME中获取活动窗口的监视器?

时间:2018-04-28 19:44:25

标签: javascript ubuntu gnome gnome-3 gnome-shell-extensions

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

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

我很欣赏GNOME比我之前使用的更加可定制(Unity,它根本不提供自定义),但我不知道如何使用它并且资源很少。我试着查看源代码,但我不熟悉它是如何组织的,我找不到代码的相关部分,如果它们存在,我们需要的成员被声明。

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

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

global对象上有一个名为screen的属性(global.screen),毫无疑问是MetaScreen,其函数为get_n_monitors(),如以及get_primary_monitor()get_current_monitor()和其他人。另一方面,MetaWindow包含一个名为get_monitor()的函数,它返回一个整数。我认为监视器由整数引用,它被传递给MetaScreenMetaWindow的各种函数,因为在Mutter文档中它似乎不是一个对象。 / p>

你想要做的大多数相关JavaScript似乎都在layout.js中,这可能是我在Gnome Shell中如何使用Mutter的更好例子。它还包括一个Monitor类,它似乎只是一个围绕监视器索引的JS包装器。此类在LayoutManager类中使用here(这是实例Main.layoutManager的定义)。

关于文档的说明

最初,没有"正确" gnome-shell文档是(内部JavaScript)API非常不稳定。这笔交易是,你没有得到一个稳定的API,但你可以用你将要编写它的同一种语言阅读来源。在某些方面,这是有道理的,因为你可以修改{ {1}}活着的对象和奇思妙想的猴子补丁。

API已经解决了很多问题,但是没有人真正加强编写脚本来自动记录它。我最好的建议是将Mutter,Shell和St文档加入书签,并使用Gi​​thub或GitLab的搜索来简化操作。

但是有一些Gnome API的文档以及一些值得浏览的内置模块: