我開發了 50 多個 Emacs 插件, 並且維護了將近 100 多個. 對初學者來說, 開發 Emacs 插件是一件不容易的事情, 特別是對那些想把自己的插件發行到其他的 ELPA 的人來說更不容易. 哪些 ELPA? (GNU Elpa, NonGNU Elpa, MELPA, 等等.)

這是為什麼我使用 Eask 來幫助我完成這些插件的開發和維護的工作. 所以我將 在這則文章教大家如何使用這個工具來幫助你完成插件的開發!

🗨️ 善用 --help

現今的 Eask 已經有超過 50 種以上的指令集 (包含隱藏的). 這個工具已經是個有 點複雜, 所以當你遇到問題的時候請善用 --help 這個旗幟.

$ eask --help

📦 建構插件

我們這裡直接切入正題, 我會默認你已經會初始化 Eask 專案, 並且只想知道如何 有效的使用這工具!

為了方便展示, 我直接使用了自己現存已開發完成的專案 [openal.el][openal].

# Clone 專案
$ git clone https://github.com/emacs-openai/openai.git

# 進入到專案裡面
cd sideline

# (非必要) 印出專案結構
tree /f

我們的專案結構是長這樣的:

│   .dir-locals.el
│   .gitignore
│   CHANGELOG.md
│   Eask
│   LICENSE.txt
│   Makefile
│   openai-audio.el
│   openai-chat.el
│   openai-completion.el
│   openai-edit.el
│   openai-embedding.el
│   openai-engine.el
│   openai-file.el
│   openai-fine-tune.el
│   openai-image.el
│   openai-model.el
│   openai-moderation.el
│   openai.el
│   README.md
│
└───.github
    └───workflows
            test.yml

我們用這指令來建構我們的插件:

$ eask package

這個指令會建立一個檔案夾 dist, 結果如下:

注意這個專案是個多文件插件所以建構出來的是一個 tar 檔案, 而不是 .el 檔案. 如果我們看一下這個檔案, 結果如下:

⚙ 安裝

現在你已經成功建構完了插件, 這代表如果你發行到任何 ELPA 都將不會有任何問 (GNU Elpa, MELPA,等等.). 大家都將成功下載你的插件! 我們下一步是安裝. 如果我們可以下載你的插件, 但無法安裝, 是不是沒有任何意義? 我們使用 install 指令來安裝我們剛剛建立的檔案:

$ eask install

這個插件會安裝到一個獨立的環境, 所以我們不用擔心他會影響到我們本地的 Emacs 配置 ~/.emacs.d/. 結果如下:

📋 啟動看看?

啟動一個檔案相當簡單, 正常來說我們會想要確定我們的插件是能夠被正確引入的.

$ eask test activate

你會看到下面的結果:

Loading package information... done v

Activating the package `openai'... succeeded v
(Nothing to load.)

太棒了! 這代表我們的插件已經成功被啟動了, 並且沒有任何錯誤! 😋

這個步驟通常是不必要的, 不過當你想知道你的插件是否能夠被引入, 這會相當好用!

👷 編譯

是時候該編譯我們的插件了! 通常情況下, 編譯步驟跟安裝步驟是相似的, 因為 安裝的過程必定有編譯. 唯一的不同在於我們不會想要每次都建構插件, 所以直接 編譯就會相通好用!

$ eask compile

很棒! 這次編譯也沒有任何問題! 😋

Compiling d:/_workspace/elisp/openai/openai.el... done v
Compiling d:/_workspace/elisp/openai/openai-audio.el... done v
Compiling d:/_workspace/elisp/openai/openai-chat.el... done v
Compiling d:/_workspace/elisp/openai/openai-completion.el... done v
Compiling d:/_workspace/elisp/openai/openai-edit.el... done v
Compiling d:/_workspace/elisp/openai/openai-embedding.el... done v
Compiling d:/_workspace/elisp/openai/openai-engine.el... done v
Compiling d:/_workspace/elisp/openai/openai-file.el... done v
Compiling d:/_workspace/elisp/openai/openai-fine-tune.el... done v
Compiling d:/_workspace/elisp/openai/openai-image.el... done v
Compiling d:/_workspace/elisp/openai/openai-model.el... done v
Compiling d:/_workspace/elisp/openai/openai-moderation.el... done v

(Total of 12 files compiled, 0 skipped)

⚜️ 結語

這些就是最基礎的 Eask 用法. 當然還有更多, 例如 linter 檢查代碼, 跑測試, 或者 插件管理, 等等. 不過這些等我們下一次有機會在介紹!

最後總結一下我們在這則文章使用過的指令集:

eask package        # 建構可安裝檔案
eask install        # 安裝建構檔案 (.tar 或 .el)
eask test activate  # 啟動測試
eask compile        # 編譯原始碼