Org 提供可在 Emacs 批处理模式下调用的命令,用于获取日程内容。通过该命令行接口,可自动化生成日程并进行后续处理或打印。
org-batch-agenda 会以 ASCII 格式生成日程视图并输出到标准输出。该命令接受一个字符串参数。若参数为单个字符,Org 会将其作为 org-agenda-custom-commands 的按键,与日程调度器中可用的命令一致(见 The Agenda Dispatcher)。
以下命令行示例可直接将 TODO 列表发送至打印机:
emacs -batch -l ~/.emacs -eval '(org-batch-agenda "t")' | lpr
若字符串参数长度大于等于 2,Org 会将其作为标签/TODO 匹配条件。例如,以下命令行打印带有 ‘shop’ 标签、但不含 ‘NewYork’ 标签的条目:
emacs -batch -l ~/.emacs \
-eval '(org-batch-agenda "+shop-NewYork")' | lpr
动态修改参数的示例:
emacs -batch -l ~/.emacs \
-eval '(org-batch-agenda "a" \
org-agenda-span (quote month) \
org-agenda-include-diary nil \
org-agenda-files (quote ("~/org/project.org")))' \
| lpr
该命令仅从 ‘~/org/projects.org’ 文件生成未来 30 天的日程。
如需结构化处理日程输出,可使用 org-batch-agenda-csv ,输出字段如下:
条目分类
标题,不含 TODO 关键字、标签和优先级
日程条目类型,可选值:
todo | 通过 TODO 匹配选中 |
tagsmatch | 通过标签匹配选中 |
diary | 从日记导入 |
deadline | 截止日期 |
scheduled | 计划时间 |
timestamp | 由时间戳选中的约会 |
closed | 在指定日期关闭的条目 |
upcoming-deadline | 截止日期临近提醒 |
past-scheduled | 顺延的计划条目 |
block | 包含对应日期块的条目 |
TODO 关键字(如有)
所有标签(含继承标签),以冒号分隔
相关日期,格式如 ‘2007-2-14’
时间,格式如 ‘15:00-16:50’
包含额外计划信息的字符串
优先级字母(如有)
计算得出的数字优先级
如果议程项的筛选是基于时间戳(包括带有 ‘DEADLINE’ 和 ‘SCHEDULED’ 关键字的条目),那么 Org 会在输出中包含日期和时间。
如果议程项的筛选是基于时间戳(或截止日期 / 计划日期),那么 Org 会在输出中包含日期和时间。
以下是一个用 Perl 编写的后处理脚本示例。它读取 Emacs 输出的 CSV 内容,并以带复选框的形式打印出来:
#!/usr/bin/perl
# 定义要运行的 Emacs 命令
$cmd = "emacs -batch -l ~/.emacs -eval '(org-batch-agenda-csv \"t\")'";
# 执行命令并捕获输出
$agenda = qx{$cmd 2>/dev/null};
# 遍历所有行
foreach $line (split(/\n/,$agenda)) {
# 拆分字段
($category,$head,$type,$todo,$tags,$date,$time,$extra,
$priority_l,$priority_n) = split(/,/,$line);
# 处理并打印
print "[ ] $head\n";
}