mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
This commit is contained in:
commit
70273dc9f7
8
etc/NEWS
8
etc/NEWS
@ -86,6 +86,14 @@ different values for completion-affecting variables like
|
|||||||
applies for the styles configuration in 'completion-category-overrides'
|
applies for the styles configuration in 'completion-category-overrides'
|
||||||
and 'completion-category-defaults'.
|
and 'completion-category-defaults'.
|
||||||
|
|
||||||
|
---
|
||||||
|
*** Selected completion candidate is preserved across *Completions* updates.
|
||||||
|
When point is on a completion candidate in the *Completions* buffer
|
||||||
|
(because of 'minibuffer-next-completion' or for any other reason), point
|
||||||
|
will still be on that candidate after *Completions* is updated with a
|
||||||
|
new list of completions. The candidate is automatically deselected when
|
||||||
|
the *Completions* buffer is hidden.
|
||||||
|
|
||||||
** Windows
|
** Windows
|
||||||
|
|
||||||
+++
|
+++
|
||||||
|
@ -2624,6 +2624,12 @@ The candidate will still be chosen by `choose-completion' unless
|
|||||||
(sort-fun (completion-metadata-get all-md 'display-sort-function))
|
(sort-fun (completion-metadata-get all-md 'display-sort-function))
|
||||||
(group-fun (completion-metadata-get all-md 'group-function))
|
(group-fun (completion-metadata-get all-md 'group-function))
|
||||||
(mainbuf (current-buffer))
|
(mainbuf (current-buffer))
|
||||||
|
(current-candidate-and-offset
|
||||||
|
(when-let* ((buffer (get-buffer "*Completions*"))
|
||||||
|
(window (get-buffer-window buffer 0)))
|
||||||
|
(with-current-buffer buffer
|
||||||
|
(when-let* ((beg (completions--start-of-candidate-at (window-point window))))
|
||||||
|
(cons (get-text-property beg 'completion--string) (- (point) beg))))))
|
||||||
;; If the *Completions* buffer is shown in a new
|
;; If the *Completions* buffer is shown in a new
|
||||||
;; window, mark it as softly-dedicated, so bury-buffer in
|
;; window, mark it as softly-dedicated, so bury-buffer in
|
||||||
;; minibuffer-hide-completions will know whether to
|
;; minibuffer-hide-completions will know whether to
|
||||||
@ -2647,7 +2653,7 @@ The candidate will still be chosen by `choose-completion' unless
|
|||||||
,(when temp-buffer-resize-mode
|
,(when temp-buffer-resize-mode
|
||||||
'(preserve-size . (nil . t)))
|
'(preserve-size . (nil . t)))
|
||||||
(body-function
|
(body-function
|
||||||
. ,#'(lambda (_window)
|
. ,#'(lambda (window)
|
||||||
(with-current-buffer mainbuf
|
(with-current-buffer mainbuf
|
||||||
(when completion-auto-deselect
|
(when completion-auto-deselect
|
||||||
(add-hook 'after-change-functions #'completions--after-change nil t))
|
(add-hook 'after-change-functions #'completions--after-change nil t))
|
||||||
@ -2737,7 +2743,16 @@ The candidate will still be chosen by `choose-completion' unless
|
|||||||
(if (eq (car bounds) (length result))
|
(if (eq (car bounds) (length result))
|
||||||
'exact 'finished))))))
|
'exact 'finished))))))
|
||||||
|
|
||||||
(display-completion-list completions nil group-fun)))))
|
(display-completion-list completions nil group-fun)
|
||||||
|
(when current-candidate-and-offset
|
||||||
|
(with-current-buffer standard-output
|
||||||
|
(when-let* ((match (text-property-search-forward
|
||||||
|
'completion--string (car current-candidate-and-offset) t)))
|
||||||
|
(goto-char (prop-match-beginning match))
|
||||||
|
;; Preserve the exact offset for the sake of
|
||||||
|
;; `choose-completion-deselect-if-after'.
|
||||||
|
(forward-char (cdr current-candidate-and-offset))
|
||||||
|
(set-window-point window (point)))))))))
|
||||||
nil)))
|
nil)))
|
||||||
nil))
|
nil))
|
||||||
|
|
||||||
@ -2746,8 +2761,12 @@ The candidate will still be chosen by `choose-completion' unless
|
|||||||
;; FIXME: We could/should use minibuffer-scroll-window here, but it
|
;; FIXME: We could/should use minibuffer-scroll-window here, but it
|
||||||
;; can also point to the minibuffer-parent-window, so it's a bit tricky.
|
;; can also point to the minibuffer-parent-window, so it's a bit tricky.
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((win (get-buffer-window "*Completions*" 0)))
|
(when-let* ((win (get-buffer-window "*Completions*" 0)))
|
||||||
(if win (with-selected-window win (bury-buffer)))))
|
(with-selected-window win
|
||||||
|
;; Move point off any completions, so we don't move point there
|
||||||
|
;; again the next time `minibuffer-completion-help' is called.
|
||||||
|
(goto-char (point-min))
|
||||||
|
(bury-buffer))))
|
||||||
|
|
||||||
(defun exit-minibuffer ()
|
(defun exit-minibuffer ()
|
||||||
"Terminate this minibuffer argument."
|
"Terminate this minibuffer argument."
|
||||||
@ -4905,8 +4924,6 @@ insert the selected completion candidate to the minibuffer."
|
|||||||
(interactive "p")
|
(interactive "p")
|
||||||
(let ((auto-choose minibuffer-completion-auto-choose))
|
(let ((auto-choose minibuffer-completion-auto-choose))
|
||||||
(with-minibuffer-completions-window
|
(with-minibuffer-completions-window
|
||||||
(when completions-highlight-face
|
|
||||||
(setq-local cursor-face-highlight-nonselected-window t))
|
|
||||||
(if vertical
|
(if vertical
|
||||||
(next-line-completion (or n 1))
|
(next-line-completion (or n 1))
|
||||||
(next-completion (or n 1)))
|
(next-completion (or n 1)))
|
||||||
|
@ -10246,6 +10246,23 @@ Also see the `completion-auto-wrap' variable."
|
|||||||
|
|
||||||
This makes `completions--deselect' effective.")
|
This makes `completions--deselect' effective.")
|
||||||
|
|
||||||
|
(defun completions--start-of-candidate-at (position)
|
||||||
|
"Return the start position of the completion candidate at POSITION."
|
||||||
|
(save-excursion
|
||||||
|
(goto-char position)
|
||||||
|
(let (beg)
|
||||||
|
(cond
|
||||||
|
((and (not (eobp))
|
||||||
|
(get-text-property (point) 'completion--string))
|
||||||
|
(setq beg (1+ (point))))
|
||||||
|
((and (not (bobp))
|
||||||
|
(get-text-property (1- (point)) 'completion--string))
|
||||||
|
(setq beg (point))))
|
||||||
|
(when beg
|
||||||
|
(or (previous-single-property-change
|
||||||
|
beg 'completion--string)
|
||||||
|
beg)))))
|
||||||
|
|
||||||
(defun choose-completion (&optional event no-exit no-quit)
|
(defun choose-completion (&optional event no-exit no-quit)
|
||||||
"Choose the completion at point.
|
"Choose the completion at point.
|
||||||
If EVENT, use EVENT's position to determine the starting position.
|
If EVENT, use EVENT's position to determine the starting position.
|
||||||
@ -10269,21 +10286,11 @@ minibuffer, but don't quit the completions window."
|
|||||||
(or (get-text-property (posn-point (event-start event))
|
(or (get-text-property (posn-point (event-start event))
|
||||||
'completion--string)
|
'completion--string)
|
||||||
(error "No completion here"))
|
(error "No completion here"))
|
||||||
(save-excursion
|
(if-let* ((candidate-start
|
||||||
(goto-char (posn-point (event-start event)))
|
(completions--start-of-candidate-at
|
||||||
(let (beg)
|
(posn-point (event-start event)))))
|
||||||
(cond
|
(get-text-property candidate-start 'completion--string)
|
||||||
((and (not (eobp))
|
(error "No completion here")))))
|
||||||
(get-text-property (point) 'completion--string))
|
|
||||||
(setq beg (1+ (point))))
|
|
||||||
((and (not (bobp))
|
|
||||||
(get-text-property (1- (point)) 'completion--string))
|
|
||||||
(setq beg (point)))
|
|
||||||
(t (error "No completion here")))
|
|
||||||
(setq beg (or (previous-single-property-change
|
|
||||||
beg 'completion--string)
|
|
||||||
beg))
|
|
||||||
(get-text-property beg 'completion--string))))))
|
|
||||||
|
|
||||||
(unless (buffer-live-p buffer)
|
(unless (buffer-live-p buffer)
|
||||||
(error "Destination buffer is dead"))
|
(error "Destination buffer is dead"))
|
||||||
@ -10451,6 +10458,8 @@ Called from `temp-buffer-show-hook'."
|
|||||||
(let ((base-position completion-base-position)
|
(let ((base-position completion-base-position)
|
||||||
(insert-fun completion-list-insert-choice-function))
|
(insert-fun completion-list-insert-choice-function))
|
||||||
(completion-list-mode)
|
(completion-list-mode)
|
||||||
|
(when completions-highlight-face
|
||||||
|
(setq-local cursor-face-highlight-nonselected-window t))
|
||||||
(setq-local completion-base-position base-position)
|
(setq-local completion-base-position base-position)
|
||||||
(setq-local completion-list-insert-choice-function insert-fun))
|
(setq-local completion-list-insert-choice-function insert-fun))
|
||||||
(setq-local completion-reference-buffer mainbuf)
|
(setq-local completion-reference-buffer mainbuf)
|
||||||
|
Loading…
Reference in New Issue
Block a user