Cinnamon Develop Extension Start

測試環境

如何開發「Cinnamon Extension」

終於來到開始寫這篇的階段了,雖然腦海中還有一篇「gjs imports」的議題尚未寫出來,但目前先列到TODO吧。

可以參考「這篇」,還有之前我寫的這兩篇「1」「2」,

來練習寫出一個練習的「Cinnamon Extension」吧。

產生「Extension」放置的資料夾

先來到個人「Cinnamon Extension」放置的資料夾「~/.local/share/cinnamon/extensions」,還記得「之前整理出來的路徑」吧。

1
$ cd ~/.local/share/cinnamon/extensions

產生「Extension」放置的資料夾,這個由你自己命名,以下只是範例。

1
$ mkdir hello-notify@home

進到資料夾

1
$ cd hello-notify@home

產生兩個必要的檔案「extension.js」和「metadata.json」。

1
$ touch metadata.json extension.js

編輯「metadata.json」

1
$ vi metadata.json

「metadata.json」填入以下內容

1
2
3
4
5
6
7
8
9
{
"uuid": "hello-notify@home",
"name": "Hello Notify",
"description": "This is an [extension develop start example].",
"cinnamon-version": [
"2.2"
],

"url": "https://samwhelp.github.io/blog/read/linux/mint/cinnamon/develop/extension/"
}

編輯「extension.js」

1
$ vi extension.js

填入以下內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const Main = imports.ui.main;

//https://github.com/linuxmint/Cinnamon/wiki/%5BDevelopment%5D-Extensions

function init()
{

Main.notify('Hello Extension init');
}

function enable()
{

Main.notify('Hello Extension enable');
}

function disable()
{

Main.notify('Hello Extension disable');
}

測試

  • 啟用「Hello Notify (hello-notify@home)」這個「Extension」,就可以看到效果了。會跳出兩個「訊息視窗」。
  • 停用「Hello Notify (hello-notify@home)」這個「Extension」,就可以看到效果了。會跳出一個「訊息視窗」。

還記得怎麼「啟用」和「停用」「Extension」嗎?請參考「這篇」。

另一個範例

不過剛剛那個範例,我在測試的時候,多試可幾次,都會讓我的「cinnamon」「crash」。我也不曉得是為啥。
上面那個只是要引起你興趣。未來開發,還是以下面的「log」版,來顯示「除錯訊息」比較好。

先安裝一個開發的輔助工具

請先安裝「Cinnamon Developer’s Tools」這個「Desklet」,並啟用他。就會出現在桌面上。

會安裝這個工具,是因為我發現預設的「Looking Glass」對「log」好像不是很即時。還好有發現這個工具,不然又要像我以前在「Ubuntu Gnome 14.04」找了老半天,不知道去哪可以看到「log」,雖然「後來有找到了」。

產生「Extension」放置的資料夾

產生「Extension」放置的資料夾「~/.local/share/cinnamon/extensions/hello-log@home」。

1
$ mkdir ~/.local/share/cinnamon/extensions/hello-log@home -p

進到資料夾

1
$ cd ~/.local/share/cinnamon/extensions/hello-log@home

產生兩個必要的檔案「extension.js」和「metadata.json」。

1
$ touch metadata.json extension.js

編輯「metadata.json」

1
$ vi metadata.json

「metadata.json」填入以下內容

1
2
3
4
5
6
7
8
9
{
"uuid": "hello-log@home",
"name": "Hello Log",
"description": "This is an [extension develop start example].",
"cinnamon-version": [
"2.2"
],

"url": "https://samwhelp.github.io/blog/read/linux/mint/cinnamon/develop/extension/"
}

編輯「extension.js」

1
$ vi extension.js

填入以下內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const Main = imports.ui.main;

//https://github.com/linuxmint/Cinnamon/wiki/%5BDevelopment%5D-Extensions

function init()
{

global.log('Hello Extension init');
}

function enable()
{

global.log('Hello Extension enable');
}

function disable()
{

global.log('Hello Extension disable');
}

測試

  • 啟用「Hello Notify (hello-notify@home)」這個「Extension」。
  • 停用「Hello Notify (hello-notify@home)」這個「Extension」。
  • 請在剛剛安裝啟用的「Cinnamon Developer’s Tools」,左方有一個「+」的按鈕,按下後會變成「-」,同時會下拉一塊區區域,在「Cinnmon Log」就可以看到剛剛的「log」訊息。

如何找Api

因為對GTK完全不懂,所以我只好採取下面的策略。

  • 觀看「人家寫好」的,一些路徑和網址,在「這篇」可以查到。在用關鍵字去查詢和推敲。
  • 利用「Looking Glass」,輸入「物件」執行,然後就可以找到function名稱,參考我「這篇」的說明(雖然寫的很雜,還沒時間整理,但還是可參考)。
  • 這裡」可以找到一些「Api文件」。找到後,在用關鍵字再去查網路上的的資料。
  • 查看這個作者有關「gjs」的相關文章,我最早接觸到「gjs」是從這個作者的部落格看到的,也是他的文章引起我對「gjs」的興趣的,才會導致我後來會陸續關注「gnome-shell」和「cinnmon」。不過也是這個禮拜才開始有認真的在玩。例如「這篇」可以知道「Mainloop」的用法。還有「這篇」可以了解到「imports」和「module」,「searchPath」的概念,我根據那篇也有做了探索,也同樣紀錄在「這篇」,額外發現了一個「__init__.js」檔,有點類似「Python」的用法。另外「這篇」有簡單介紹「Seed」「Gjs」「GNOME Shell」。