Function: next-line-completion
next-line-completion is an interactive and byte-compiled function
defined in simple.el.gz.
Signature
(next-line-completion &optional N)
Documentation
Move to completion candidate on the next line in the completions buffer.
With prefix argument N, move N lines forward (negative N means move
backward). In vertical format (see user option completions-format)
this command moves line-wise through all columns in the completions
buffer, in horizontal format movement is confined to the current column
of completions.
Also see the completion-auto-wrap variable.
Probably introduced at or before Emacs version 30.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/simple.el.gz
(defun next-line-completion (&optional n)
"Move to completion candidate on the next line in the completions buffer.
With prefix argument N, move N lines forward (negative N means move
backward). In vertical format (see user option `completions-format')
this command moves line-wise through all columns in the completions
buffer, in horizontal format movement is confined to the current column
of completions.
Also see the `completion-auto-wrap' variable."
(interactive "p")
(let (line column pos found last first)
(when (and (bobp)
(> n 0)
(get-text-property (point) 'mouse-face)
(not (get-text-property (point) 'first-completion)))
(let ((inhibit-read-only t))
(add-text-properties (point) (1+ (point)) '(first-completion t)))
(setq n (1- n)))
(if (get-text-property (point) 'mouse-face)
;; If in a completion, move to the start of it.
(completion--move-to-candidate-start)
;; Try to move to the previous completion.
(setq pos (previous-single-property-change (point) 'mouse-face))
(if pos
;; Move to the start of the previous completion.
(progn
(goto-char pos)
(unless (get-text-property (point) 'mouse-face)
(goto-char (previous-single-property-change
(point) 'mouse-face nil (point-min)))))
(cond ((> n 0) (setq n (1- n)) (first-completion))
((< n 0) (first-completion)))))
(while (> n 0)
(setq found nil pos (point) column (current-column)
line (line-number-at-pos)
last (= (point) (save-excursion (last-completion) (point))))
(if (and (eq completions-format 'vertical)
completion-auto-wrap last)
(first-completion) ; Wrap from last to first item.
(completion--move-to-candidate-end)
(while (and (not found)
(eq (forward-line 1) 0)
(not (eobp))
(move-to-column column))
(when (get-text-property (point) 'mouse-face)
(setq found t)))
(when (not found)
(if (and (not completion-auto-wrap)
(if (eq completions-format 'vertical)
(and (or last (get-text-property (point) 'mouse-face))
(last-completion))
(goto-char pos)))
t
(save-excursion
(setq pos nil)
(goto-char (point-min))
(when (and (eq (move-to-column column) column)
(get-text-property (point) 'mouse-face))
(setq pos (point)))
(while (and (not pos) (> line (line-number-at-pos)))
(forward-line 1)
(when (and (eq (move-to-column column) column)
(get-text-property (point) 'mouse-face))
(setq pos (point)))))
(if pos (goto-char pos))
(when (eq completions-format 'vertical)
(next-column-completion 1))))) ; Move to next column.
(setq n (1- n)))
(while (< n 0)
(setq found nil pos (point) column (current-column)
line (line-number-at-pos)
first (= (point) (save-excursion (first-completion) (point))))
(if (and (eq completions-format 'vertical)
completion-auto-wrap first)
(last-completion) ; Wrap from first to last item.
(completion--move-to-candidate-start)
(while (and (not found)
(eq (forward-line -1) 0)
(move-to-column column))
(when (get-text-property (point) 'mouse-face)
(setq found t)))
(when (not found)
(if (and (not completion-auto-wrap)
(if (eq completions-format 'vertical)
(and (or last first
(get-text-property (point) 'mouse-face))
first (first-completion))
(goto-char pos)))
t
(save-excursion
(setq pos nil)
(goto-char (point-max))
(when (and (eq (move-to-column column) column)
(get-text-property (point) 'mouse-face))
(setq pos (point)))
(while (and (not pos) (< line (line-number-at-pos)))
(forward-line -1)
(when (and (eq (move-to-column column) column)
(get-text-property (point) 'mouse-face))
(setq pos (point)))))
(if pos (goto-char pos))
(when (eq completions-format 'vertical)
(previous-column-completion 1) ; Move to previous column.
(setq column (current-column))
;; Move to last item in this column (previous column may
;; have fewer items).
(while (not (eobp))
(move-to-column column)
(setq pos (point))
(forward-line))
(goto-char pos)))))
(setq n (1+ n)))))