Org Capture Extension的自定义组织捕获模板

时间:2017-10-11 10:12:11

标签: emacs firefox-addon org-mode

我正在使用优秀的Org Capture Extension Firefox插件将我的网络链接直接捕获到我的Emacs文档中。

最小组织捕获模板是:

(setq org-capture-templates `(
     ("L" "Protocol Link" entry (file+headline "~/web.org" "Links")
      "* [[%:link][%:description]]\n")  

     ;; ... your other templates
))

我用它来为文章添加书签,特别是很多文章都在上面 arxiv.org。问题是arxiv标题页包含[]字符,例如:

  

[1606.04838]大规模机器学习的优化方法

与模板中使用的[[%:link][%:description]]很好地混合以创建组织模式链接。例如,捕获返回:

** [[https://arxiv.org/abs/1606.04838][[1606.04838] Optimization Methods for Large-Scale Machine Learning]]
由于" [1606.04838]" 字符串中的括号,

组织模式链接已损坏

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

解决方法是将链接[%:description]描述转换为不包含方括号[]的字符串。为此,我们可以定义一个函数,将[,]字符转换为(,)1。

(defun transform-square-brackets-to-round-ones(string-to-transform)
  "Transforms [ into ( and ] into ), other chars left unchanged."
  (concat 
  (mapcar #'(lambda (c) (if (equal c ?[) ?\( (if (equal c ?]) ?\) c))) string-to-transform))
  )

然后我们可以将此功能用于org-capture-template%(sexp) syntax用于将lisp代码评估到模板中:

  

%(sexp)评估Elisp sexp并替换为结果。                          为方便起见,%:keyword(见下文)占位符                          表达式中的内容将在此之前展开。                          sexp必须返回一个字符串。

修改后的org-capture-template是:

(setq org-capture-templates '(

    ("L" "Protocol Link" entry (file+headline "~/web.org" "Links")
     "* [[%:link][%(transform-square-brackets-to-round-ones \"%:description\")]]\n")

    ;; ... your other templates
))

然后,当您单击Firefox Org-Capture按钮时,模板已正确扩展到

** (1606.04838) Optimization Methods for Large-Scale Machine Learning

具有格式良好的组织模式链接(请注意[1606.04838]已变为(1606.04838))