日常用org最多的地方就是日程管理,能够管理日程的软件很多,手机电脑都有很好的工具,至于为什么我选择使用emacs,因为我喜欢纯文本。功能强大和易用本身就是矛盾,使用纯文本算是简单易用,使用org又可以保证一定的功能性。大家也不需要把org看的很高端,不过还有另一个最重要的原因促使我们使用,那就是可以在新人面前装一个x。总之,期待阅读此文章的爱好者能够将非主流进行到底,无论以后转行或者转职,都持续关注并坚持使用。
纸上得来终觉浅,绝知此事要躬行。
日程定义
定义状态
系统内置状态有两种: TODO和DONE
强大之处在于可以任意定义状态
例如:
#+SEQ_TODO: TODO(T!) | DONE(D@) CANCELED(C@/!)
#+SEQ_TODO: BUG(b) KNOWNCASE(k) | FIXED(f)
将定义放在文档任意位置,我选择放头部。
重要: 光标移动至定义处,使用 C-c C-c使定义生效。
将光标移动至任务处,使用C-c C-t 打开缓冲区,长得像下图这个样子,此时即可选择自定的状态。
状态改变之后,变成如下的状态
***** TODO Check compute node in demo center
- State "TODO" from "" [2018-03-16 Fri 09:34]
- 可以定义多组状态序列,每个“#+SEQTODO”行定义一组
- 状态之间用空格分隔
- 可以在()中定义附加选项,包括:
- 字符:该状态的快捷键
- !:切换到该状态时会自动增加时间戳
- @ :切换到该状态时要求输入文字说明
- 如果同时设定@和!,使用“@/!”
- 用“|”分隔未完成状态和已完成状态。未完成状态在查询待办事项时会列出。
快捷键 | 功能 |
---|---|
C-c C-t | 打开状态切换buffer |
S-LEFT/RIGTH | 切换状态 |
优先级
org中有三种优先级,分别为A,B,C,在安排日程时,可以按照优先级进行排序。
快捷键 | 功能 |
---|---|
S-UP/DOWN | 优先级设置 |
例:
***** TODO [#A] Check Network connection
***** TODO [#B] Check Nic status
***** TODO [#B] Check Storage status
***** TODO [#C] Check Power supply
子任务
org中,可为某个日程设置若干子任务。支持在上级任务上增加标记,当子任务状态发生改变时,自动更新上级任务完成情况。有两种表现形式,百分比和分数, 例如: [80%] 和 [3/8]
设置方式实在上级标题中,任意位置插入[%] [/], 当子任务发生改变时,自动跟新其中的数字。
例:
两种显示
***** Blade[25%] [1/4]
****** DONE [#A] Check Network connection
****** TODO [#B] Check Nic status
****** TODO [#B] Check Storage status
****** TODO [#C] Check Power supply
此处需注意:
- 当子任务状态改变时,只更新上一级,不可级联。
- 当所有子任务完成,只能标记为100% ,并不会标记为DONE。如果需要自动设定为完成,可以通过更新emacs配置文件进行设置,作者不喜欢这么做,请自行查找。
***** Blade[1/4]
****** DONE [#A] Check Network connection
****** TODO [#B] Check Nic [1/2] status
- State "TODO" from "" [2018-03-17 Sat 19:29]******* TODO Nic1
******* DONE Nic2
****** TODO [#B] Check Storage status
小提醒:
org 是文本,所以copy一个区域时 ,使用标准复制(M-w)是全文本复制,被隐藏的子标题也会被复制下来,如果希望只将显示的文本复制而不复制隐藏的子标题,使用快捷键 C-c C-x v (org-copy-visible)
非标题的子任务
上一个主题是介绍的子任务是以子标题的形式。如果希望非主题的子任务,可以使用列表,并在列表开头添加 “[ ]” 作为复选框,形成局部的子任务。
例如:
****** TODO [#B] Check Storage status [2/3]
- State "TODO" from "" [2018-03-17 Sat 19:29]
- [X] HD
- [X] SSD
- [ ] Block
快捷键 | 功能 |
---|---|
C-c C-c | 改变复选框状态 |
M-S-Rec | 增加一个子项 |
M-Rec | 增加一个子项(不带复选框) |
任务查询
在org 基础功能中,已经介绍过,使用C-c /, 可列出多种检索方式,如下图
选项 | 功能 |
---|---|
[t]odo | 列出所有TODO状态的task |
[T]odo-kwd | 根据key word 选择状态,可以多个状态, 例如 TODO|DONE |
时间
任务可以设置两种,计划时间(SCHEDULED)和截止时间(DEADLINE)。
首先,先熟悉一下Emacs的时间戳
时间戳
使用”< >“进行标记, 说多没用,看例子:
<2018-03-16 Fri>
<2018-03-17 Sat 21:00>
<2018-03-18 Sun 10:00-12:00>
<2018-03-16 Fri 10:00 +1w>
可以标记时间点和间隔,间隔用天(d)、周(w)、月(m)年(y)来表示
应为是文本,可以手工输入,或者使用 C-c .来创建。
选项 | 功能 |
---|---|
C-c . | 创建时间戳(在日历中,使用S-Left/Right选择日期,输入时间) |
C-c < | 当前日期 |
C-c > | 查看日历 |
C-c ! | 与任务不相关的日期 (以中括号标记) |
S-Left/Right | 更改日期,天为单位 |
S-Up/Down | 改变光标所在的位置的时间单位,用来单独修改时间和日期 |
用两个连续的“--”将两个时间戳连接起来表示时间段
<2018-03-17 Sat>--<2018-03-19 Mon>
选项 | 功能 |
---|---|
C-c . | 连续使用可以创建时间段 |
C-c C-y | 计算间隔 |
org的时间戳
可以为任务设置计划时间与截止时间。
选项 | 功能 |
---|---|
C-c C-s | 设置计划时间 |
C-c C-d | 设置截止时间 |
****** TODO [#C] Check Power supply
DEADLINE: <2018-03-18 Sun 21:00> SCHEDULED: <2018-03-18 Sun>
设置timer
给org插入一个count down的 timer,用来给某个任务提示。
使用C-c C-x ; 开始一个timer。开始时,会在状态栏倒计时;结束时,会在buffer中提示。例如:
TODO [#C] Check Power supply: time out
属性
C-c C-x P 可以为任务设置属性。例如:
****** TODO [#B] Check Storage status [2/4]
- State "TODO" from "" [2018-03-17 Sat 19:29]
:PROPERTIES:
:P: 1
:Mail: send
:END:
* CD collection
:PROPERTIES:
:NDisks_ALL: 1 2 3 4
:Publisher_ALL: "Deutsche Grammophon" Philips EMI
:END:
属性可继承,并可以全局设置,文件所有内容都会继承,在文件头添加
key后面添加_All可以设置该key的可选value
#+PROPERTY: P_ALL 1 2 3 4
使用+号为一个属性添加新的value
#+PROPERTY: var foo=1
#+PROPERTY: var+ bar=2
* CD collection
** Classic
:PROPERTIES:
:GENRES: Classic
:END:
*** Goldberg Variations
:PROPERTIES:
:Title: Goldberg Variations
:GENRES+: Baroque
选项 | 功能 |
---|---|
C-c C-x P | 设置属性,k-v键值对 |
C-u M-x org-insert-drawer | 插入一个空的属性语法块 |
C-c C-c | 属性操作列表 |
C-c C-c s | 设置当前属性 |
C-c C-c d | 删除当前属性 |
C-c C-c D | 全局删除当前属性 |
S-Left/Right | 切换下一个候选的value |
特殊的属性:
ALLTAGS All tags, including inherited ones.
BLOCKED "t" if task is currently blocked by children or siblings.
CLOCKSUM The sum of CLOCK intervals in the subtree. org-clock-sum
must be run first to compute the values in the current buffer.
CLOCKSUM_T The sum of CLOCK intervals in the subtree for today.
org-clock-sum-today must be run first to compute the
values in the current buffer.
CLOSED When was this entry closed?
DEADLINE The deadline time string, without the angular brackets.
FILE The filename the entry is located in.
ITEM The headline of the entry.
PRIORITY The priority of the entry, a string with a single letter.
SCHEDULED The scheduling timestamp, without the angular brackets.
TAGS The tags defined directly in the headline.
TIMESTAMP The first keyword-less timestamp in the entry.
TIMESTAMP_IA The first inactive timestamp in the entry.
TODO The TODO keyword of the entry.
查看属性的好办法是使用column view,使用C-c C-x C-c (org-columns)开启。
选项 | 功能 |
---|---|
r | 重新载入 |
q | 退出 |
n/p | 切换value |
e | 编辑value |
v | 显示value |
a | 编辑可能的value |
S-M-right | 插入一个vlaue |
S-M-left | 删除当前column |
命令如下:
选项 | 功能 |
---|---|
r | 重新载入 |
q | 退出 |
n/p | 切换value |
e | 编辑value |
v | 显示value |
a | 编辑可能的value |
S-M-right | 插入一个vlaue |
S-M-left | 删除当前column |
可以使用两种方式定义:
#+COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
** Top node for columns view
:PROPERTIES:
:COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
:END:
列定义的语法 如下:
%[width]property[(title)][{summary-type}]
width: 显示字符数
property: 属性
title : 显示的title
summary-type: 聚合的定义,例如 {+} {+;%.1f} 等。
属性功能有点多,参考官方文档深挖。
Drawer
属性(property)是特殊的drawer,可以通过C-c C-x d添加任意drawer。
此处不详细介绍了。
** This is a headline
Still outside the drawer
:DRAWERNAME:
This is inside the drawer.
:END:
After the drawer.
最后
至此,可以用org来管理日程了,其他功能太多,不详细介绍了。
设置了日程,如何查看呢,下一篇着重介绍 Agenda。