OmniFocus的任务执行时间统计脚本

#问题
前段读了《奇特的一生》, 也尝试了一段柳比歇夫时间事件记录法, 感觉不错. 近几年来一直使用OmniFocus作为GTD工具软件, 虽然不算重度使用者, 但也觉得挺顺手离开它会不舒服. 如果能够直接在OmniFocus中记录任务的执行时间, 并统计出任务和项目的执行时间就更好了, 所以有了本文所描述的工作.

#思路
Ben Waldie已经写了一个统计OmniFocus中已完成任务, 并保存到Evernote中的AppleScript脚本(OmniFocus > Prepare Task Completion Report Version 2.0.0), 只需要设计一套在任务中记录执行时间的机制, 然后改进该脚本, 向报告中加入任务执行时间的统计即可.

#脚本文件列表及作用

GitHub

共三个AppleScript脚本文件: start.scpt, stop.scptreport.scpt.

  • start.scpt

    开始一个任务, 此脚本将在该任务的标题前添加”#Ongoing:”, 表示该任务正在进行, 并在该任务的备注(note)属性尾部增加一个记录时间的字符串(或修改这个记录时间的字符串, 如果该任务之前已经开始执行过).

    如果开始任务时该任务的Defer Until没有填写, 那么将其设置为当前时间, 作为报告中的任务开始时间.

  • stop.scpt

    停止一个任务, 该脚本可以停止已经开始的任务(标题前有”#Ongoing:”文本的任务, 停止后删除任务标题中的”#Ongoing”文本), 并根据该任务备注(note)属性中的时间记录字符串计算该任务已执行时间.

注意: 任务的执行可以分为多次启动/停止, 一个任务的总执行时间是多次执行时间之和.
  • report.scpt

    该脚本统计已完成的任务及其执行时间, 并累加各个项目中所有任务的执行时间作为项目执行时间.
    对原脚本(OmniFocus > Prepare Task Completion Report Version 2.0.0)所做的修改如下:

    1. 增加一个属性用于设置保存报告的Evernote笔记本名称;
    2. 统计范围中增加Year, 并设置Today为默认统计范围;
    3. 根据start和stop脚本记录在备注(note)中的时间字符串, 在报告中为任务增加执行时间数据;
    4. 统计项目执行时间, 其值为项目下的所有任务执行时间之和;
    5. 将报告的标题改为统计的日期范围;
    6. 如果某项没有设定值, 报告中将不显示该项数据;

#安装方法

  • 将以上三个脚本文件拷贝到OmniFocus的脚本目录(可以使用OmniFocus的Help->Open Scripts Folder直接打开);
  • OmniFocus工具栏上右键, 在弹出的菜单上选择”Customize Toolbar…”, 将”Script: start”, “Script: stop”和”Script: report”拖到工具栏上.

#使用说明

##启动任务

选中一个任务后, 点击工具栏的”start”脚本图标.

Select a task

任务启动后, 会弹出任务开始执行通知.

Start notification

点击”start”脚本后, 任务标题前将添加”#Ongoing:”字符串, 并且任务备注(note)尾部将添加时间字符串.

Task started

##停止任务

在任务执行一段时间需要停止时, 例如被打断或暂时休息或完成了该任务, 点击工具栏的”stop”脚本图标. 停止后的任务会记录本次任务执行的时间, 可以在备注(note)尾部时间字符串中看到变化.

Task stoped

任务停止后, 会弹出任务停止执行通知.

Stop notification

##生成报告

任何时候点击”report”脚本图标, 将会首先弹出报告时间范围选择窗口, 如下图所示.

Report date scope

选择一个时间范围后, 点击”OK”按钮, 将会生成统计报告并在Evernote的”Omnifocus_reports”笔记本中创建一个统计报告, 如下图. 笔记本名称”Omnifocus_reports”可以在脚本中修改.

Report

报告中, 每个任务如果使用了”start”和”stop”脚本记录任务执行时间, 将会显示执行时间, 并会统计一个项目的总执行时间, 如上图中下方的蓝色文本.

#注意事项

  • 使用”start”和”stop”脚本记录任务执行时间后, 将会在该任务的备注(note)的尾部添加时间字符串, 不要删除它或手动修改它, 并且一定不要将备注文本放在时间字符串之后, 否则会影响执行时间的统计. 统计报告中的备注文本会自动忽略掉时间字符串;
  • 任务开始后会在任务标题头部增加一个标记字符串”#Ongoing:”, 任务停止后自动删除, 不要手动修改它.

#不足之处

因为没有OmniFocus额外的属性可以使用, 只好通过向任务标题和备注添加额外字符串的方式来达到统计执行时间的目的, 这种方式需要遵守一些额外的使用规则, 会影响使用体验.

如果OmniFocus能够增加记录任务执行时间的功能就好了, 不过应该是希望不大. 或者做个GTD软件开发计划, 把我想要的功能都做出来……