(interactive "p")
(next-completion (- n)))
+(defun completion--move-to-candidate-start ()
+ "If in a completion candidate, move point to its start."
+ (when (and (get-text-property (point) 'mouse-face)
+ (not (bobp))
+ (get-text-property (1- (point)) 'mouse-face))
+ (goto-char (previous-single-property-change (point) 'mouse-face))))
+
+(defun completion--move-to-candidate-end ()
+ "If in a completion candidate, move point to its end."
+ (when (and (get-text-property (point) 'mouse-face)
+ (not (eobp))
+ (get-text-property (1+ (point)) 'mouse-face))
+ (goto-char (or (next-single-property-change (point) 'mouse-face) (point-max)))))
+
(defun next-completion (n)
"Move to the next item in the completions buffer.
With prefix argument N, move N items (negative N means move
(if (get-text-property (point) 'mouse-face)
;; If in a completion, move to the start of it.
- (when (and (not (bobp))
- (get-text-property (1- (point)) 'mouse-face))
- (goto-char (previous-single-property-change (point) 'mouse-face)))
+ (completion--move-to-candidate-start)
;; Try to move to the previous completion.
(setq pos (previous-single-property-change (point) 'mouse-face))
(if pos
(while (> n 0)
(setq found nil pos nil column (current-column) line (line-number-at-pos))
+ (completion--move-to-candidate-end)
(while (and (not found)
(eq (forward-line 1) 0)
(not (eobp))
(while (< n 0)
(setq found nil pos nil column (current-column) line (line-number-at-pos))
+ (completion--move-to-candidate-start)
(while (and (not found)
(eq (forward-line -1) 0)
(eq (move-to-column column) column))
(previous-line-completion 4)
(should (equal "ac" (get-text-property (point) 'completion--string))))))
+(ert-deftest completion-next-line-multline-test ()
+ (let ((completion-auto-wrap t))
+ (completing-read-with-minibuffer-setup
+ '("a\na" "a\nb" "ac")
+ (insert "a")
+ (minibuffer-completion-help)
+ (switch-to-completions)
+ (goto-char (point-min))
+ (next-line-completion 5)
+ (should (equal "a\nb" (get-text-property (point) 'completion--string)))
+ (goto-char (point-min))
+ (previous-line-completion 5)
+ (should (equal "a\nb" (get-text-property (point) 'completion--string))))))
+
(ert-deftest completions-header-format-test ()
(let ((completion-show-help nil)
(completions-header-format nil))