我想用capture
of模块org-mode
创建一个我想学的生词的数据库,然后用drill
模块来学习它们(闪存卡样式)。
在我的org-capture-templates
我添加了以下内容:
("v" "Vocabulary" entry
(file+headline (concat org-directory "/vocab.org")
"Vocabulary")
"* Word :drill:\n%^ \n** Answer \n%^")
这是我从这里借来的一个相当幼稚的模板。它工作得很好,但它太有限了。不幸的是,我很陌生elisp
,我不知道如何改进它。
我认为上述模板必须在以下几个方面进行改进:
标题当前第一个输入字符串是(新)单词并且标题是固定的。标题怎么可能是同一个(输入)词?我认为以下结果是可取的:
* Vocabulary
** Foo :drill:
Foo
*** Answer
What is foo
实际上,更好的方法是使用 3 个输入字符串。
foo
将成为标题的新词(例如)。- 如果第二个为空,则它得到与 (1) 相同的字符串。否则,将字符串连接到 (1) 中的字符串。例如,作为第二个输入
bar
将产生foo bar
. 这将是条目的内容。 - 这个词的定义应该出现在
answer
副标题中。
重复(再看一次)如果稍后我尝试foo
再次捕获,我想知道它,并被指示编辑已经存在的条目 - 跳过所有输入。
排序捕获后,我认为对单词列表进行排序会很好。考虑到每个条目的标题就是单词本身,这应该不会太难。在这种情况下,可能可以使用该org-sort-entries
功能。
我知道这是一个相当大的问题,但我也认为如果可以在这里解决它,它将对许多用户有很大的用处。
编辑:
使用@juan_g 的建议,我改进了我的模板,现在它是:
("v" "Vocabulary" entry
(file+headline (concat org-directory "/vocab.org")
"Vocabulary")
"* %^{The word} :drill:\n %t\n %^{Extended word (may be empty)} \n** Answer \n%^{The definition}")
我没有设法将第二个输入的默认值设置为第一个。我尝试了类似的东西,%^{Extended word (may be empty)|%\1}
但它返回^A
了,这没有帮助。
无论如何,这个改进的版本似乎已经可以使用了。