From: Ergus <spacibba@aol.com>
To: Juri Linkov <juri@linkov.net>
Cc: emacs-devel@gnu.org
Subject: Re: [PATCH] Re: Other details about completion.
Date: Mon, 4 Apr 2022 21:35:01 +0200 [thread overview]
Message-ID: <20220404193501.adojhz7uvvaoq4sj@Ergus> (raw)
In-Reply-To: <20220401202425.jfrwqmkm3ffmcm5h@Ergus>
May I finally add this patch to master??
On Fri, Apr 01, 2022 at 10:24:25PM +0200, Ergus wrote:
>Hi again...
>
>Here I attached a small patch that makes 3 small changes:
>
>1) Remove the trailing newline in completions one-column
>2) Use another condition in next-completion to jump to minibuffer.
>
>Normally next-completion with tabs at the end of the buffer needs an
>extra tab because it goes to the end of the last completion before
>jumping to the minibuffer or wrap.. That extra tab is because the
>condition to jump or wrap was eobp/bobp assuming that there is not text
>unproppertized after the last candidate.
>
>3) Remove a comment in switch-to-completions. That comment suggested that
>the next-completion action must be called inside
>minibuffer-completion-help but IMO that is not totally correct when
>completion-auto-select has some of the new values.
>
>Please, if anyone could review,correct and push I would be very
>grateful.
>
>Best,
>Ergus
>diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
>index d8df1799c9..5ad44a7a2d 100644
>--- a/lisp/minibuffer.el
>+++ b/lisp/minibuffer.el
>@@ -2044,7 +2044,8 @@ completion--insert-one-column
> (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 c60abcb1f4..7918767a75 100644
>--- a/lisp/simple.el
>+++ b/lisp/simple.el
>@@ -9179,46 +9179,53 @@ next-completion
> ((/= 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 @@ completion-setup-function
> (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."
next prev parent reply other threads:[~2022-04-04 19:35 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20220401153839.idrzrbfl2yfzga3y.ref@Ergus>
2022-04-01 15:38 ` Other details about completion Ergus
2022-04-01 16:21 ` Eli Zaretskii
2022-04-01 16:43 ` Juri Linkov
2022-04-01 16:45 ` Ergus
2022-04-01 20:24 ` [PATCH] " Ergus
2022-04-02 18:09 ` Juri Linkov
2022-04-03 0:39 ` Ergus
2022-04-04 19:35 ` Ergus [this message]
2022-04-04 19:45 ` Juri Linkov
2022-04-04 20:31 ` Philip Kaludercic
2022-04-05 11:06 ` Ergus
2022-04-04 22:33 ` Ergus
2022-04-05 19:22 ` Juri Linkov
2022-04-05 23:20 ` Ergus
2022-04-06 7:35 ` Juri Linkov
2022-04-06 13:21 ` Ergus
2022-04-06 16:48 ` Juri Linkov
2022-04-06 17:45 ` [External] : " Drew Adams
2022-04-06 18:25 ` Juri Linkov
2022-04-06 20:01 ` Drew Adams
2022-04-06 17:45 ` Ergus
2022-04-06 18:29 ` Juri Linkov
2022-04-06 19:50 ` Ergus
2022-04-07 7:35 ` Juri Linkov
2022-04-07 9:16 ` Ergus
2022-04-07 16:53 ` Juri Linkov
2022-04-07 17:38 ` Ergus
2022-04-07 18:04 ` Juri Linkov
2022-04-07 18:35 ` Ergus
2022-04-08 7:40 ` Juri Linkov
2022-04-08 8:42 ` Ergus
2022-04-08 16:20 ` [External] : " Drew Adams
2022-04-08 16:46 ` Juri Linkov
2022-04-08 9:31 ` Philip Kaludercic
2022-04-08 16:20 ` [External] : " Drew Adams
2022-04-08 16:51 ` Juri Linkov
2022-04-08 20:12 ` Philip Kaludercic
2022-04-06 23:55 ` Ergus
2022-04-06 18:13 ` Ergus
2022-04-06 18:34 ` Juri Linkov
2022-04-06 20:34 ` Ergus
2022-04-07 7:39 ` Juri Linkov
2022-04-07 9:08 ` Ergus
2022-04-07 16:50 ` Juri Linkov
2022-04-07 17:22 ` Ergus
2022-04-07 17:57 ` Juri Linkov
2022-04-07 18:27 ` Ergus
2022-04-08 7:45 ` Juri Linkov
2022-04-08 8:46 ` Ergus
2022-04-08 16:20 ` [External] : " Drew Adams
2022-04-08 16:53 ` Juri Linkov
2022-04-06 9:07 ` Lars Ingebrigtsen
2022-04-06 16:43 ` Juri Linkov
2022-04-07 11:09 ` Lars Ingebrigtsen
2022-04-07 16:46 ` Juri Linkov
2022-04-08 12:59 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220404193501.adojhz7uvvaoq4sj@Ergus \
--to=spacibba@aol.com \
--cc=emacs-devel@gnu.org \
--cc=juri@linkov.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.