2017-10-11 140 views
2

我使用偉大的Org Capture Extension Firefox插件直接將我的Web鏈接捕獲到我的Emacs文檔中。Org Capture Extension的自定義組織捕獲模板

一個最小的組織捕獲模板是:

(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]] 

org-模式鏈路斷開因爲在的括號「[1606.04838]」字符串。

如何解決這個問題?

回答

2

治癒方法是將鏈接[%:description]描述轉換爲不包含方括號[]的字符串。爲此我們可以定義一個將[,]字符轉換爲(,)的函數。

(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並將結果替換。 爲方便起見,表達式中的%:關鍵字(請參見下文)佔位符 將在此之前展開。 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 
)) 

然後當你點擊火狐組織捕捉按鈕模板正確地消耗到

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

具有良好形成的組織模式鏈接(注意[1606.04838]變成(1606.04838))

+1

謝謝,我有完全相同的問題。 – rvf0068

+0

@ rvf0068我很高興,這有助於我認爲我是唯一一個做這種奇怪事情的人! :) –