下面是我学习Org的记录,为便于理解,添了不少废话。Emacs用的是Windows版,所以都按Windows说键盘习惯和Emacs配置文件(init.el,在HOME目录的.emacs.d子目录下;据说其他系统是.emacs)。 1 引子看了不少Emacs和org-mode的学习笔记或教程,这些文章一般是先大赞org-mode一通,然后列出一堆lisp设置和快捷键。Emacs本来就被捧到天上去了,这下倒好,org-mode坐上了玉皇大帝的宝座,凡人靠近不得。所以我一直没学会使用org-mode,太神了,不敢碰。不过最近稍闲,不小心看了一些org-mode的文档,再稍仔细一看:什么神啊仙啊,浮云,都浮云。 Org只不过是一个工具,它的主要应用是:
和其他所有工具一样,到底要不要使用,用哪个功能,这完全取决于个人的需求。别人吹得神乎其神的东西,对你来说它可能是多余的或者干脆就是垃圾。比如说,如果建议MS Office专家去用Org做笔记,他会觉得你很无聊;习惯用手机管理日程的人会觉得Org的日程管理纯属多余;HTML/XML高级用户可能会觉得Org作为一种标记语言使用实在太小儿科。 我很少做笔记,用文本标记语言的机会也很少,所以主要关心org的日程管理功能。学后有两个感想,一是Org功能虽强并不是神,二是学用Org其实也简单。学习方法是:先看懂别人写的文本,然后模仿着写出类似的东西,有空再学一些快捷键改几个Emacs参数。 Emacs键盘命令的约定表示方法:
2 看懂Org文档婴儿学说话都是从模仿开始的,这个方法对所有学习应该都有效。学习org-mode不妨先看看别人写的东西。org-mode撰写的文档可以用任意文本编辑软件打开,最简单的org文档看起来是这样的: * Introduction** SummaryOrg is a mode for keeping notes, maintaining TODO lists, and doing project planning witha fast and effective plain-text system. ....** InstallationOrg is part of recent distributions of GNU Emacs, so you normally don’t need to install it.If, for one reason or another** ...* Document structureOrg is based on Outline mode and provides flexible commands to edit the structure of thedocument.** Outlines... 这些文本只有两种元素:标题和普通段落。 以 复杂一些的org文档可能看起来是下面这样的: # -*- org -*-#+TITLE: org-mode 备忘录#+AUTHOR: ZGUANG@LZU#+STARTUP: content#+STARTUP: indent#+TODO: TODO STARTED | DONE<<目录位置>>* 列表 + 选项1 + 选项2* 表格#+TBLNAME: 简单表格| Name | Value | SD ||-------+--------+------|| T1 | 1.2 | 0.14 ||-------+--------+------|| T2 | 2.3 | 0.11 |* STARTED [80%] 超链接** 网址链接[[www.gnu.org/software/emacs/][Download and install Emacs]] ** 文件链接[[file:c:/windows/desktop.ini][桌面配置文件]]** 内部链接[[目录位置][返回目录]]** TODO 其他链接* 代码块 :@待续:#+BEGIN_SRC Emacs-lisp (setq-default tab-width 4) ;设置TAB宽度为4字符#+END_SRC* TODO COMMENT 其他内容被注释的标题所包含的所有内容在文件导出时不会被显示 这些是普通文本,内容比飞机场还平坦,英文称为plain-text,比中文名称直观。但是这么平坦的内容如果粘贴和保存为文本文件,用Emacs打开,情况就不一样了:不仅有颜色,还有超链接。再用 上面的文本包含了些什么?虽然没有囊括org-mode的全部物件,但至少展示了几个方面的东西:
虽然东西不少,但对某人来说不是所有的都要用到,所以建议用到了再去了解。 3 进入Org模式安装Emacs的步骤就不说了,到这地步相信都有了一定的基础。直入正题吧:
(add-to-list 'auto-mode-alist '('\\.txt\\'' . org-mode))
后面这种方式对于使用Emacs编辑程序文件尤其方便,无需改变文件的后缀名。 4 标题和基于标题的编辑标题是Org组织文档的基础,它在Org中的作用怎么强调都不过分。要用好Org-mode首先要学会标题的定制和使用,必须的,其他杂七杂八的东西都可以暂缓,有些内容甚至可以当它们不存在。 4.1 设定标题对于传统意义的标题,Org的设定非常简单:在行首加星号,星号与标题文字之间至少有一个空格,星号的数量表示标题的级别,方法简单明了。你不用为字体、行间距、缩进等设置而烦恼,专心做自己的事情。事实上标题是Org文档句法中唯一不需要通过上下文关系就能确定的内容:一行文本是不是标题只需要看行首字符。例如: * 一级标题** 二级标题*** 三级标题正文内容* 其他一级标题 然而,为使标题适应更广泛的应用(不仅仅是表明文档的结构层次),Org对其进行了较复杂的定义。它的完整语法为: STARS KEYWORD PRIORITY TITLE TAGS 其中:
下面是一个完整标题的例子: ** TODO [#2] 优先级为2的待办事项 :@家庭作业: 虽然TODO关键词、优先级和标签属于标题的成分,但由于设定较复杂而且功能重要,有关内容将在后面介绍。 4.2 基于标题的文档编辑Org基于标题的文档编辑方式允许用户在非常简洁的显示模式下对某个或多个标题下的所有内容进行复制、粘贴、移动等操作,相当方便,真正实现了标题在文档管理中的组织者作用。 4.2.1 术语约定
4.2.2 在标题间移动光标
4.2.3 大纲的折叠与展开
4.2.4 标题编辑
4.2.5 使用TipsOrg-mode很多编辑命令的使用与光标所处的位置有关,同一个键盘命令如果光标位于不同文本环境可能会有不同的作用,这些命令称为局部命令。例如 5 用Org管理待办任务Org扩展了标题的定义,增加了关键词、优先级和标签等元素。这些元素不仅使标题在文档组织发挥更重要的作用,标题的功能也得到了扩展。Org对日程的管理就是基于标题进行的:只要会设定标题就可以用Org管理日程。虽然道理是这样,但要熟练使用Org的日程管理功能还掌握比较多的东西。 5.1 定制任务和状态5.1.1 设置TODO关键词TODO关键词是用来表示任务状态或类型的词。Org默认的TODO关键词只有两个:TODO和DONE,但很容易自定义其他的关键词。TODO关键词分为两种。一种是状态关键词,比如“等待”、“开始”和“完成”等,事件处理的过程中其处理状态按关键词顺序从前往后转换。另一种是类型关键词,按事件的轻重缓急分为“紧急”、“优先”、“普通”和“完成”等类型,但事件只有未完成和完成两种状态,所以处理结束后将直接转到“完成”类型,而“紧急”、“优先”和“普通”这些类型之间不能相互转换。 5.1.1.1 在Org文件中定义TODO关键词在Org文件中定义的TODO关键词仅适用于当前文件。状态关键词使用 #+TYP_TODO: 工作(w!) 学习(s!) 休闲(l!) |#+SEQ_TODO: PENDING(p!) TODO(t!) | DONE(d!) ABORT(a@/!)
5.1.1.2 在Emacs配置文件中定义TODO关键词如果经常使用Org进行日程管理,应该在Emacs配置文件中定义常用的TODO关键词,这些定义对所有文件都适用。方法是设置 (setq org-todo-keywords '((type '工作(w!)' '学习(s!)' '休闲(l!)' '|') (sequence 'PENDING(p!)' 'TODO(t!)' '|' 'DONE(d!)' 'ABORT(a@/!)'))) 5.1.1.3 改变TODO关键词的外观仅通过文字对于事件进行分类总嫌苍白无力,能用不同颜色的标签对日程表的事件进行强化分类就会好得多。这一功能可以通过设置TODO关键词的外观变量 (setq org-todo-keyword-faces '(('工作' . (:background 'red' :foreground 'white' :weight bold)) ('学习' . (:background 'white' :foreground 'red' :weight bold)) ('休闲' . (:foreground 'MediumBlue' :weight bold)) ('PENDING' . (:background 'LightGreen' :foreground 'gray' :weight bold)) ('TODO' . (:background 'DarkOrange' :foreground 'black' :weight bold)) ('DONE' . (:background 'azure' :foreground 'Darkgreen' :weight bold)) ('ABORT' . (:background 'gray' :foreground 'black')))) 5.1.2 标题型任务和子任务Org主要通过标题的
当然也可以在标题编辑时直接使用 5.1.3 非标题型子任务Org的任务主要由标题定制,但也提供了非标题型子任务的设置。对于以“[ ]”开头的列表, Org把它们当作复选框,复选框各选项的选择状态表示完成状态。例如:
复选框有三种状态:未完成、完成和中间状态(如上),可以使用快捷键 Org自动将复选框列表的完成状态纳入上一级任务的监控,具体使用说明参看任务进度监控。 5.2 任务优先级你可以设置足够的TODO关键词和外观用来区分待办任务的类型、状态和优先级,但是这不仅使任务设置复杂化,还会导致任务间的关系十分混乱。Org为任务优先级留有专门的位置,即标题的 不同优先级的任务在产生日程表时按优先级别先后排列,而其他时候则没有任何差别。为了充分发挥任务优先级的作用,最好在Emacs配置文件中对优先级的范围和外观进行自定义,例如: ;; 优先级范围和默认任务的优先级(setq org-highest-priority ?A)(setq org-lowest-priority ?E)(setq org-default-priority ?E);; 优先级醒目外观(setq org-priority-faces '((?A . (:background 'red' :foreground 'white' :weight bold)) (?B . (:background 'DarkOrange' :foreground 'white' :weight bold)) (?C . (:background 'yellow' :foreground 'DarkGreen' :weight bold)) (?D . (:background 'DodgerBlue' :foreground 'black' :weight bold)) (?E . (:background 'SkyBlue' :foreground 'black' :weight bold)))) 在标题上使用 5.3 任务标签对于Org老手来说,用TODO关键词和优先级区分任务就足够了。如果不能满足需要,还可以使用标签。在Org中,标签定义于标题行末端,位于两个或两个以上冒号之间,它为待办任务提供了进一步的分类方法。 5.3.1 标签命名规则
* HEADLINE 1 :label1:
** HEADLINE 2 :label2:label3: 5.3.2 标签编辑命令标签可以直接在标题后手工输入,Org也提供了快捷的编辑命令:
5.3.3 预定义标签和TODO关键词一样,标签可以预定义并设置快捷选择键,在使用标签编辑命令时将弹出选择菜单:
(setq org-tag-alist '(('@work' . ?w) ('@home' . ?h) ('laptop' . ?l)))
#+TAGS: @work(w) @home(h) @tennisclub(t) laptop(l) pc(p) 5.3.4 标签的继承特性设置了标签的任务能自动将所设标签属性传递给子任务,称为标签的继承性。这一特性使标签尤其适用于任务的分类。 * TODO 任务1 :紧急任务:** TODO 子任务1 :特急:** TODO 子任务2 子任务1和子任务2无需显式贴上 标签外观也可以修改,方法同 TODO 关键词的外观修改差不多,设置 org-tag-faces 变量。 5.4 任务间的依赖关系5.4.1 任务属性标题不可能包罗万象,一些任务属性如任务ID不能通过任务标题设定。这些属性可以通过Org文档的内容属性设定.属性定义以PROPERTIES名称开头,以END结束,每项内容均使用两个冒号括起来,如: * TODO 今日事物 :PROPERTIES: :ID: today-todos :ORDERED: t :COOKIE_DATA: todo recursive :END: 5.4.2 简单任务关系现版Org-mode实现了两种简单任务关系的设置:
要使用第一种依赖关系需要打开 (setq org-enforce-todo-dependencies t) 要使用第二种依赖关系则需要在主任务下打开任务的 * TODO 请客吃饭 :PROPERTIES: :ORDERED: t :END:** TODO 确定客人时间** TODO 订饭店** TODO 点菜** TODO 买单 请客吃饭下的各项工作得按顺序去做。 5.4.3 复杂依赖关系对于大型项目,各项任务间的关系错综复杂,利用上面的简单任务关系根本无法进行有效项目进程规划。使用 5.4.3.1 触发事件
5.4.3.2 阻止事件
5.5 预约任务时间5.5.1 Emacs日历Emacs提供了桌面日历,不仅附带有公共事件日志(节假日等),还可以帮助你管理预约事件和跟踪项目时间。Emacs日历使用独立的缓冲区和主模式(Calendar模式),执行 下面只介绍和日程安排相关的日历操作,如果你觉得其他的一些用法如日出日落、月圆月缺、玛雅日历等也和你的日程安排有关,请查看 Emacs Manual 。 5.5.1.1 在日历中移动光标移动标准时长:
转到周、月、年的开始或结束日期:
转到指定日期:
5.5.1.2 卷动日历和移动鼠标有些差别。
5.5.1.3 使用农历Emacs日历可以转换农历,不过现在你不需要自己去做了,下载使用cal-china-x 即可。下载后放到某个位置,如 (add-to-list 'load-path '~/.emacs.d/addons')(require 'cal-china-x) 5.5.1.4 节日和日志为简单起见,凡在日历上标示的事件(节日、生日、纪念日或其他)下面都称为节日:
Emacs日历默认不标记节日,如果希望打开日历就能看到节日标记,设置一下: (setq mark-holidays-in-calendar t) 公共“节日”很多,一些可能是你根本不care的,如果这些都出现在日历和日程表中,肯定很烦人。所以还得定制一下,只显示自己设定的日历事件,比如: (setq my-holidays '(;;公历节日 (holiday-fixed 2 14 '情人节') (holiday-fixed 9 10 '教师节') (holiday-float 6 0 3 '父亲节') ;; 农历节日 (holiday-lunar 1 1 '春节' 0) (holiday-lunar 1 15 '元宵节' 0) (holiday-solar-term '清明' '清明节') (holiday-lunar 5 5 '端午节' 0) (holiday-lunar 7 7 '七夕情人节' 0) (holiday-lunar 8 15 '中秋节' 0) ;;纪念日 (holiday-fixed 1 1 '儿子生日') (holiday-lunar 2 2 '老婆生日' 0) (holiday-lunar 3 3 '我的生日' 0)))(setq calendar-holidays my-holidays) ;只显示我定制的节假日 其中:
Emacs可以使用日志(Diary)方式管理日程,方法是设置 5.5.2 Org-mode时间戳的组成时间戳由尖括号
注意“今天”和“默认日期”所表示的意义是不同的,例如:
由两个断线“–”连接起来的两个时间戳表示时间段,如: 除以上标准用法外,一些不规则时间戳可以使用Emacs日志风格的字符串表示,同样放在方括号或尖括号中。常用的有:
5.5.3 产生时间戳时间戳可以直接输入,但最好使用快捷命令(期间要调用Emacs日历)产生:
5.5.4 预约任务时间5.5.4.1 安排开始时间(SCHEDUALED)表示任务将在指定的时间开始。计划时间通过 SCHEDULED: <2013-06-25 周二> 一个任务在计划时间到达时将在每天的日程表上出现,直到任务标记为 SCHEDULED: <2013-06-25 周二 -2d> 注意这里“计划时间”和通常所说的安排一个任务的时间不一样。如果要指定一个任务在确切的时间开始,直接输入时间戳就可以了。 5.5.4.2 设定截止时间(DEADLINE)任务应该设置完成的截止时间。截止时间通过 DEADLINE: <2013-06-26 周三 -5d> 日期后面的 (setq org-agenda-skip-deadline-prewarning-if-scheduled t) 忽略开始时间提醒的设置为: (setq org-agenda-skip-scheduled-delay-if-deadline t) 5.5.4.3 安排周期重复任务的时间和前面的重复任务时间戳没什么不同,只不过要注意表示重复和表示提醒安排的字符串的顺序,表示重复的在前,如: DEADLINE: <2013-11-01 周五 +1m -3d> 5.6 任务进程监控与记录5.6.1 任务进度监控5.6.1.1 显示进度在标题或复选框列表(不一定是任务)的任何位置输入 5.6.1.2 设置统计方式默认情况下任务的进度监控仅计算下一级子任务,要统计所有级别的子任务应在合适的位置设置 :PROPERTIES::COOKIE_DATA: todo recursive:END: 如果监控的是复选框任务,把 5.6.2 状态更改记录如果TODO关键词定义时设置了时间标签选项(!),任务状态发生改变时将在该任务的下方记录下状态改变的时间。这项功能很容易使用。如果不想记录某个任务及其子任务的状态更改,可以在任务下设置属性 * 本项任务无需记录状态改变 :PROPERTIES: :LOGGING: nil :END: 5.6.3 关闭任务如果觉得通过设置TODO关键词方式记录的状态更改时间很烦人(每次修改都记录,即使误操作了也要手工删除),那你应该用 (setq org-log-done 'time) 如上设置后每次将任务改变为 DONE 状态时在任务下添加一行内容 如果项目结束时你还想对它写点评价子类的话,可以设置 (setq org-log-done 'note) 这样每次任务结束时Org就会提示你输入备注,并把它放到“Closing Note”标题下。 5.6.4 工作计时和癖好记录我仅粗略看了一下工作计时这个功能的一些介绍。按我的理解,它主要用于写作上,允许你记录和计算你趴在某个标题下的时间。一般人可能不干这么无聊的事情。我对癖好记录(habits tracking)也没什么兴趣。自己看The Org Manual 吧。 5.7 使用日程表管理任务5.7.1 日程表视图(Agenda views)Org-mode不要求所有的待办任务都整齐排列到一个文件中,更没有设立专门的诸如.todo类型的文件,因为它的作者们认为我们平时要处理的事情多数都是在记笔记中产生的。任务可以随时随地定制,它们会散落到各个角落(即文件),因此必需使用某些方式把它们收集起来并进行排序和显示。Org能够使用一些标准选择任务并显示在独立的缓冲区中。它提供了7种不同的显示模式:
5.7.2 日程表文件Org虽然没有定义专门的日程表类型的文件,但要产生特定的日程表总不能天南海北的胡乱查找任务,所以要先指定一些(org)文件为搜索范围。这可以通过设置 (setq org-agenda-files (list 'D:/agenda')) 会把
5.7.3 在日程表上查看任务Org-mode产生日程表的快捷键默认不安装,得自己设置: (global-set-key '\C-ca' 'org-agenda) 使用 (setq org-agenda-ndays 21)(setq org-agenda-include-diary t) 5.7.4 用Org文件定制特殊日程表事件这是个很fancy的功能,类似于Emacs日历的日志文件管理方式,值得使用。比如: * 纪念日#+CATEGORY: Ann%%(org-anniversary 1999 1 1) 结婚 %d 周年纪念%%(org-anniversary 2000 2 2) 儿子 %d 岁生日 保存为一个独立的org文件,然后加入你的日程表文件列表,产生日程表时会这些事件。 |
|
来自: yusihai719 > 《emacs》