使用介绍
- 本地载入
(use-package plz)
(use-package dida
:load-path "~/elpa/")
-
然后在dida apps界面申请APP,填入APP名称(随便填),生成,返回。
-
点击
Edit
,将网页上的OAuth redirect URL
设置为http://localhost:1145
。 -
将生成的
client-id
client-secret
对应填入本地变量dida-client-id
dida-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信息插入到文件最尾端