From 60fcd2fa7ec4cf805f13f91f80ad6d73264009f8 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Sun, 12 Sep 2010 13:15:48 +0200 Subject: [PATCH] Replace non-interactive use of `org-next-item' and `org-previous-item'. * org.el (org-skip-over-state-notes): do not compute bottom point at each item. * org-mouse.el (org-mouse-for-each-item): use `org-apply-on-list' instead of moving to each item. --- lisp/org-mouse.el | 14 ++++++-------- lisp/org.el | 9 +++++---- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lisp/org-mouse.el b/lisp/org-mouse.el index c47d197eb..3a5a403d7 100644 --- a/lisp/org-mouse.el +++ b/lisp/org-mouse.el @@ -148,6 +148,7 @@ (declare-function org-agenda-change-all-lines "org-agenda" (newhead hdmarker &optional fixface just-this)) (declare-function org-verify-change-for-undo "org-agenda" (l1 l2)) +(declare-function org-apply-on-list "org-list" (function init-value &rest args)) (defvar org-mouse-plain-list-regexp "\\([ \t]*\\)\\([-+*]\\|[0-9]+[.)]\\) " "Regular expression that matches a plain list.") @@ -576,14 +577,11 @@ SCHEDULED: or DEADLINE: or ANYTHINGLIKETHIS:" (goto-char (second contextdata)) (re-search-forward ".*" (third contextdata)))))) -(defun org-mouse-for-each-item (function) - (save-excursion - (ignore-errors - (while t (org-previous-item))) - (ignore-errors - (while t - (funcall function) - (org-next-item))))) +(defun org-mouse-for-each-item (funct) + ;; Functions called by `org-apply-on-list' need an argument + (let ((wrap-fun (lambda (c) (funcall funct)))) + (when (org-in-item-p) + (org-apply-on-list wrap-fun nil)))) (defun org-mouse-bolp () "Return true if there only spaces, tabs, and '*' before point. diff --git a/lisp/org.el b/lisp/org.el index 6d8dfdcde..1c3b06425 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -11775,10 +11775,11 @@ EXTRA is additional text that will be inserted into the notes buffer." (defun org-skip-over-state-notes () "Skip past the list of State notes in an entry." (if (looking-at "\n[ \t]*- State") (forward-char 1)) - (while (looking-at "[ \t]*- State") - (condition-case nil - (org-next-item) - (error (org-end-of-item))))) + (when (org-in-item-p) + (let ((limit (org-list-bottom-point))) + (while (looking-at "[ \t]*- State") + (goto-char (or (org-get-next-item (point) limit) + (org-get-end-of-item limit))))))) (defun org-add-log-note (&optional purpose) "Pop up a window for taking a note, and add this note later at point."