浏览代码

Allow multiple [@start:num] in a list.

* org-list.el (org-renumber-ordered-list): check for [@start:x] is
  done at each item.
Nicolas Goaziou 14 年之前
父节点
当前提交
5a3113592a
共有 1 个文件被更改,包括 31 次插入29 次删除
  1. 31 29
      lisp/org-list.el

+ 31 - 29
lisp/org-list.el

@@ -1038,35 +1038,37 @@ Also, fix the indentation."
 Cursor needs to be in the first line of an item, the line that starts
 with something like \"1.\" or \"2)\". Start to count at ARG or 1."
   (interactive "p")
-  (unless (and (org-at-item-p)
-	       (match-beginning 3))
-    (error "This is not an ordered list"))
-  (org-preserve-lc
-   (let* ((offset (progn
-		    (org-beginning-of-item)
-		    (or (and (looking-at "[ \t]*\\[@start:\\([0-9]+\\)")
-			     (string-to-number (match-string 1)))
-			arg
-			1)))
-	  (item-fmt (progn
-		      (looking-at "[ \t]*[0-9]+\\([.)]\\)")
-		      (concat "%d" (or (match-string 1) "."))))
-	  ;; Here is the function applied at each item of the list.
-	  (renumber-item (lambda (counter off fmt)
-			   (let* ((new (format fmt (+ counter off)))
-				  (old (progn
-					 (looking-at org-item-beginning-re)
-					 (match-string 2)))
-				  (begin (match-beginning 2))
-				  (end (match-end 2)))
-			     (delete-region begin end)
-			     (goto-char begin)
-			     (insert new)
-			     ;; In case item number went from 9. to 10.
-			     ;; or the other way.
-			     (org-shift-item-indentation (- (length new) (length old)))
-			     (1+ counter)))))
-     (org-apply-on-list renumber-item 0 offset item-fmt))))
+  (save-match-data
+    (unless (and (org-at-item-p)
+                 (match-beginning 3))
+      (error "This is not an ordered list"))
+    (org-preserve-lc
+     (let* ((item-fmt (progn
+                        (looking-at "[ \t]*[0-9]+\\([.)]\\)")
+                        (concat "%d" (or (match-string 1) "."))))
+            ;; Here is the function applied at each item of the list.
+            (renumber-item (lambda (counter fmt)
+                             (let* ((counter (or (save-excursion
+                                                   (and (org-at-item-p)
+                                                        (goto-char (match-end 0))
+                                                        (looking-at "\\[@start:\\([0-9]+\\)\\]")
+                                                        (string-to-number (match-string 1))))
+                                                 counter))
+                                    (new (format fmt counter))
+                                    (old (progn
+                                           (looking-at org-item-beginning-re)
+                                           (match-string 2)))
+                                    (begin (match-beginning 2))
+                                    (end (match-end 2)))
+                               (unless (equal new old)
+                                 (delete-region begin end)
+                                 (goto-char begin)
+                                 (insert new)
+                                 ;; In case item number went from 9. to 10.
+                                 ;; or the other way.
+                                 (org-shift-item-indentation (- (length new) (length old))))
+                               (1+ counter)))))
+       (org-apply-on-list renumber-item (or arg 1) item-fmt)))))
 
 (defun org-maybe-renumber-ordered-list ()
   "Renumber the ordered list at point if setup allows it.