]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix wrapping of 'previous-completion' at the beginning of buffer
authorPhilip Kaludercic <philipk@posteo.net>
Thu, 24 Mar 2022 18:11:01 +0000 (20:11 +0200)
committerJuri Linkov <juri@linkov.net>
Thu, 24 Mar 2022 18:11:01 +0000 (20:11 +0200)
* lisp/simple.el (next-completion): Prevent an error of
'previous-completion' at the beginning of completions buffer.
Also fix 'previous-completion' to wrap to the last completion.
(bug#54374)

lisp/simple.el

index 6dd8d141ae128f539c2533abb8cd169f5265336c..921fba34169ce3798790dc77630f287f5e362d5e 100644 (file)
@@ -9168,6 +9168,13 @@ forward)."
 With prefix argument N, move N items (negative N means move
 backward)."
   (interactive "p")
+  (let ((prev (previous-single-property-change (point) 'mouse-face)))
+    (goto-char (cond
+                ((not prev)
+                 (1- (next-single-property-change (point) 'mouse-face)))
+                ((/= prev (point))
+                 (point))
+                (t prev))))
   (let ((beg (point-min)) (end (point-max)))
     (catch 'bound
       (while (> n 0)
@@ -9185,7 +9192,7 @@ backward)."
         (unless (get-text-property (point) 'mouse-face)
           (goto-char (next-single-property-change (point) 'mouse-face nil end)))
         (setq n (1- n)))
-      (while (< n 0)
+      (while (and (< n 0) (not (bobp)))
         (let ((prop (get-text-property (1- (point)) 'mouse-face)))
           ;; If in a completion, move to the start of it.
           (when (and prop (eq prop (get-text-property (point) 'mouse-face)))