emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] [BUG] Infinite loop in org-agenda-show-new-time


From: Matt Lundin
Subject: [O] [BUG] Infinite loop in org-agenda-show-new-time
Date: Mon, 05 Aug 2013 10:42:01 -0500
User-agent: Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.3 (gnu/linux)

When the agenda buffer is filtered by tag, I find that rescheduling an
item (via org-agenda-do-date-later, org-agenda-schedule, etc.) often
results in an infinite loop.

I believe this loop occurs in the function org-agenda-show-new-time.

Here are the steps I took to debug this:

1. I add a counter to the function:

--8<---------------cut here---------------start------------->8---
(defun org-agenda-show-new-time (marker stamp &optional prefix)
  "Show new date stamp via text properties."
  ;; We use text properties to make this undoable
  (let ((inhibit-read-only t))
    (setq stamp (concat prefix " => " stamp " "))
    (setq my-counter 0) ;; <-- my addition
    (save-excursion
      (goto-char (point-max))
      (while (not (bobp))
        (when (equal marker (org-get-at-bol 'org-marker))
          (org-move-to-column (- (window-width) (length stamp)) t)
          (org-agenda-fix-tags-filter-overlays-at (point))
          (setq my-counter (1+ my-counter)) ;; <-- also my addition
          (if (featurep 'xemacs)
              ;; Use `duplicable' property to trigger undo recording
              (let ((ex (make-extent nil nil))
                    (gl (make-glyph stamp)))
                (set-glyph-face gl 'secondary-selection)
                (set-extent-properties
                 ex (list 'invisible t 'end-glyph gl 'duplicable t))
                (insert-extent ex (1- (point)) (point-at-eol)))
            (add-text-properties
             (1- (point)) (point-at-eol)
             (list 'display (org-add-props stamp nil
                              'face 'secondary-selection))))
          (beginning-of-line 1))
        (beginning-of-line 0)))))
--8<---------------cut here---------------end--------------->8---

2. I narrow an agenda diary buffer by tag (e.g., "home").

3. I reschedule an item.

4. Emacs hangs.

5. I hit C-g to stop the process.

6. I check the value of my-counter. The longer I let the process run,
the higher the value of my-counter. E.g., letting it run for
approximately ten seconds results in the following:

--8<---------------cut here---------------start------------->8---
my-counter's value is 32193

Documentation:
Not documented as a variable.
--8<---------------cut here---------------end--------------->8---

Without C-g the number will keep increasing indefinitely.

Thanks,
Matt



reply via email to

[Prev in Thread] Current Thread [Next in Thread]