Nudge icomplete-mode a little closer to fido-mode
authorJoão Távora <joaotavora@gmail.com>
Fri, 8 Nov 2019 00:11:34 +0000 (00:11 +0000)
committerJoão Távora <joaotavora@gmail.com>
Fri, 8 Nov 2019 10:18:33 +0000 (10:18 +0000)
* lisp/icomplete.el (icomplete-completions): Don't use ellipsis when
truncating determ in fido-mode.  Highlight the center part of
determ with icomplete-first-match.

lisp/icomplete.el

index 40f4f0bc6885f2fe6bb3a8ac4e991df967e934c3..a7f9086d828da4f2c13767b72b3dd4f0f89b0172 100644 (file)
@@ -572,6 +572,13 @@ matches exist."
             (compare (compare-strings name nil nil
                                       most nil nil completion-ignore-case))
             (ellipsis (if (char-displayable-p ?…) "…" "..."))
+             ;; `determ' is what we "determined" to be the thing that
+             ;; TAB will complete to.  Also, if we're working with a
+             ;; large prefix (like when finding files), we want to
+             ;; truncate the common prefix away.  `determ-ellipsis'
+             ;; says if we should do it with an `ellipsis'.  Icomplete
+             ;; uses one, Ido doesn't.
+             (determ-ellipsis (if fido-mode "" ellipsis))
             (determ (unless (or (eq t compare) (eq t most-try)
                                 (= (setq compare (1- (abs compare)))
                                    (length most)))
@@ -582,8 +589,10 @@ matches exist."
                                 (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))))
+                               ((< compare (+ 2 (string-width determ-ellipsis)))
+                                most)
+                               (t (concat determ-ellipsis
+                                          (substring most compare))))
                               close-bracket)))
             ;;"-prospects" - more than one candidate
             (prospects-len (+ (string-width
@@ -664,6 +673,8 @@ matches exist."
                    (mapconcat 'identity prospects icomplete-separator)
                    (and limit (concat icomplete-separator ellipsis))
                    "}")
+          (put-text-property 1 (1- (length determ))
+                             'face 'icomplete-first-match determ)
          (concat determ " [Matched]"))))))
 
 ;;; Iswitchb compatibility