summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJimmy Aguilar Mena <spacibba@aol.com>2022-04-05 13:08:36 +0200
committerJimmy Aguilar Mena <spacibba@aol.com>2022-04-05 13:52:53 +0200
commit91ca41e292184bf0c21b55a8e51f3eb1a8c89bb7 (patch)
tree45d8eef8f8e532b751296d49705b5b3bc8fbfee4
parent28b9dcb002ac56d296b48499e6a0ff2617185a08 (diff)
downloademacs-91ca41e292184bf0c21b55a8e51f3eb1a8c89bb7.tar.gz
emacs-91ca41e292184bf0c21b55a8e51f3eb1a8c89bb7.tar.bz2
emacs-91ca41e292184bf0c21b55a8e51f3eb1a8c89bb7.zip
Fix some details in completions
* lisp/minibuffer.el (completion--insert-one-column) : Remove the extra new-line at the end. * lisp/simple.el (next-completion) : Fix behavior when completion-wrap-movement and remove bobp and eobp. This removes the extra tab ad the end of the list before wrapping or going to the minibuffer and apparently also fixes bug#54374 (switch-to-completions) : Simplify condition code and remove comment not applicable anymore.
-rw-r--r--lisp/minibuffer.el3
-rw-r--r--lisp/simple.el79
2 files changed, 43 insertions, 39 deletions
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index d8df1799c93..5ad44a7a2d8 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -2044,7 +2044,8 @@ Runs of equal candidate strings are eliminated. GROUP-FUN is a
(when title
(insert (format completions-group-format title) "\n")))))
(completion--insert str group-fun)
- (insert "\n")))))
+ (insert "\n")))
+ (delete-char -1)))
(defun completion--insert (str group-fun)
(if (not (consp str))
diff --git a/lisp/simple.el b/lisp/simple.el
index c60abcb1f43..7918767a756 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -9179,46 +9179,53 @@ backward)."
((/= prev (point))
(point))
(t prev))))
- (let ((beg (point-min)) (end (point-max)))
+
+ (let ((beg (point-min))
+ (end (point-max))
+ (tabcommand (member (this-command-keys) '("\t" [backtab])))
+ prop)
(catch 'bound
(while (> n 0)
;; If in a completion, move to the end of it.
(when (get-text-property (point) 'mouse-face)
(goto-char (next-single-property-change (point) 'mouse-face nil end)))
;; If at the last completion option, wrap or skip to the
- ;; minibuffer, if requested.
- (when (and completion-wrap-movement (eobp))
- (if (and (member (this-command-keys) '("\t" [backtab]))
- completion-auto-select)
+ ;; minibuffer, if requested. We can't use (eobp) because some
+ ;; extra text may be after the last candidate: ex: when
+ ;; completion-detailed
+ (setq prop (next-single-property-change (point) 'mouse-face nil end))
+ (when (and completion-wrap-movement (eq end prop))
+ (if (and completion-auto-select tabcommand)
(throw 'bound nil)
(goto-char (point-min))))
;; Move to start of next one.
(unless (get-text-property (point) 'mouse-face)
(goto-char (next-single-property-change (point) 'mouse-face nil end)))
(setq n (1- n)))
+
(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)))
- (goto-char (previous-single-property-change
- (point) 'mouse-face nil beg)))
- ;; Move to end of the previous completion.
- (unless (or (bobp) (get-text-property (1- (point)) 'mouse-face))
- (goto-char (previous-single-property-change
- (point) 'mouse-face nil beg)))
- ;; If at the first completion option, wrap or skip to the
- ;; minibuffer, if requested.
- (when (and completion-wrap-movement (bobp))
- (if (and (member (this-command-keys) '("\t" [backtab]))
- completion-auto-select)
- (progn
- (goto-char (next-single-property-change (point) 'mouse-face nil end))
- (throw 'bound nil))
- (goto-char (point-max))))
- ;; Move to the start of that one.
+ (setq 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)))
(goto-char (previous-single-property-change
- (point) 'mouse-face nil beg))
- (setq n (1+ n)))))
+ (point) 'mouse-face nil beg)))
+ ;; Move to end of the previous completion.
+ (unless (or (bobp) (get-text-property (1- (point)) 'mouse-face))
+ (goto-char (previous-single-property-change
+ (point) 'mouse-face nil beg)))
+ ;; If at the first completion option, wrap or skip to the
+ ;; minibuffer, if requested.
+ (setq prop (previous-single-property-change (point) 'mouse-face nil beg))
+ (when (and completion-wrap-movement (eq beg prop))
+ (if (and completion-auto-select tabcommand)
+ (progn
+ (goto-char (next-single-property-change (point) 'mouse-face nil end))
+ (throw 'bound nil))
+ (goto-char (point-max))))
+ ;; Move to the start of that one.
+ (goto-char (previous-single-property-change
+ (point) 'mouse-face nil beg))
+ (setq n (1+ n))))
(when (/= 0 n)
(switch-to-minibuffer))))
@@ -9436,22 +9443,18 @@ select the completion near point.\n\n")))))
(defun switch-to-completions ()
"Select the completion list window."
(interactive)
- (let ((window (or (get-buffer-window "*Completions*" 0)
- ;; Make sure we have a completions window.
- (progn (minibuffer-completion-help)
- (get-buffer-window "*Completions*" 0)))))
- (when window
- (select-window window)
+ (when-let ((window (or (get-buffer-window "*Completions*" 0)
+ ;; Make sure we have a completions window.
+ (progn (minibuffer-completion-help)
+ (get-buffer-window "*Completions*" 0)))))
+ (select-window window)
+ (when (bobp)
(cond
((and (memq this-command '(completion-at-point minibuffer-complete))
- (equal (this-command-keys) [backtab])
- (bobp))
+ (equal (this-command-keys) [backtab]))
(goto-char (point-max))
(previous-completion 1))
- ;; In the new buffer, go to the first completion.
- ;; FIXME: Perhaps this should be done in `minibuffer-completion-help'.
- ((bobp)
- (next-completion 1))))))
+ (t (next-completion 1))))))
(defun read-expression-switch-to-completions ()
"Select the completion list window while reading an expression."