Emacs组织模式:如果我忘记退出时如何调整前一个时钟

时间:2012-06-21 17:36:10

标签: emacs org-mode

现在使用emacs组织模式大约一个月来跟踪我的所有项目和任务。

我计算一天中的所有活动,而不仅仅是与工作相关的活动。

我的问题是 - 我经常忘记参加一项新活动(比如吃午饭)。当我返回并重新参加工作活动时,我需要先进入午餐时间,然后调整它的开始时间戳。这对于午餐活动来说很好,但是在我吃午饭之前它没有调整以前的工作相关任务,所以网络是前一个任务与午餐重叠并且不准确。

有没有办法改变行为,以便调整之前的任务?我不希望使用空闲功能来执行此操作;我希望自动调整。

3 个答案:

答案 0 :(得分:14)

ETA:这也在邮件列表中再次出现,似乎最近提交了代码库,提供了另一种[或许更好]的方法来实现这一点。有关Bastien的(组织模式维护者)输入,请参阅the mailing list discussion

  

时钟时间戳上的S-M- [up / down]将尝试更新上一个/下一个   时钟时间戳也是。

(实际上,下面的bzg's建议就是这个确切的事情......它只是没有上面提到的快捷方式,所以我认为他的答案看起来比上面的更难/更少,这很容易。 )


您也可以使用org-resolve-clocks。请参阅Resolving idle time

基本上,你有一些标题并且有时间:

* 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):< / p>

Keep how many minutes? (default 303) 

我可以点击进入以保留所有这些,但是假设我在12p左右吃了午餐。那是大约3.5小时的工作,所以我将输入210 RET

现在,我进入午餐并得到这个提示:

You stopped another clock 101 minutes ago; start this one from them? (y or n)

我输入y RET,午餐时间为11:56a。如果您从午餐回来并再次工作(或开始工作并忘记),请重复此过程:

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:

希望这会有所帮助。组织模式时钟向导Bernt Hansen向我解释了via an org-mode mailing list thread

答案 1 :(得分:6)

现已实施(检查http://orgmode.org/w/?p=org-mode.git;a=commit;h=3528fc)。

.emacs.el中的

(setq org-clock-continuously t)和新时钟将从最后一个时钟关闭时开始。

即使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-continuouslynil也会执行此操作。

答案 2 :(得分:4)

如果我理解你的问题,你想在计时后调整时间戳。有一个命令;你可以查看功能:

org-timestamp-up

org-timestamp-down

我认为这些是默认绑定的,但看起来它们不是,所以你会想要将它们绑定到一个键序列,可能像C-c T uC-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)))