Подтвердить что ты не робот

Режим Emacs org: как настроить предыдущие часы, если я забуду часы

Использование режима emacs org около месяца для отслеживания всех моих проектов и задач.

Я провожу все действия в течение всего дня, а не только связанные с работой.

Мой вопрос: я часто забываю приступить к новому действию (скажем, обедать). Когда я вернусь и вернусь назад к рабочему действию, мне нужно сначала подождать, чтобы пообедать, а затем отрегулировать для него стартовую отметку времени. Это нормально для работы на ланч, но он не корректирует предыдущую работу, связанную с работой, прежде чем я взял обед, так что сеть состоит в том, что предыдущая задача перекрывает обед и является неточной.

Есть ли способ изменить поведение, чтобы он корректировал предыдущую задачу? Я не хочу использовать функцию простоя для этого; Я бы предпочел, чтобы настройка выполнялась автоматически.

4b9b3361

Ответ 1

ETA: Это снова появилось в списке рассылки, и, как представляется, недавно была зафиксирована фиксация базы кода, которая предоставляет другой [возможно, лучший] способ сделать это. См. обсуждение списка рассылки для входа в систему Bastien (org-mode maintainer):

S-M- [вверх/вниз] на временной отметке часов будет пытаться обновить предыдущий/следующий часы timestamp тоже.

(На самом деле, предложение 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 eep X минут работы, часы, а затем часы в Lunch, я нажимаю K, который подсказывает мне (это ~ 1: 30p прямо сейчас):

Keep how many minutes? (default 303) 

Я могу нажать Enter, чтобы сохранить все, но позвольте сказать, что я взял обед около 12p. Это около 3,5 часов работы, поэтому я войду в 210 RET.

Теперь я забегаю в Lunch и получаю следующее приглашение:

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

Я вхожу в y RET, а Lunch запускается в 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:

Надеюсь, это поможет. Мастер org-mode clocking, Бернт Хансен, объяснил мне это через org-mode список рассылки.

Ответ 2

Теперь это реализовано (проверьте 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.

Ответ 3

Если я правильно понял ваш вопрос, вы хотите настроить временную метку после выключения. Для этого есть команда; вы можете проверить функции:

org-timestamp-up

org-timestamp-down

Я думал, что они были связаны по умолчанию, но, похоже, это не так, поэтому вы захотите привязать их к последовательности клавиш, возможно, что-то вроде C-c T u и 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)))