Org Mode 用于读书记录

一直用 Org Mode 来记录读书历史,之前都是用一个表格记录开始时间和结束时间, 类似这样:

*** TODO Book name                    :Tag:
    :LOGBOOK:
    CLOCK: [2020-02-09 Sun 22:15]--[2020-02-09 Sun 22:19] =>  0:04
    :END:

最近突然想到,Org Mode 有 clock 的功能,想着是不是可以用类似的方法可以记录开始和结束时间?

Org Mode 的 Clock 是用来记录每个任务的执行时间,精确到秒了,对于读书记录,有点细了, 而且只能有一个正在运行的 Clock,那读书和平时的任务就冲突了。

不知道大伙是怎么记录读书历史的呢?

我以前也喜欢阅读的时候用emacs计时,后来觉得太麻烦且意义不大。现在我更多的记录阅读时的思考。只记录开始阅读和读完的日期。

我的需求其实也是一个开始和读完的日期,就是想看有没有类似 CLOCK 的功能,但是精确度到天的就足够了

这样手动记一下就可以了,没必要折腾了

你可以多加个 todo 状态(started 什么的),然后切换到这个状态和 done 都自动记个时间

这个信息拿笔写在书上,比记在emacs里面靠谱

请接受我的核武器打击:

其实不太同意一些观点:

elisp太古老了,emacs太独特了,这种上古技术,就像一把绝世好剑,注定能用好它的人会很少。这意味着你写出来的东西很多人都看不懂,当然也就无法进行技术交流互动了,自己造轮子造到心累。

博主似乎不知道 emacs-china 的存在。

1赞

博客很不错呀 :+1:

乃要是喜欢阅读中文博客:尝尝这个:

ps 我自己看了,有喜欢的人在上面,也有不喜欢的。乃要自己分辨啊。

pps: 搜集大家的 Blog 喽!

我的建议是,仍然使用 clock 功能,然后利用 org-clock-report 来汇总,具体来说可以这样:

  1. 在一个 org-mode 文件中,在一个特定的 headline 下记录一本书的读书历史,比如:
** 阅读《GEB》
    :LOGBOOK:
    CLOCK: [2019-12-28 六 19:50]--[2019-12-28 六 20:16] =>  0:26
    CLOCK: [2019-12-27 五 19:50]--[2019-12-27 五 20:00] =>  0:10
    CLOCK: [2019-12-26 四 19:40]--[2019-12-26 四 20:14] =>  0:34
    CLOCK: [2019-12-25 三 19:50]--[2019-12-25 三 20:13] =>  0:23
    CLOCK: [2019-12-24 二 19:50]--[2019-12-24 二 20:18] =>  0:28
    :END:
  1. 在这个阅读条目下,新增这么一段内容
    #+BEGIN: clocktable :scope subtree :block untilnow
    #+END
  1. 将光标移动到 #+BEGIN 所在一行,执行 C-c C-c(或 M-x org-control-c-control-c),将会得到如下结果
    #+BEGIN: clocktable :scope subtree :block untilnow
    #+CAPTION: Clock summary at [2020-02-11 二 11:53], for now.
    | Headline        | Time |      |
    |-----------------+------+------|
    | *Total time*      | *2:01* |      |
    |-----------------+------+------|
    | \_  阅读《GEB》 |      | 2:01 |
    #+END

见文档:https://orgmode.org/manual/The-clock-table.html

至于你说的只能有一个正在运行的 Clock,那读书和平时的任务就冲突了,一个办法是用 org-capture 来新建任务,通过 :clock-resume 来在完成一个任务后恢复原来的计时任务,详见文档:https://orgmode.org/manual/Template-elements.html (搜索 clock-resume

1赞

李杀也不用 org-mode,手撸 html,都二十年了,我也想尝试一下。

谢谢,我感觉这样的话,和我期望的目标已经很接近了。

就是这个 Clock 还是要占用 Org Mode 任务的 Clock,不知道有没有办法能有多个 Clock 呢?

而且,如果同时在读多本书(时间精确度不需要太细),只有唯一的 Clock 也不能实现。

手动记一下

这样的话,就丢失了 Org Mode 的统计能力

我其实没太懂

  1. 每次 org-clock-in 都会在一个条目下生成一个时间记录,一个条目下是可以有多个时间记录的,不同的条目可以有自己的 clock 记录,不知道你说的多个 clock 是指什么
  2. 同时读多本书是指什么?在同一秒钟内,你面前有两本书都在看?

下面这样的记录不满足你的要求吗?


** 阅读《GEB》
    :LOGBOOK:
    CLOCK: [2019-12-28 六 19:50]--[2019-12-28 六 20:16] =>  0:26
    CLOCK: [2019-12-27 五 19:50]--[2019-12-27 五 20:00] =>  0:10
    CLOCK: [2019-12-26 四 19:40]--[2019-12-26 四 20:14] =>  0:34
    CLOCK: [2019-12-25 三 19:50]--[2019-12-25 三 20:13] =>  0:23
    CLOCK: [2019-12-24 二 19:50]--[2019-12-24 二 20:18] =>  0:28
    :END:

    #+BEGIN: clocktable :scope subtree :block untilnow
    #+CAPTION: Clock summary at [2020-02-11 二 11:53], for now.
    | Headline        | Time |      |
    |-----------------+------+------|
    | *Total time*      | *2:01* |      |
    |-----------------+------+------|
    | \_  阅读《GEB》 |      | 2:01 |
    #+END

** 阅读《世界观》
    :LOGBOOK:
    CLOCK: [2019-12-28 六 19:50]--[2019-12-28 六 20:16] =>  0:26
    CLOCK: [2019-12-27 五 19:50]--[2019-12-27 五 20:00] =>  0:10
    CLOCK: [2019-12-26 四 19:40]--[2019-12-26 四 20:14] =>  0:34
    CLOCK: [2019-12-25 三 19:50]--[2019-12-25 三 20:13] =>  0:23
    CLOCK: [2019-12-24 二 19:50]--[2019-12-24 二 20:18] =>  0:28
    :END:

    #+BEGIN: clocktable :scope subtree :block untilnow
    #+CAPTION: Clock summary at [2020-02-11 二 11:53], for now.
    | Headline        | Time |      |
    |-----------------+------+------|
    | *Total time*      | *2:01* |      |
    |-----------------+------+------|
    | \_  阅读《世界观》 |      | 2:01 |
    #+END

这个 clocktable 能不能放在一级 headline 下,然后统计所有二级 headline 的时间?像这样放在每个二级 headline下,每增加一个 「阅读 **」书的 headline,就要增加一行这个 clocktable 语句,感觉略繁琐。

可以的,我只是为了方便理解写了一个相对简单的示例而已。这个 report 是可以做很多设置的,看下我贴的文档链接吧。

一个示例如下:

* 读书记录

  #+BEGIN: clocktable :scope subtree :block untilnow
  #+CAPTION: Clock summary at [2020-02-11 二 17:01], for now.
  | Headline           | Time |      |
  |--------------------+------+------|
  | *Total time*         | *4:02* |      |
  |--------------------+------+------|
  | 读书记录           | 4:02 |      |
  | \_  阅读《GEB》    |      | 2:01 |
  | \_  阅读《世界观》 |      | 2:01 |
  #+END


** 阅读《GEB》
    :LOGBOOK:
    CLOCK: [2019-12-28 六 19:50]--[2019-12-28 六 20:16] =>  0:26
    CLOCK: [2019-12-27 五 19:50]--[2019-12-27 五 20:00] =>  0:10
    CLOCK: [2019-12-26 四 19:40]--[2019-12-26 四 20:14] =>  0:34
    CLOCK: [2019-12-25 三 19:50]--[2019-12-25 三 20:13] =>  0:23
    CLOCK: [2019-12-24 二 19:50]--[2019-12-24 二 20:18] =>  0:28
    :END:


** 阅读《世界观》
    :LOGBOOK:
    CLOCK: [2019-12-28 六 19:50]--[2019-12-28 六 20:16] =>  0:26
    CLOCK: [2019-12-27 五 19:50]--[2019-12-27 五 20:00] =>  0:10
    CLOCK: [2019-12-26 四 19:40]--[2019-12-26 四 20:14] =>  0:34
    CLOCK: [2019-12-25 三 19:50]--[2019-12-25 三 20:13] =>  0:23
    CLOCK: [2019-12-24 二 19:50]--[2019-12-24 二 20:18] =>  0:28
    :END:
1赞

新的问题: 怎么在此基础上,汇总每年的阅读总时间?类似如下:

| Headline               |      Time |       |
|------------------------+-----------+-------|
| *Total time*           |   *260:32:10* |       |
|------------------------+-----------+-------|
| 2019                   | 128:17:02 |       |
|   \_  阅读《道德经》     |           |  2:11 |
|   \_  阅读《庄子》       |           | 12:01 |
|   ...                  |           |   ... |
| 2020                   | 132:15:08 |       |
|   \_  阅读《曾国藩》     |           |  3:02 |
|   \_  阅读《大唐悬疑录》 |           | 10:01 |
|   ...                  |           |   ... |

解决了,加个 :maxlevel N.

还可以 :block thisyear,或者指定年份的话可以 :block 2017

再说一遍,看文档啊! ლ(╹◡╹ლ)

1赞

不好意思,我没有描述清楚。

  1. org-clock-in 已经能很好满足我的需求了,我也想用 org-clock-in

  2. 同时读多本书是指什么?

    就像我上面说的,记录不需要精确到秒,举个例子就是像你说的 《世界观》《GEB》 交错着看。有一条 CLOCK: CLOCK: [2019-12-12 Thu 10:21]--[2020-02-12 Wed 10:21] => 1488:00 对我来说就足够了,需要每次看的时候都 clock-in

  3. 主要的问题是:我通过 org-clock-in《世界观》 增加一个记录,当我在《世界观》 下使用 org-clock-in 时,会自动 org-clock-out《世界观》 的记录。

clock-in 一个记录时另外一个 clock-out 这个我觉得没有什么问题,设计就是这个样子……

如果你是要记录一本书从开始看到结束这中间的时间,而不是精确的在读的时间,那我觉得你不需要用 clock 功能,clock 功能应该也不是为此设计的。

你可以直接用 TODO -> DOING -> DONE 的状态变化:

  1. 创建任务的时候自动添加时间
  2. 通过设置可以让任务从非结束状态(TODO/DOING) 转到结束状态(DONE) 的时候再标记一下当前时间
  3. 利用这两个时间来计算持续时间

上述完整过程我不知道有没有现成的功能、工具支持,或许需要自己写一点代码。

另外,豆瓣读书的标记功能是不是就是你想要的?对任意一本书标记成在读,读完后标记一下读完,然后帮你计算一个读了多少天?