现已推出org-mode文件与滴答清单同步包

GitHub下载链接

使用介绍

  • 本地载入
(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 ,不区分 SCHEDULEDDEADLINE ,因此我在push时做了如下处理:

如果本地任务有 SCHEDULED

–>则创建/更新一个dida task,记录 SCHEDULED 提醒时间

如果本地任务有 DEADLINE

–>则创建/更新一个dida task,在title前加上 [D] ,记录 DEADLINE 提醒时间

同样地,fetch时做了对应操作:

如果title前有 [D] ,则先暂存并跳过。

然后统一检查暂存,看有无去掉 [D] 后title的heading。

–>如果有,则在该heading上添加对应id和deadline信息

–>如果没有,则将暂存的heading信息插入到文件最尾端

7 个赞