快速捕获新想法和任务,并且将相关材料与之相链接的能力是任何一个组织管理系统中非常重要的部分.Org使用'remember.el'包来创建任务并且存储相关文件到一个特定目录中.一旦要在组织系统中移动任务和项目,只需要把整个项目树结构打包即可,方便而快速
Remeber包是由John Wielgley编写的,它可以使你在不怎么打断工作流的情况下快速记录.这是一个很棒的途径来新增短笺和任务到Org文件中去.remember.el包被集成到Emacs23中了,而在Emacs22则没有集成.详细信息可以参见http://www.emacswiki.org/cgi-bin/wiki/RememberMode
Org极大地扩展了Remember的可用性:你可以根据不同的记录类型定义不同的模板,将不同模板的内容存放在配置好的文件和标题下.当然,你也可以交互地选择把记录放在哪个位置上.
- (org-remember-insinuate)
- (setq org-directory "~/path/to/my/orgfiles/")
- (setq org-default-notes-file (concat org-directory "/notes.org"))
- (define-key global-map "\C-cr" ’org-remember)
最后一行将org-remember命令绑定到全局key序列Ctrl+c r上.org-remember命令本质上的工作就是调用Remember,不过它也会自动做一些事情,比如:如果我们标识了一块文本块,你可以让它自动拷贝这块块文本块到Remember的缓冲区中. 它也允许你在在缓冲区中打开remember记录将要被保存在的目标文件并跳转到指定标题的位置:你只需要在调用org-remember时加上一个前缀参数即刻.如果你使用了两个前缀参数,Org会跳转到最后哪个Remember记录被保存的地方.
Remember缓冲区实际上使用org-mode作为它的major mode,因此它支持所有org-mode的编辑特征.在此基础上,一个名为org-remember-mode的minor mode被激活,这个minor mode的目的只有一个,那就是使用org-remember-mode-map中定义的keymap来覆盖Org-mode中原有的一些键绑定设置.
你也可以从agenda视图中调用org-remember,方法是按下k r键组合.通过这种方式调用org-remember时,若再模板中定义了插入时间戳,那么默认会填入agenda中光标所在的日期,而不是现实的日期.
为了与Org整合,你可用使用模板来产生不同类型的Remember记录.例如,如果你想使用一个模板来建立标准的TODO条款,而用另一个模板来建立日志条款,使用第三个模板来收集随机产生的想法.你可用这样配置:
- (setq org-remember-templates
- ’(("Todo" ?t "* TODO %?\n %i\n %a" "~/org/TODO.org" "Tasks")
- ("Journal" ?j "* %U %?\n\n %i\n %a" "~/org/JOURNAL.org")
- ("Idea" ?i "* %^{Title}\n %i\n %a" "~/org/JOURNAL.org" "New Ideas")))
这里面,第一个字符串只是一个名字,接下来用一个字符指定了如何选择模板.一般来说,通常这个字符会是名字的第一个字符.再下一个字符串定义了模板的内容.再接下来是两个可选字符串,给出了新增加的记录应该放在哪个文件的哪个标题下. 如果没有指定文件名或者文件名为nil的情况下,该文件默认为org-default-notes-file值中所定义的文件名, 如果没有指定标题名称,则标题默认为org-remember-default-headline中所定义的值. 如果文件名不是绝对路径,那么它的路径是相对于org-directory来定的.
标题这一项也可以为符号top或者bottom,这代表把记录作为第一层,放到文件的开头(top)或者文件的结尾(bottom).标题也可以为值date-tree,这样的话org文件中会自动建立一个年为第一层,月份为第二层,天位第三层的树,而新增的记录就会根据当前的日期,填入树中.
第六个元素是一个可选项,它界定了在哪些情景下我们才可以选择这个模板.这个元素可以是一个major mode的列表或function. org-remember首先会检查这个function是否返回t,或者我们是否处于major mode列表中所列的某个major mode中,然后将不满足条件的模板排除掉.若模板中这一项没有定义或者这一项的值为nil或t,那么该模板总是可以选择的.
- (setq org-remember-templates
- (("Bug" ?b "* BUG %?\n %i\n %a" "~/org/BUGS.org" "Bugs" (emacs-lisp-mode))
- ("Journal" ?j "* %U %?\n\n %i\n %a" "~/org/JOURNAL.org" "X" my-check)
- ("Idea" ?i "* %^{Title}\n %i\n %a" "~/org/JOURNAL.org" "New Ideas")))
第一个模板之后当org-remember是从emacs-lisp-mode的缓冲区中被调用时才是可用的.第二个模板只有当函数my-check返回值为t时才可用.第三个模板在任何情景下都是可用的.
当你执行M-x org-remember (or M-x remember) 来调用remember记录事情的时候, Org会提示输入一个键来选择模板(如果你定义了超过一个模板的话),然后,缓冲区就会显示为类似下面这样
* TODO |
* %^{提示语句} |
Link type | Available keywords |
如果你改变主意想换另一个模板,可以在remember缓冲区中调用org-remember.然后你可以选择新的模板,而以前的信息会自动填充入这个新的模板
当你用Remember完成了一笔记录的输入,你需要按C-c C-c来保存这条记录. 如果你再Remember缓冲区中已经打开了计时,那么你首先会被询问是否想要关掉计时.如果你选择 n,那么在记录保存后,依然在计时.
Remember会把新增的记录添加到指定的文件中指定的标题下.如果在定义模板时没有指定文件和标题,那么会使用默认的文件和标题. 随后Remember被关闭,窗口回到调用Remember之前的情景中. To re-use the location found during the last call to Remember, 使用C-0 C-c C-c退出Remember缓冲区. 使用C-2 C-c C-c退出则会将记录作为当前计时项目的子节点. C-3 C-c C-c退出则会将记录作为当前计时项目的兄弟节点.
如果你想把记录直接保存到另一个地方,使用C-1 C-c C-c而不要退出Remember. Remember首先会提示你输入目标文件-如果你直接按RET,那么默认为模板中定义的文件. 然后命令提供了目标文件中的标题树,这时光标放在模板中定义的标题上(如果在模板中定义了标题的话).你可以立刻按RET来把记录存放在此处,也可以通过下面的按键来选择另一个不同的位置来存放.
TAB Cycle visibility. |
Cursor position Key Note gets inserted |
在插入文本到树之前,程序保证插入的文本会有一个标题,也即是说,第一行会以* 开头. 如果第一行不是以* 开头的话,那么会根据当前日期自动生成一个标题. 如果你在Remember标题下把文本的缩进都调好了, 而文本在插入树时却发现不是放在第一层,Remember会自动帮你把记录降级以适应所需要的缩进.