OmniFocus 4 即將發布!在我多年管理我的待辦的過程中,我嘗試過 Todoist、滴答清單、Things、Sorted 等等幾乎所有市面上的 TODO 軟體,但最終,OmniFocus 終成我一直以來的最終選擇。而談及 OmniFocus 的強大性,不得不提的就是他強大的自動化能力 —— Omni Automation。
Omni Automation 實際上是基於 JS 腳本的,而編寫純 JS 腳本的過程…… 一言難盡。雖然 Omni Automation 官方提供了 TypeScript 的定義文件,但一方面難以做好類型檢查,另一方面其詳盡程度仍有待提升(長久不更新、大量使用 any 等),此外,由於缺乏打包工具,代碼邏輯的複用也顯得頗為困難(我甚至很長一段時間都是靠著 Mac 版本 OmniFocus 的一個 bug 實現的邏輯複用)。
為了慶祝 OmniFocus 4 的面世,我決定將我個人開發並使用的方案整理開源,包括打包腳本和類型定義,還有我使用的一些工具函數及腳本,希望可以讓更多人能夠愉快地編寫 OmniFocus Script。
使用#
- 使用此模板創建一個倉庫
- 克隆你創建的倉庫
- 運行
pnpm install
安裝依賴項 - 運行
pnpm build
構建腳本
腳本源碼放在 src
目錄中,編譯結果(可被 OmniFocus Scripts 使用的)放在 dist
目錄中。
撰寫腳本#
src
目錄內的任何不以 _
開頭的 TypeScript 文件都將被視為 OmniFocus 腳本並編譯(_
開頭的腳本文件被保留用於工具函數)。
任何腳本都必須遵循以下模式:
export const action = new PlugIn.Action(function (selection) {
// do anything you want
});
action.validate = function (selection) {
// do anything you want
};
export const meta: Meta = {
label: "...",
description: "...",
identifier: "...",
author: "...",
version: "0.1",
};
其中:
action
和meta
是必需的,action.validate
是可選的meta
必須是腳本的最後一部分。它之後不可以有任何內容。
構建與使用#
運行 pnpm build
,構建後的腳本(以 .omnifocusjs
結尾)將被放置在 dist
目錄下。
你可以直接將 dist 目錄中的腳本拷貝到 OmniFocus 的腳本目錄,也可以利用腳本進行同步。
如果你使用 iCloud 保存 OmniFocus 腳本,可以直接使用 pnpm sync
自動將構建好的腳本同步到 iCloud 中的 OmniFocus 腳本目錄;如果你不使用 iCloud 而是使用了自定義路徑,可修改 sync.sh
文件改變目標路徑。
End#
此方案我個人已用一年有餘,但一方面開源版本可能有些錯誤,另一方面可能有更多的定制化需求。
歡迎進入 倉庫 頁面提交 Issue 和 PR!