我正在使用emacs-24.3 for Windows,特别是Org-Mode,这太棒了。我正在尝试设置一个新的捕获模板,用于处理我工作的缺陷,并希望模板输出如下内容:
e.g。
我遇到的问题是URL与此http://www.jira.com/browse/COM-19112类似,我希望将其输出为COM-19112。要在emacs中正常执行此操作,我会这样做:
[[http://www.jira.com/browse/COM-19112][COM-19112]]
但是,在尝试设置组织捕获模板时,我只想输入一次COM-19112并在两个地方填充它。这是迄今为止我能得到的最好的 - 它给了我想要的东西,但我必须在提示时两次输入'COM-19112':
(setq org-capture-templates
'(("d" "Defects" entry (file+headline "C:/EmacsOrg/Defects.org" "Tasks")
"* TODO %? [[http://www.jira.com/browse/%^{Defect}][%^{Defect}]]")))
我在http://orgmode.org/manual/Template-expansion.html#fn-2上看不到任何可以解释如何创建可以在多个地方使用的变量的内容,但我确信有一种方法可以做到这一点。
如果有人能指出我正确的方向,我将非常感激。
此致
BebopSong
答案 0 :(得分:4)
template expansion上的页面确实包含有关如何重新插入现有变量的信息。
%\n Insert the text entered at the nth %^{prompt}, where n is
a number, starting from 1.
假设您的模板如上:
(setq org-capture-templates
'(("d" "Defects" entry (file+headline "C:/EmacsOrg/Defects.org" "Tasks")
"* TODO %? [[http://www.jira.com/browse/%^{Defect}][%^{Defect}]]")))
您可以将其替换为
(setq org-capture-templates
'(("d" "Defects" entry (file+headline "C:/EmacsOrg/Defects.org" "Tasks")
"* TODO %? [[http://www.jira.com/browse/%^{Defect}][%\\1]]")))
您可能需要根据正在定义的其他变量更改%\\1
。 (它需要双反斜杠才能工作,因为\
是一个转义字符)
答案 1 :(得分:2)
我有类似的情况,我使用类似于以下代码:
(defun org-at-special (type)
"Check whether point is at a special link of the form [[TYPE:address]]
TYPE is given as string.
Returns the address."
(save-excursion
(when (and (looking-back (concat "\\[\\[\\(?:" type "\\([^][\n\r]+\\)?\\]\\[\\)?[^]]*\\(\\]\\)?"))
(goto-char (match-beginning 0))
(looking-at (concat "\\[\\[" type "\\([^][\n\r]+\\)\\]")))
(match-string-no-properties 1))))
(require 'browse-url)
(defun org-open-google ()
(let ((q (org-at-special "google:")))
(when q
(apply browse-url-browser-function (list (concat "http://www.google.com/#q=" q)))
t)))
(add-to-list 'org-open-at-point-functions 'org-open-google)
在此定义之后,您可以将[[google:stackoverflow]]
之类的链接放入您的组织文件中。
您只需要定义自己的org-open-google
函数,然后将其命名为org-open-defect
或者您喜欢它。您必须将此名称添加到列表org-open-at-point-functions
。
我为你做了一些修改。因此,上述代码未经过严格测试。但是,我已经做了一些基本测试。
如果前缀始终为COM-您已经可以将其作为org-at-special
的类型,则会重新识别[[COM-19112]]
之类的链接,并且您具有所需的显示内容。那么你的特殊情况就是这样:
(defun org-open-COM- ()
(let ((q (org-at-special "COM-")))
(when q
(apply browse-url-browser-function (list (concat "http://www.jira.com/browse/COM-" q)))
t)))
(add-to-list 'org-open-at-point-functions 'org-open-COM-)
之后,如下所示的捕获就足够了
(setq org-capture-templates
'(("d" "Defects" entry (file+headline "/c/temp/Defects.org" "Tasks")
"* TODO %? [[COM-%^{Defect}]]")))
因此,您只需要输入一次缺陷编号。