From: Andrii Kolomoiets <andreyk.mad@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: [PATCH] Support "\n" in icomplete-separator
Date: Fri, 06 Nov 2020 12:26:37 +0200 [thread overview]
Message-ID: <m2361m93xe.fsf@gmail.com> (raw)
In-Reply-To: <jwvft5ngza1.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Thu, 05 Nov 2020 18:29:47 -0500")
[-- Attachment #1: Type: text/plain, Size: 672 bytes --]
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> I'm a bit late to the icomplete-vertical party, but please let me show
>> you my approach at supporting "\n" in 'icomplete-separator'.
>
> A side-note: I think the use of "..." to indicate that there are more
> entries is a bad idea. Better represent it with the absence of
> a terminator (e.g. in the normal icomplete-mode, it basically means
> replace "...}" with ""). It will make the code simpler, more robust,
> and a side benefit is that it will make slightly more efficient use of
> the screen real estate.
Good point!
Removed ellipsis completelly. Or it was intended to remove it only in
vertical mode?
[-- Attachment #2: icomplete-vertical.diff --]
[-- Type: text/x-patch, Size: 6177 bytes --]
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 4e546807b7..2fe740292c 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -687,33 +687,32 @@ icomplete-completions
;; a prefix of most, or something else.
(compare (compare-strings name nil nil
most nil nil completion-ignore-case))
- (ellipsis (if (char-displayable-p ?…) "…" "..."))
(determ (unless (or (eq t compare) (eq t most-try)
(= (setq compare (1- (abs compare)))
(length most)))
(concat open-bracket
- (cond
- ((= compare (length name))
+ ;; Don't bother truncating if it doesn't gain
+ ;; us at least 2 columns.
+ (if (< compare 2)
+ most
;; Typical case: name is a prefix.
- (substring most compare))
- ;; Don't bother truncating if it doesn't gain
- ;; us at least 2 columns.
- ((< compare (+ 2 (string-width ellipsis))) most)
- (t (concat ellipsis (substring most compare))))
+ (substring most compare))
close-bracket)))
+ (vertical (string-match "\n" icomplete-separator))
;;"-prospects" - more than one candidate
- (prospects-len (+ (string-width
- (or determ (concat open-bracket close-bracket)))
- (string-width icomplete-separator)
- (+ 2 (string-width ellipsis)) ;; take {…} into account
- (string-width (buffer-string))))
+ (prospects-len (unless vertical
+ (+ (string-width
+ (if determ (concat determ "{") open-bracket))
+ (string-width (buffer-string)))))
(prospects-max
- ;; Max total length to use, including the minibuffer content.
- (* (+ icomplete-prospects-height
- ;; If the minibuffer content already uses up more than
- ;; one line, increase the allowable space accordingly.
- (/ prospects-len (window-width)))
- (window-width)))
+ (if vertical
+ icomplete-prospects-height
+ ;; Max total length to use, including the minibuffer content.
+ (* (+ icomplete-prospects-height
+ ;; If the minibuffer content already uses up more than
+ ;; one line, increase the allowable space accordingly.
+ (/ prospects-len (window-width)))
+ (window-width))))
;; Find the common prefix among `comps'.
;; We can't use the optimization below because its assumptions
;; aren't always true, e.g. when completion-cycling (bug#10850):
@@ -730,7 +729,9 @@ icomplete-completions
;; is already displayed via `most'.
(string-prefix-p prefix most t)
(length prefix))) ;;)
- prospects comp limit)
+ (limit (when vertical
+ (> (length comps) prospects-max)))
+ prospects comp)
(if (or (eq most-try t) (not (consp (cdr comps))))
(setq prospects nil)
(when (member name comps)
@@ -753,24 +754,38 @@ icomplete-completions
;; completion field.
(setq determ (concat open-bracket "" close-bracket)))
;; Compute prospects for display.
- (while (and comps (not limit))
- (setq comp
- (if prefix-len (substring (car comps) prefix-len) (car comps))
- comps (cdr comps))
- (setq prospects-len
- (+ (string-width comp)
- (string-width icomplete-separator)
- prospects-len))
- (if (< prospects-len prospects-max)
- (push comp prospects)
- (setq limit t))))
- (setq prospects (nreverse prospects))
- ;; Decorate first of the prospects.
- (when prospects
- (let ((first (copy-sequence (pop prospects))))
- (put-text-property 0 (length first)
- 'face 'icomplete-first-match first)
- (push first prospects)))
+ (if vertical
+ (while (and comps (> prospects-max 0))
+ (setq prospects-max (1- prospects-max))
+ (push (if prefix-len
+ (substring (pop comps) prefix-len)
+ (pop comps))
+ prospects))
+ (while (and comps (not limit))
+ (setq comp (if prefix-len
+ (substring (pop comps) prefix-len)
+ (pop comps)))
+ (setq prospects-len
+ (+ (string-width comp)
+ prospects-len))
+ ;; There be the } after last comp. Add 1 to prospects-len if last comp.
+ (if (<= (+ (if comps 0 1) prospects-len) prospects-max)
+ (push comp prospects)
+ (setq limit t))
+ ;; Add separator if there are more comps
+ (when (and comps (not limit))
+ (setq prospects-len
+ (+ (string-width icomplete-separator)
+ prospects-len))
+ (unless (<= prospects-len prospects-max)
+ (setq limit t)))))
+ (when prospects
+ (setq prospects (nreverse prospects))
+ ;; Decorate first of the prospects.
+ (let ((first (copy-sequence (pop prospects))))
+ (put-text-property 0 (length first)
+ 'face 'icomplete-first-match first)
+ (push first prospects))))
;; Restore the base-size info, since completion-all-sorted-completions
;; is cached.
(if last (setcdr last base-size))
@@ -778,8 +793,7 @@ icomplete-completions
(concat determ
"{"
(mapconcat 'identity prospects icomplete-separator)
- (and limit (concat icomplete-separator ellipsis))
- "}")
+ (unless limit "}"))
(concat determ " [Matched]"))))))
;;; Iswitchb compatibility
next prev parent reply other threads:[~2020-11-06 10:26 UTC|newest]
Thread overview: 126+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-05 23:10 [PATCH] Support "\n" in icomplete-separator Andrii Kolomoiets
2020-11-05 23:29 ` Stefan Monnier
2020-11-06 0:04 ` Ergus
2020-11-06 2:44 ` Stefan Monnier
2020-11-06 8:42 ` Gregory Heytings via Emacs development discussions.
2020-11-06 10:26 ` Andrii Kolomoiets [this message]
2020-11-05 23:57 ` Ergus
2020-11-06 8:43 ` Gregory Heytings via Emacs development discussions.
2020-11-06 12:36 ` Andrii Kolomoiets
2020-11-06 15:15 ` Ergus
2020-11-08 20:14 ` Andrii Kolomoiets
2020-11-08 20:30 ` Gregory Heytings via Emacs development discussions.
2020-11-08 20:36 ` Andrii Kolomoiets
2020-11-09 3:28 ` Eli Zaretskii
2020-11-09 21:04 ` Andrii Kolomoiets
2020-11-10 15:13 ` Eli Zaretskii
2020-11-10 17:18 ` Andrii Kolomoiets
2020-11-10 18:18 ` Gregory Heytings via Emacs development discussions.
2020-11-11 9:41 ` Andrii Kolomoiets
2020-11-10 18:23 ` Eli Zaretskii
2020-11-10 19:17 ` Gregory Heytings via Emacs development discussions.
2020-11-10 19:27 ` Eli Zaretskii
2020-11-10 20:00 ` Gregory Heytings via Emacs development discussions.
2020-11-10 21:09 ` Andrii Kolomoiets
2020-11-11 8:27 ` martin rudalics
2020-11-11 9:07 ` Gregory Heytings via Emacs development discussions.
2020-11-11 15:57 ` Jean Louis
2020-11-11 9:38 ` Andrii Kolomoiets
2020-11-11 10:01 ` martin rudalics
2020-11-11 10:21 ` Gregory Heytings via Emacs development discussions.
2020-11-11 10:53 ` martin rudalics
2020-11-11 11:22 ` Gregory Heytings via Emacs development discussions.
2020-11-11 15:49 ` martin rudalics
2020-11-11 15:57 ` Eli Zaretskii
2020-11-11 16:16 ` Jean Louis
2020-11-11 17:06 ` martin rudalics
2020-11-11 17:28 ` Gregory Heytings via Emacs development discussions.
2020-11-11 16:05 ` Gregory Heytings via Emacs development discussions.
2020-11-11 17:06 ` martin rudalics
2020-11-11 17:26 ` Stefan Monnier
2020-11-11 17:37 ` Gregory Heytings via Emacs development discussions.
2020-11-11 15:32 ` Jean Louis
2020-11-11 15:26 ` Jean Louis
2020-11-11 16:06 ` Eli Zaretskii
2020-11-11 17:12 ` Gregory Heytings via Emacs development discussions.
2020-11-11 17:19 ` Alfred M. Szmidt
2020-11-11 17:44 ` Gregory Heytings via Emacs development discussions.
2020-11-11 17:50 ` Alfred M. Szmidt
2020-11-11 18:14 ` Eli Zaretskii
2020-11-11 18:09 ` Eli Zaretskii
2020-11-11 18:39 ` Gregory Heytings via Emacs development discussions.
2020-11-11 20:21 ` Eli Zaretskii
2020-11-11 20:37 ` Gregory Heytings via Emacs development discussions.
2020-11-11 21:55 ` Ergus
2020-11-11 22:26 ` Jean Louis
2020-11-11 22:59 ` Stefan Monnier
2020-11-12 3:28 ` Eli Zaretskii
2020-11-12 8:50 ` Gregory Heytings via Emacs development discussions.
2020-11-12 9:13 ` on helm substantial differences - " Jean Louis
2020-11-12 9:20 ` Gregory Heytings via Emacs development discussions.
2020-11-12 10:25 ` Jean Louis
2020-11-12 10:54 ` Gregory Heytings via Emacs development discussions.
2020-11-12 11:33 ` Jean Louis
2020-11-12 14:40 ` Gregory Heytings via Emacs development discussions.
2020-11-12 17:46 ` Jean Louis
2020-11-12 14:41 ` Eli Zaretskii
2020-11-12 17:49 ` Jean Louis
2020-11-12 17:58 ` Eli Zaretskii
2020-11-12 14:36 ` Eli Zaretskii
2020-11-12 15:05 ` Gregory Heytings via Emacs development discussions.
2020-11-12 15:36 ` Eli Zaretskii
2020-11-12 16:10 ` Gregory Heytings via Emacs development discussions.
2020-11-12 17:50 ` Eli Zaretskii
2020-11-13 12:40 ` Gregory Heytings via Emacs development discussions.
2020-11-13 12:59 ` Eli Zaretskii
2020-11-13 13:36 ` Gregory Heytings via Emacs development discussions.
2020-11-13 13:52 ` Eli Zaretskii
2020-11-13 15:09 ` Stephen Berman
2020-11-13 16:05 ` Eli Zaretskii
2020-11-13 17:31 ` Stephen Berman
2020-11-16 10:24 ` Gregory Heytings via Emacs development discussions.
2020-11-16 17:44 ` Eli Zaretskii
2020-11-17 11:51 ` Gregory Heytings via Emacs development discussions.
2020-11-12 7:58 ` martin rudalics
2020-11-12 8:52 ` Gregory Heytings via Emacs development discussions.
2020-11-12 14:37 ` Eli Zaretskii
2020-11-12 12:39 ` Dmitry Gutov
2020-11-12 19:31 ` Howard Melman
2020-11-12 20:02 ` ivy-posframe review - " Jean Louis
2020-11-11 14:09 ` Jean Louis
2020-11-11 15:51 ` Eli Zaretskii
2020-11-11 16:05 ` Jean Louis
2020-11-11 18:52 ` Drew Adams
2020-11-11 19:10 ` martin rudalics
2020-11-11 19:49 ` Drew Adams
2020-11-12 7:58 ` martin rudalics
2020-11-11 19:51 ` Drew Adams
2020-11-11 16:30 ` Eli Zaretskii
2020-11-12 22:51 ` Andrii Kolomoiets
2020-11-13 8:39 ` Eli Zaretskii
2020-11-13 12:56 ` Gregory Heytings via Emacs development discussions.
2020-11-13 13:02 ` Eli Zaretskii
2020-11-13 13:44 ` Gregory Heytings via Emacs development discussions.
2020-11-13 13:55 ` Eli Zaretskii
2020-11-16 10:25 ` Gregory Heytings via Emacs development discussions.
2020-11-16 17:40 ` Eli Zaretskii
2020-11-16 17:41 ` Stefan Monnier
2020-11-16 18:24 ` Eli Zaretskii
2020-11-17 11:51 ` Gregory Heytings via Emacs development discussions.
2020-11-17 14:05 ` Stefan Monnier
2020-11-13 19:27 ` Andrii Kolomoiets
2020-11-17 8:59 ` Gregory Heytings via Emacs development discussions.
2020-11-13 20:18 ` Andrii Kolomoiets
2020-11-14 6:17 ` Ergus
2020-11-14 20:36 ` Andrii Kolomoiets
2020-11-15 2:39 ` Ergus
2020-11-15 19:32 ` Andrii Kolomoiets
2020-11-10 20:01 ` Stefan Monnier
2020-11-06 5:52 ` Jean Louis
2020-11-06 12:40 ` Andrii Kolomoiets
2020-11-06 12:59 ` Jean Louis
2020-11-08 20:28 ` Andrii Kolomoiets
2020-11-08 20:50 ` Jean Louis
-- strict thread matches above, loose matches on Subject: below --
2020-11-06 16:30 Drew Adams
[not found] <<m2a6vv8ko3.fsf@gmail.com>
[not found] ` <<20201105235735.oxouuek66ehu5o45@Ergus>
[not found] ` <<m2y2je7jcx.fsf@gmail.com>
[not found] ` <<20201106151541.dpgep7borlja25su@Ergus>
[not found] ` <<m2d00n7gj4.fsf@gmail.com>
[not found] ` <<837dqv5huk.fsf@gnu.org>
[not found] ` <<m24klys0n2.fsf@gmail.com>
[not found] ` <<83mtzp2qj0.fsf@gnu.org>
[not found] ` <<m2imad6sh1.fsf@gmail.com>
[not found] ` <<83r1p11369.fsf@gnu.org>
[not found] ` <<m2a6vo7wcw.fsf@gmail.com>
[not found] ` <<ca240036-8493-968d-2204-620f430334b9@gmx.at>
[not found] ` <<m2sg9g5j2p.fsf@gmail.com>
[not found] ` <<fe70158f-d55a-010a-74ba-2f81d1bb7663@gmx.at>
[not found] ` <<837dqr27zs.fsf@gnu.org>
2020-11-11 19:03 ` Drew Adams
[not found] ` <<alpine.NEB.2.22.394.2011111803220453.17489@sdf.lonestar.org>
[not found] ` <<83361f22ah.fsf@gnu.org>
[not found] ` <<alpine.NEB.2.22.394.2011111926450453.27530@sdf.lonestar.org>
[not found] ` <<83sg9fzlto.fsf@gnu.org>
[not found] ` <<alpine.NEB.2.22.394.2011112128400453.4149@sdf.lonestar.org>
[not found] ` <<83r1ozz22j.fsf@gnu.org>
[not found] ` <<alpine.NEB.2.22.394.2011120932160453.28737@sdf.lonestar.org>
[not found] ` <<83d00izloj.fsf@gnu.org>
[not found] ` <<alpine.NEB.2.22.394.2011121544550453.26984@sdf.lonestar.org>
[not found] ` <<83361ezix2.fsf@gnu.org>
2020-11-12 17:42 ` Drew Adams
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2361m93xe.fsf@gmail.com \
--to=andreyk.mad@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).