我对GNOME扩展开发非常陌生,而且由于API的文档(或者我的Internet被秘密审查)严重缺乏,我很难使用它。我开始修改现有的扩展,以便更容易绕过它。
问题是,我可以使用global.display.focus_window
获取活动窗口,还可以使用Main.layoutManager.monitors
获取连接到计算机的监视器列表。现在,我想要做的是找出所获得的窗口所在的监视器(因此我可以将顶部面板移动到该监视器,因为这可能意味着我正在使用该监视器)。我尝试了各种各样的东西,比如.screen,.monitor等,但没有成功。我没有完成IntelliSense完成,我试图猜测成员可能是什么,因为我似乎无法在其上找到任何文档。
我很欣赏GNOME比我之前使用的更加可定制(Unity,它根本不提供自定义),但我不知道如何使用它并且资源很少。我试着查看源代码,但我不熟悉它是如何组织的,我找不到代码的相关部分,如果它们存在,我们需要的成员被声明。
我正在编码.js文件,所以我需要一些JavaScript代码。
非常感谢。
答案 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()
的函数,它返回一个整数。我认为监视器由整数引用,它被传递给MetaScreen
和MetaWindow
的各种函数,因为在Mutter文档中它似乎不是一个对象。 / p>
你想要做的大多数相关JavaScript似乎都在layout.js中,这可能是我在Gnome Shell中如何使用Mutter的更好例子。它还包括一个Monitor
类,它似乎只是一个围绕监视器索引的JS包装器。此类在LayoutManager
类中使用here(这是实例Main.layoutManager
的定义)。
关于文档的说明
最初,没有"正确" gnome-shell文档是(内部JavaScript)API非常不稳定。这笔交易是,你没有得到一个稳定的API,但你可以用你将要编写它的同一种语言阅读来源。在某些方面,这是有道理的,因为你可以修改{ {1}}活着的对象和奇思妙想的猴子补丁。
API已经解决了很多问题,但是没有人真正加强编写脚本来自动记录它。我最好的建议是将Mutter,Shell和St文档加入书签,并使用Github或GitLab的搜索来简化操作。
但是有一些Gnome API的文档以及一些值得浏览的内置模块: