Emacs的org-mode[tags]

标签(tags)在管理东西方面有很多应用。比如blog,flickr,前阵子还在小众软件上看到用标签管理文件的软件。

本身,我们在做org管理文件的时候就已经把不同的东西放在不同文件里了。比如我们建了home.org,work.org两个文件,把在家的工作做在home.org里,把公司的放在work.org里面。

但这种用文件来分类的方法有不便的地方:其一,如果我想到一个新的分类,那就必须新建一个文件;其二,如果我有一个工作同时属于两个文件,怎么办?

于是,tags来了。

tags只做一件事:标记这个项目是什么?它的展示样式是这样的

TODO 跟特留尼西特握手                    :苦差:薪水:逃不掉:

你可以按C-c C-c组合键,这里在mini buffer(就是下面的小框)会出现”Tags:”,等待你输入标签,支持中英文。

就是这么简单。

tags的继承

如前所述,本来我们的想法是用文件来进行不同的分类的,也就是说实际上文件就是一种分类,放在work.org中的项目本来就应该拥有work属性,我不想在每一个项目上添一个:work:的蛇足。

这就得说到tags继承的org特性了。

tagin

如图,叶项目“新门”本身有一个属性”苦差”,同时它继续了两个属性,一个来自它的父项目apartment,还有一个来自文件属件work。给一个文件设置属性,需要在文件头加上一行。

#+FILETAGS: :work:

更简单的方法

如果有一些常用的标签不想每次都敲。可以使用orgmode的标签快捷键功能.比如你可以用k来代表苦差,用s来代表薪水。跟很多org设置一样,可以在两个地方完成这些设置。

一个是.emacs文件。它的语法是这样的。

(setq org-tag-alist '(("苦差" . ?k)
                         ("薪水" . ?s)))  

还有一种做法是在文件的头部加声明。类似这样:

#+TAGS: @office(o) @home(h) @traffic(t)
这里,括号里面的是快捷键

它们的分别在于,前者对于本机所有的org文件都有效。后者刚只对当前文件有效。
这时再给一个项目加标签就会变成这样

tag2

敲相应的快捷键就可以了。

搜索查看tags

使用tags来给项目打标签当然不是为了打打好看而已。我们是要用的。最常用的用法就是用tags来表示context的概念。

江湖传言把事情分类来做能提高工作效率。即是说,如果你有十个电话要打,十个email要回。最好不要打一个电话回一封email再打一个电话再回 一封email,比较好的做法是先打十个电话,然后再连回十个email。还有一个秘笈,是威尔史密斯在<当幸福来敲门>里面教给我们的,如果你不把话筒 放下来,能节约很多打电话的时间。

这就需要我们能够把十个电话项目都取出来,在文件里面一个一个找:phone:标签?别傻了。敲一个C-c a吧,然后再敲m,下方的mini buffer里出现了几个大字”MATCH:”,这里输入”phone”,回车。你的列表中所有文件里的带有phone标签或者属性的项目就都列出来了。 不想要所有项目,只想看TODO?简单,C-c a后不要加m,加个M吧。

输入关键词的时候还可以使用与或非运算,算符如下:phone&work,同时有两个标签的。phone|work,有两个标签之一的。phone-work有phone标签而没有work标签的。

这里,C-c a表示你要求调出agenda view,后面那个命令则指明你想要调出什么样的view。敲后C-c a之后,不要急着敲m,可以看看org都提供了哪些view,我们熟知的有C-c a a,C-c a t等。

不要每次都输关键字

这样看起来,C-a a a也是一种检索,只不过它们是org-mode内置而已,那我也有一些数据视图是经常要用的,有一些是没事就搜一下的。我也要敲三个键就弄出来,不想每次都敲tags。

嘿嘿,改源码把我自己的搜索置进去。倒是不用着急,读代码总是麻烦的。事实上org-mode已经开放了一个自定义view的接口。唤作org-agenda-custom-commands。可以在.emacs文件中设置自己的。

   (setq org-agenda-custom-commands
'(("k" "work haha"
((agenda "")
(tags-todo "work")
(tags-todo "支持")))))  

这段代码表示您定了一个可以用C-c a k 调出来的view,它的描述是”work haha”,view中包含三段数据。最上面是agenda,就是调C-c a a出来的界面,然后一个分隔行,列出tags为“work”的项目,再一个分隔行,列出tags为支持的项目。

官方的说法是提供了一个GUI界面,M-x customize-variable RET org-agenda-custom-commands可以打开。界面如下:

taggui

但我个人还是喜欢使用.emacs文件手写配置。不是我装13,而是GUI界面设计得实在太难用了,我到现在也没弄明白它的用法。