問題描述
我一直想開發一些 Gnome Shell 擴展,因為它們隻是在 javascript 中,但是我一直在尋找並且幾乎零文檔,在我看到的任何地方人們隻是說使用基本的 Gnome 文檔,但這沒有幫助,我可以找不到任何關於擴展導入的文檔,或任何類型的用於擴展開發的 javascript api,我嘗試查看一些教程(其中大部分是針對 Gnome 3.0,而不是 3.2),但沒有任何幫助。
有誰知道他們是否正在為擴展開發編寫文檔?我真的很喜歡一些好的文檔……
最佳答案
我對演示代碼和教程不滿意的原因是它們引入了一堆隨機導入,並且從不解釋它們是什麽或如何使用它們。我正在構建我自己的答案,其他人可以添加,以便人們可以真正知道他們可以調用哪些函數,可以導入哪些函數等。
有為 Gnome Shell 生成的文檔,但它有點不完整——我找不到我在各種教程、示例和已發布的擴展中看到的大部分內容。
唯一真正可靠的文檔是 Gnome Shell 源代碼本身。根本沒有任何其他 up-to-date 或完整的方法來了解可用的內容。
這兩個起點特別好:
C 源代碼顯示有一個名為 global
的重要對象,它不需要導入,並提供對諸如窗口管理器(包括鍵綁定)、會話信息、可用屏幕等內容的訪問。這是來源:
-
shell-global.c 源本身
-
顯示 types of the underlying objects 的源代碼部分
我想知道如何使用 global.display
對象,目前最好的文檔是 that provided by Alan Knowles 。
可以通過 GObject 內省綁定導入其他內容,例如:
-
Clutter UI library (
imports.gi.Clutter
) -
GLib itself (
imports.gi.GLib
) -
Shell Toolkit (
imports.gi.St
)
通常,您可以查看 reference documentation for the various Gnome components 以查找其他導入。
關於窺鏡的注意事項:雖然在窺鏡中使用這些導入有一些怪癖——我浪費了很多時間隻是試圖在運行中進行測試。例如:
const Clutter = imports.gi.Clutter;
…不會工作,因為 Clutter
已經存在。但是之後:
const MyClutter = imports.gi.Clutter;
…也行不通; MyClutter
未定義且無法使用。你必須要做:
MyClutter = imports.gi.Clutter;
當然,在這種情況下,Clutter
已經存在,因此沒有必要。但是由於它沒有記錄在 Lookglass 命名空間中的內容和不存在的內容,如果您嘗試導入某些內容並遇到這些問題,請記住它。
剩餘問題:
-
Mainloop
是什麽?這是在main.js
中導入的,似乎具有與 GLib 主循環相關的功能。有這方麵的文件嗎? -
imports.misc
是什麽?裏麵似乎有一些非常有用的東西,比如ExtensionUtils
——那是什麽? -
你如何使用DBus?內省呢?
次佳答案
文檔有點滯後,一個潛在的信息來源是 Musings of an OS plumber ,例如updating GNOME Shell extensions to work with version 3.2 上的這篇文章
根據您想要的信息,您可以嘗試使用 gnome 郵件列表。
第三種答案
這個為 gnome 3.4 創建擴展的分步教程可能會有所幫助:https://live.gnome.org/GnomeShell/Extensions/StepByStepTutorial