Browse Source

org-list: Fix `org-list-demote-modify-bullet' with alpha bullets

* lisp/org-list.el (org-list-struct-indent): Match case-sensitively
  against current bullet in order the tell the difference between "a."
  and "A.".
* testing/lisp/test-org-list.el (test-org-list/indent-item): Add test.
Nicolas Goaziou 4 months ago
parent
commit
6b8fb446b6
2 changed files with 27 additions and 16 deletions
  1. 15 16
      lisp/org-list.el
  2. 12 0
      testing/lisp/test-org-list.el

+ 15 - 16
lisp/org-list.el

@@ -1569,22 +1569,21 @@ bullets between START and END."
   (let* (acc
 	 (set-assoc (lambda (cell) (push cell acc) cell))
 	 (change-bullet-maybe
-	  (function
-	   (lambda (item)
-	     (let ((new-bul-p
-		    (cdr (assoc
-			  ;; Normalize ordered bullets.
-			  (let ((bul (org-trim
-				      (org-list-get-bullet item struct))))
-			    (cond ((string-match "[A-Z]\\." bul) "A.")
-				  ((string-match "[A-Z])" bul) "A)")
-				  ((string-match "[a-z]\\." bul) "a.")
-				  ((string-match "[a-z])" bul) "a)")
-				  ((string-match "[0-9]\\." bul) "1.")
-				  ((string-match "[0-9])" bul) "1)")
-				  (t bul)))
-			  org-list-demote-modify-bullet))))
-	       (when new-bul-p (org-list-set-bullet item struct new-bul-p))))))
+	  (lambda (item)
+	    (let ((new-bul
+		   (cdr (assoc
+			 ;; Normalize ordered bullets.
+			 (let ((bul (org-list-get-bullet item struct))
+			       (case-fold-search nil))
+			   (cond ((string-match "[A-Z]\\." bul) "A.")
+				 ((string-match "[A-Z])" bul) "A)")
+				 ((string-match "[a-z]\\." bul) "a.")
+				 ((string-match "[a-z])" bul) "a)")
+				 ((string-match "[0-9]\\." bul) "1.")
+				 ((string-match "[0-9])" bul) "1)")
+				 (t (org-trim bul))))
+			 org-list-demote-modify-bullet))))
+	      (when new-bul (org-list-set-bullet item struct new-bul)))))
 	 (ind
 	  (lambda (cell)
 	    (let* ((item (car cell))

+ 12 - 0
testing/lisp/test-org-list.el

@@ -270,6 +270,18 @@
 		  (org-list-demote-modify-bullet '(("1." . "+"))))
 	      (org-indent-item))
 	    (buffer-string))))
+  (should
+   (equal "
+a. Item 1
+   - Item 2"
+	  (org-test-with-temp-text "
+a. Item 1
+b. Item 2<point>"
+	    (let ((org-plain-list-ordered-item-terminator t)
+		  (org-list-allow-alphabetical t)
+		  (org-list-demote-modify-bullet '(("A." . "a.") ("a." . "-"))))
+	      (org-indent-item))
+	    (buffer-string))))
   ;; When a region is selected, indent every item within.
   (should
    (equal "