我对GNOME扩展开发非常陌生,由于很难提供该API的文档(或者可能是对我的互联网进行了秘密审查),因此我很难使用它。我从修改现有扩展程序开始,以便更轻松地解决它。
问题是,我可以使用global.display.focus_window
获取活动窗口,还可以使用Main.layoutManager.monitors
获取连接到计算机的监视器列表。现在,我想做的是找出获得的窗口正坐在哪个显示器上(因此我可以将顶部面板移到该显示器上,因为这可能意味着我正在该显示器上工作)。我尝试了各种操作,例如.screen,.monitor等,但均未成功。我对此没有IntelliSense的补充,我试图猜测成员的身份,因为我似乎找不到任何文档。
我欣赏GNOME的可定制性比我以前使用的方式(Unity,它根本不提供任何定制)要好得多,但是我不知道如何使用它,而且资源稀缺。我尝试查看源代码,但是我对源代码的组织方式不熟悉,并且找不到需要声明的成员(如果存在)的相关代码部分。
我正在编码.js文件,所以我想需要一些JavaScript代码。
非常感谢你。
最佳答案
尽管Gnome Shell的大多数用户可见部分都是用JavaScript编写的,但这些通常只是底层C库的绑定。如果您使用的是Windows,Monitors和Screens,那么您将要参考Mutter文档以及Shell文档:
咕utter声:https://developer.gnome.org/meta/stable/
外壳:https://developer.gnome.org/shell/stable/
St(Shell工具包):https://developer.gnome.org/st/stable/index.htmlglobal
对象上有一个名为screen
(因此是global.screen
)的属性,毫无疑问,这是一个具有功能MetaScreen
以及get_n_monitors()
,get_primary_monitor()
和其他功能的get_current_monitor()
。另一方面,MetaWindow
包含一个名为get_monitor()
的函数,该函数返回整数。我收集到监视器由整数引用,该整数传递给MetaScreen
和MetaWindow
的各种函数,因为Mutter文档中似乎没有该对象。
您想要做的大多数相关JavaScript似乎都在layout.js中,这可能比我能提供的更好的例子说明了如何在Gnome Shell中使用Mutter。它还包含一个Monitor
类,该类似乎只是监视器索引的JS包装器。在LayoutManager
类(这是实例Main.layoutManager
的定义)中的here中使用该类。
关于文档的注释
最初,没有“适当的” gnome-shell文档的原因是(内部JavaScript)API相当不稳定。要做的是,您没有一个稳定的API,但是您将使用将要使用的相同语言来阅读源代码。在某些方面,这是有意义的,因为您可以修改live的prototype
对象和猴子补丁一时兴起。
该API已经解决了很多,但是还没有人真正加紧编写脚本来自动记录它。我最好的建议是为Mutter,Shell和St文档添加书签,并使用Github或GitLab的搜索使事情变得更容易。
但是,这里有Gnome API的文档以及一些值得一看的内置模块:
侏儒API:https://devdocs.baznga.org/
模块:https://gitlab.gnome.org/GNOME/gjs/wikis/Modules
GJS中GObject的一般用法:https://gitlab.gnome.org/GNOME/gjs/wikis/Mapping