Browse Source

Fix position error when clocking in while buffer is narrowed

Bernt Hansen writes:

> If you narrow to subtree when there is a following task the narrowed
> buffer has a blank line at the end.  If you are on this line and
> clock-in it starts the clock for the _following_ task (outside the
> narrowed subtree) and not the task you are looking at.
>
> I stumbled across this today because the following task was already
> over the estimated limit when I clocked it in - which triggered my
> alarm sound.
>
> ,----[ test.org ]
> | #+STARTUP:
> | * TODO One
> | * TODO Two
> `----
>
> ,----[ minimal.emacs ]
> | (add-to-list 'load-path (expand-file-name "~/git/org-mode/lisp"))
> | (add-to-list 'auto-mode-alist
> |              '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
> | (require 'org-install)
> |
> | (global-set-key "\C-cl" 'org-store-link)
> | (global-set-key "\C-ca" 'org-agenda)
> | (global-set-key "\C-cb" 'org-iswitchb)
> `----
>
> Key sequence to reproduce:
>
> $ emacs -q -l minimal.emacs test.org
>
> | Key                           | Notes                         |
> |-------------------------------+-------------------------------|
> | C-n                           | Go to first task '* TODO One' |
> | M-x org-narrow-to-subtree RET | Narrow to subtree             |
> | C-n                           | Move to last blank line       |
> | C-c C-x C-i                   | Clock in (next) task          |
> |-------------------------------+-------------------------------|
>
> -Bernt
>
> Emacs  : GNU Emacs 22.2.1 (i486-pc-linux-gnu, GTK+ Version 2.12.11)
> of 2008-11-09 on raven, modified by Debian
> Package: Org-mode version 6.31trans (release_6.31.8.g7485)
Carsten Dominik 15 years ago
parent
commit
3ce0a4a9e2
2 changed files with 9 additions and 1 deletions
  1. 3 0
      lisp/ChangeLog
  2. 6 1
      lisp/org-clock.el

+ 3 - 0
lisp/ChangeLog

@@ -1,5 +1,8 @@
 2009-10-02  Carsten Dominik  <carsten.dominik@gmail.com>
 
+	* org-clock.el: Make sure the clock-in target position does not
+	move to a different node by widening the buffer.
+
 	* org-html.el (org-export-html-format-image): Wrap image into
 	figure div only when there is a caption.
 

+ 6 - 1
lisp/org-clock.el

@@ -524,7 +524,11 @@ the clocking selection, associated with the letter `d'."
 	;; Mark as default clocking task
 	(org-clock-mark-default-task))
 
-      (setq target-pos (point))  ;; we want to clock in at this location
+      ;; Clock in at which position?
+      (setq target-pos
+	    (if (and (eobp) (not (org-on-heading-p)))
+		(point-at-bol 0)
+	      (point)))
       (run-hooks 'org-clock-in-prepare-hook)
       (save-excursion
 	(when (and selected-task (marker-buffer selected-task))
@@ -535,6 +539,7 @@ the clocking selection, associated with the letter `d'."
 	  (move-marker selected-task nil))
 	(save-excursion
 	  (save-restriction
+	    (if (and 
 	    (widen)
 	    (goto-char target-pos)
 	    (org-back-to-heading t)