你怎么能对Org时钟表进行排序?

时间:2014-03-30 20:51:34

标签: emacs org-mode

以下是Emacs中的Org时钟表示例:

#+BEGIN: clocktable :maxlevel 1 :scope file :tcolumns 1 :formula %
#+CAPTION: Clock summary at [2014-03-30 Sun 22:47]
| Headline     |   Time |     % |
|--------------+--------+-------|
| *Total time* | *4:31* | 100.0 |
|--------------+--------+-------|
| Item A       |   1:07 |  24.7 |
| Item B       |   1:06 |  24.4 |
| Item C       |   2:18 |  50.9 |
#+TBLFM: $3='(org-clock-time% @2$2 $2..$2);%.1f
#+END:

我想按%列对表进行排序。这可能吗?

这是一个更复杂的例子:

#+BEGIN: clocktable :maxlevel 2 :scope file :tcolumns 1 :formula %
#+CAPTION: Clock summary at [2014-03-30 Sun 22:48]
| Headline           |   Time |     % |
|--------------------+--------+-------|
| *Total time*       | *4:31* | 100.0 |
|--------------------+--------+-------|
| Item A             |   1:07 |  24.7 |
| \__ Item A1        |   0:07 |   2.6 |
| \__ Item A2        |   1:00 |  22.1 |
| Item B             |   1:06 |  24.4 |
| \__ Item B1        |   1:06 |  24.4 |
| Item C             |   2:18 |  50.9 |
| \__ Item C1        |   2:18 |  50.9 |
#+TBLFM: $3='(org-clock-time% @2$2 $2..$2);%.1f
#+END:

在这种情况下,顶级项目应按其%值排序,但在每个子树中,次级别项目也应按其%值排序。

2 个答案:

答案 0 :(得分:3)

组织模式org-clock.el的时间计时代码不支持任何排序工具。函数org-clocktable-write-default通过非常严格的算法创建表,其中调整的变量有限,所有这些都在变量org-clocktable-defaults中。因此,动态块clocktable“按原样”生成组织表,http://orgmode.org/manual/The-clock-table.html包含详尽的设置列表。

您可以通过将光标放在3列并执行M-x org-table-sort-lines [n] umeric来手动排序第一个表。

关于使用“关于级别结构的知识”对第二个表进行排序 - 如果函数org-clocktable-write-default没有发生重大变化,似乎是不可能的。

答案 1 :(得分:0)

内置格式化程序org-clocktable-write-default仅按行对条目进行排序,而没有级别的概念。我一直在寻找相同的功能,最后编写了自己的formatter(实际上不是格式化程序),该文件按级别对条目进行排序。尽管它只能按名称或时间进行排序,但有一个局限性,因为按时间排序的结果与按百分比排序的结果基本相同,因此在您的情况下是可以接受的。