Browse Source

org-list: Avoid unnecessary call to `org-in-item-p'

* lisp/org-list.el (org-list-insert-item): Compute item containing POS
  based on the list structure instead of the buffer.
Nicolas Goaziou 7 years ago
parent
commit
0c03971b09
1 changed files with 12 additions and 4 deletions
  1. 12 4
      lisp/org-list.el

+ 12 - 4
lisp/org-list.el

@@ -1258,10 +1258,18 @@ function ends.
 
 This function modifies STRUCT."
   (let ((case-fold-search t))
-    ;; 1. Get information about list: position of point with regards
-    ;;    to item start (BEFOREP), blank lines number separating items
-    ;;    (BLANK-NB), if we're allowed to (SPLIT-LINE-P).
-    (let* ((item (progn (goto-char pos) (goto-char (org-list-get-item-begin))))
+    ;; 1. Get information about list: ITEM containing POS, position of
+    ;;    point with regards to item start (BEFOREP), blank lines
+    ;;    number separating items (BLANK-NB), if we're allowed to
+    ;;    (SPLIT-LINE-P).
+    (let* ((item (goto-char (catch :exit
+			      (let ((inner-item 0))
+				(pcase-dolist (`(,i . ,_) struct)
+				  (cond
+				   ((= i pos) (throw :exit i))
+				   ((< i pos) (setq inner-item i))
+				   (t (throw :exit inner-item))))
+				inner-item))))
 	   (item-end (org-list-get-item-end item struct))
 	   (item-end-no-blank (org-list-get-item-end-before-blank item struct))
 	   (beforep