* lisp/simple.el (next-line-completion): Better handing of group lines.
authorJuri Linkov <juri@linkov.net>
Thu, 25 Jan 2024 17:52:08 +0000 (19:52 +0200)
committerJuri Linkov <juri@linkov.net>
Thu, 25 Jan 2024 17:52:08 +0000 (19:52 +0200)
Simplify to not compare the result of 'move-to-column'
with the value 'column'.  Such comparison prevented from moving
over lines without completion candidates such as group lines (bug#68688).

* test/lisp/minibuffer-tests.el (completions-group-navigation-test):
Add more group candidates to create more columns and to test
moving over group lines and over columns without candidates.

lisp/simple.el
test/lisp/minibuffer-tests.el

index 1157bd578fda6f55daf8f691e7f1e968b8a2f4cc..8246b9cab812d78a2c5374f24a5c02e5965644eb 100644 (file)
@@ -10062,7 +10062,7 @@ Also see the `completion-auto-wrap' variable."
       (while (and (not found)
                   (eq (forward-line 1) 0)
                   (not (eobp))
-                  (eq (move-to-column column) column))
+                  (move-to-column column))
         (when (get-text-property (point) 'mouse-face)
           (setq found t)))
       (when (not found)
@@ -10086,7 +10086,7 @@ Also see the `completion-auto-wrap' variable."
       (completion--move-to-candidate-start)
       (while (and (not found)
                   (eq (forward-line -1) 0)
-                  (eq (move-to-column column) column))
+                  (move-to-column column))
         (when (get-text-property (point) 'mouse-face)
           (setq found t)))
       (when (not found)
index d104858b0d0fa9db636e3929bd7a21eb1c08f90a..07c4dbc3197a219db4747925c761b592f957225f 100644 (file)
                     (if transform
                         name
                       (pcase name
-                        (`"aa" "Group 1")
-                        (`"ab" "Group 2")
-                        (`"ac" "Group 3")))))
+                        (`"aa1" "Group 1")
+                        (`"aa2" "Group 1")
+                        (`"aa3" "Group 1")
+                        (`"aa4" "Group 1")
+                        (`"ab1" "Group 2")
+                        (`"ac1" "Group 3")
+                        (`"ac2" "Group 3")))))
              (category . unicode-name))
-         (complete-with-action action '("aa" "ab" "ac") string pred)))
+         (complete-with-action action '("aa1" "aa2" "aa3" "aa4" "ab1" "ac1" "ac2")
+                                string pred)))
     (insert "a")
     (minibuffer-completion-help)
     (switch-to-completions)
-    (should (equal "aa" (get-text-property (point) 'completion--string)))
+    (should (equal "aa1" (get-text-property (point) 'completion--string)))
     (let ((completion-auto-wrap t))
-      (next-completion 3))
-    (should (equal "aa" (get-text-property (point) 'completion--string)))
+      (next-completion 7))
+    (should (equal "aa1" (get-text-property (point) 'completion--string)))
     (let ((completion-auto-wrap nil))
-      (next-completion 3))
-    (should (equal "ac" (get-text-property (point) 'completion--string)))
+      (next-completion 7))
+    (should (equal "ac2" (get-text-property (point) 'completion--string)))
 
-    (first-completion)
     (let ((completion-auto-wrap t))
+      ;; First column
+      (first-completion)
       (next-line-completion 1)
-      (should (equal "ab" (get-text-property (point) 'completion--string)))
-      (next-line-completion 2)
-      (should (equal "aa" (get-text-property (point) 'completion--string)))
+      (should (equal "aa4" (get-text-property (point) 'completion--string)))
+      (next-line-completion 3)
+      (should (equal "aa1" (get-text-property (point) 'completion--string)))
       (previous-line-completion 2)
-      (should (equal "ab" (get-text-property (point) 'completion--string))))
+      (should (equal "ab1" (get-text-property (point) 'completion--string)))
+
+      ;; Second column
+      (first-completion)
+      (next-completion 1)
+      (should (equal "aa2" (get-text-property (point) 'completion--string)))
+      (next-line-completion 1)
+      (should (equal "ac2" (get-text-property (point) 'completion--string)))
+      (next-line-completion 1)
+      (should (equal "aa2" (get-text-property (point) 'completion--string)))
+      (previous-line-completion 1)
+      (should (equal "ac2" (get-text-property (point) 'completion--string)))
+      (previous-line-completion 1)
+      (should (equal "aa2" (get-text-property (point) 'completion--string)))
+
+      ;; Third column
+      (first-completion)
+      (next-completion 2)
+      (should (equal "aa3" (get-text-property (point) 'completion--string)))
+      (next-line-completion 1)
+      (should (equal "aa3" (get-text-property (point) 'completion--string))))
+
     (let ((completion-auto-wrap nil))
-      (next-line-completion 3)
-      (should (equal "ac" (get-text-property (point) 'completion--string)))
-      (previous-line-completion 3)
-      (should (equal "aa" (get-text-property (point) 'completion--string))))))
+      (first-completion)
+      (next-line-completion 7)
+      (should (equal "ac2" (get-text-property (point) 'completion--string)))
+      (previous-line-completion 7)
+      (should (equal "aa1" (get-text-property (point) 'completion--string))))))
 
 (provide 'minibuffer-tests)
 ;;; minibuffer-tests.el ends here