Fix wrapping of 'previous-completion' at the beginning of buffer

* 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)
This commit is contained in:
Philip Kaludercic 2022-03-24 20:11:01 +02:00 committed by Juri Linkov
parent 71aec1d044
commit 392d66f6f5

View 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)))