使用介绍
- 本地载入
(use-package plz)
(use-package dida
:load-path "~/elpa/")
-
然后在dida apps界面申请APP,填入APP名称(随便填),生成,返回。
-
点击
Edit,将网页上的OAuth redirect URL设置为http://localhost:1145。 -
将生成的
client-idclient-secret对应填入本地变量dida-client-iddida-client-secret中
(setq dida-client-id "114514")
(setq dida-client-secret "1919810")
- 并设置同步到的本地文件路径
dida-sync-file。
(setq dida-sync-file "path/to/your/org/file")
-
执行
dida-authorize,自动打开授权网页,点击「同意」后跳转到本地网页,此时已将Code自动传递进了kill-ring。 -
返回Emacs,按
C-y直接粘贴到mini-buffer中。这就完成了一次授权。 -
最后自定义同步策略。
(defun dida-sync ()
"先push再fetch,以云端为准"
(interactive)
(dida-push)
(dida-fetch))
;; 启动后fetch一次
(add-hook 'after-init-hook #'dida-fetch)
;; 闲置240秒后先push再fetch一次
(run-with-idle-timer 240 t #'dida-sync)
细节说明
由于dida api只会返回 TODO 状态的task,且只有 dueDate ,不区分 SCHEDULED 和 DEADLINE ,因此我在push时做了如下处理:
如果本地任务有 SCHEDULED
–>则创建/更新一个dida task,记录 SCHEDULED 提醒时间
如果本地任务有 DEADLINE
–>则创建/更新一个dida task,在title前加上 [D] ,记录 DEADLINE 提醒时间
同样地,fetch时做了对应操作:
如果title前有 [D] ,则先暂存并跳过。
然后统一检查暂存,看有无去掉 [D] 后title的heading。
–>如果有,则在该heading上添加对应id和deadline信息
–>如果没有,则将暂存的heading信息插入到文件最尾端