现在使用 emacs org 模式大约一个月来跟踪我所有的项目和任务。
我全天为所有活动计时,而不仅仅是与工作相关的活动。
我的问题是——我经常忘记打卡参加一项新活动(比如吃午饭)。当我返回并打卡回到工作活动时,我需要先打卡吃午饭,然后调整它的开始时间戳。这对于午餐活动来说是可以的,但是它并没有调整我吃午餐之前之前的工作工作相关任务,所以净是之前的任务与午餐重叠并且不准确。
有没有办法改变行为,以便调整之前的任务?我不希望使用空闲功能来执行此操作;我希望自动进行调整。
ETA:这也再次出现在邮件列表中,似乎最近对代码库的提交提供了另一种 [也许更好的] 方式来做到这一点。请参阅有关Bastien(组织模式维护者)输入的邮件列表讨论:
时钟时间戳上的 SM-[up/down] 也会尝试更新上一个/下一个时钟时间戳。
(实际上,bzg's
下面的建议就是这个确切的东西......它只是没有包含上面的快捷方式,所以我认为他的答案看起来比上面的更难/更不吸引人,这真的很容易。)
您也可以使用org-resolve-clocks
. 请参阅解决空闲时间。
本质上,您有一些标题并被打卡:
* Work
:LOGBOOK:
CLOCK: [2012-07-25 Wed 8:26]
:END:
我吃完午饭回来,意识到我忘了打卡下班和吃午饭。
我运行M-x org-resolve-clocks
并得到以下提示:
Select a Clock Resolution Command:
i/q/C-g Ignore this question; the same as keeping all the idle time.
k/K Keep X minutes of the idle time (default is all). If this
amount is less than the default, you will be clocked out
that many minutes after the time that idling began, and then
clocked back in at the present time.
g/G Indicate that you "got back" X minutes ago. This is quite
different from 'k': it clocks you out from the beginning of
the idle period and clock you back in X minutes ago.
s/S Subtract the idle time from the current clock. This is the
same as keeping 0 minutes.
C Cancel the open timer altogether. It will be as though you
never clocked in.
j/J Jump to the current clock, to make manual adjustments.
For all these options, using uppercase makes your final state
to be CLOCKED OUT.
因为我想K
暂停 X 分钟的工作,打卡,然后打卡进入午餐,我按K
,它提示我(现在是 ~1:30p):
Keep how many minutes? (default 303)
我可以按 Enter 保留所有这些,但假设我在 12 点左右吃午饭。那是大约 3.5 小时的工作,所以我将进入210 RET
。
现在,我进入午餐并得到这个提示:
You stopped another clock 101 minutes ago; start this one from them? (y or n)
我进入y RET
,午餐在上午 11:56 打卡。如果您从午餐回来又开始工作(或开始工作却忘记了),请重复此过程:
M-x org-resolve-clocks
K
____ RET ;; for how many minutes you at lunch
C-c C-x C-i ;; to clock in on Work again
y RET ;; clock in at when you stopped lunch
最终结果:
* Work
:LOGBOOK:
CLOCK: [2012-07-25 Wed 12:41]
CLOCK: [2012-07-25 Wed 8:26]--[2012-07-25 Wed 11:56] => 3:30
:END:
* Lunch
:LOGBOOK:
CLOCK: [2012-07-25 Wed 11:56]--[2012-07-25 Wed 12:41] => 0:45
:END:
希望这可以帮助。org-mode 时钟向导Bernt Hansen通过 org-mode mailing list thread向我解释了这一点。
现在已实现(检查http://orgmode.org/w/?p=org-mode.git;a=commit;h=3528fc)。
(setq org-clock-continuously t)
在您的 .emacs.el 中,新时钟将从最后一个时钟关闭的时间开始。
C-u C-u C-u M-x org-clock-in RET
并且C-u C-u M-x org-clock-in-last RET
也会这样做,即使org-clock-continuously
设置为nil
.
如果我正确理解您的问题,您想在下班后调整时间戳。有一个命令;您可以查看功能:
org-timestamp-up
org-timestamp-down
我认为这些是默认绑定的,但似乎它们不是,所以你会想要将它们绑定到一个键序列,也许像C-c T u
and之类的东西C-c T d
,或者任何漂浮在你船上的东西。用法很简单,只需将光标移到要调整的字段上,然后向上或向下运行。它仅适用于时间戳本身,而不适用于右侧显示的计算持续时间。
你也可以看看
org-timestamp-change
前两个函数是包装器。您可能还需要自定义变量
org-time-stamp-rounding-minutes
默认情况下,它会将时间戳从原始打卡开始算起 +/- 5 分钟,您在修改时间戳时可能会感到困惑。
就个人而言,我更喜欢在我(setq org-time-stamp-rounding-minutes '(0 1))
打卡的确切分钟(零)启动计时器,并使用 1 分钟的粒度来更改时间戳。此外,您可以C-u 4 7 C-c T u
在时间戳的分钟部分使用前缀,并且 org-mode 会做正确的事情 - 甚至将小时四舍五入。
概括:
(setq org-time-stamp-rounding-minutes '(0 1))
(add-hook 'org-mode-hook
'(lambda ()
(local-set-key (kbd "C-c T u") 'org-timestamp-up)
(local-set-key (kbd "C-c T d") 'org-timestamp-down)))