菜鸟提个orgmode org-capture使用需求

版上了解到org-capture能做抓取功能,我很想在一个阅读电子书时用orgmode org-capture 快速抓取记录,无奈目前只是orgmode菜鸟使用者,望版上大拿能指点一二,具体需求如下:

  1. 环境是debian10,主力KDE桌面
  2. 用任何pdf电子书阅读器时,选中想要摘录的文字(linux环境默认会放入剪贴板)
  3. 键盘输入一个快捷键
  4. 文字作为一条新记录自动累计加入到一个特定org文件
  5. 整个过程中为了避免注意力干扰不需要打开emacs
  6. 后续再打开特定org文件做复习整理

类似功能在firefox和chrome中有grasp插件,我平时在抓取网页内容时使用较多,想延续使用习惯。 网上有不少介绍org-capture的,但是基本上都是打开emacs,需要输入选择模板之类的,对 阅读过程中注意力有一定干扰。 而且第三部有介绍是在KDE下设快捷键,在KDE PLASMA环境里设置多次不成功。

3 中键盘定义快捷键的时候其实可以直接把选择模板的工作做了。 然后想要避免打开 Emacs 我解决的方法很 dirty,就是特定 capture :immediate-finish t,然后 capture 完自动切换回上个应用,不过会闪一下的样子。

  (defun supress-frame-splitting (&rest r)
    (let ((frame-name (frame-parameter nil 'name)))
      (when (or (equal "capture" frame-name)
                (equal "agenda" frame-name))
        (delete-other-windows))))

  (defun org-capture-finalize@after (&rest r)
    (when (equal "l" (plist-get org-capture-plist :key))
      (run-at-time 0 nil #'osx-switch-back-to-previous-application))
    (when (equal "capture" (frame-parameter nil 'name))
      (delete-frame)))

  (defun org-agenda-finalize@after (&rest r)
    (when (equal "agenda" (frame-parameter nil 'name))
      (delete-frame)))

  (defun org-capture-select-template@around (org-capture-select-template &optional keys)
    (let ((res (ignore-errors (funcall org-capture-select-template keys))))
      (unless res (setq res "q"))
      (when (and (equal "capture" (frame-parameter nil 'name))
                 (equal "q" res))
        (delete-frame))
      res))

  (defun org-agenda-get-restriction-and-command@around (org-agenda-get-restriction-and-command prefix-descriptions)
    (let ((res (ignore-errors (funcall org-agenda-get-restriction-and-command prefix-descriptions))))
      (when (and (not res)
                 (equal "agenda" (frame-parameter nil 'name)))
        (delete-frame))
      res))

  (advice-add #'org-agenda-quit                        :before #'org-save-all-org-buffers)
  (advice-add #'org-agenda-quit                        :after  #'org-agenda-finalize@after)
  (advice-add #'org-agenda-exit                        :after  #'org-agenda-finalize@after)
  (advice-add #'org-agenda-get-restriction-and-command :around #'org-agenda-get-restriction-and-command@around)
  (advice-add #'org-capture-finalize                   :after  #'org-capture-finalize@after)
  (advice-add #'org-capture-select-template            :around #'org-capture-select-template@around)
  (advice-add #'org-refile                             :after  #'org-save-all-org-buffers)
  (advice-add #'org-switch-to-buffer-other-window      :after  #'supress-frame-splitting)
1赞

发现一个变通的方式,也许是更合理的方式 用org-pdf-tools,装好后整个pdf直接显示在emacs的一个buffer里,记笔记自然会方便多了。

网上搜索的时候还有人提到和org-note结合,等试用过后再来