emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/corfu 00e402e 2/2: Move popup by prefix width


From: ELPA Syncer
Subject: [elpa] externals/corfu 00e402e 2/2: Move popup by prefix width
Date: Tue, 9 Nov 2021 19:57:14 -0500 (EST)

branch: externals/corfu
commit 00e402e301abc1edf7ab1a98ef439d2f552301a7
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Move popup by prefix width
---
 corfu.el | 49 +++++++++++++++++++++++++------------------------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/corfu.el b/corfu.el
index 52e0cab..d2a4be3 100644
--- a/corfu.el
+++ b/corfu.el
@@ -376,7 +376,7 @@ completion began less than that number of seconds ago."
     (set-frame-size corfu--frame width height t)
     (make-frame-visible corfu--frame)))
 
-(defun corfu--popup-show (pos lines &optional curr lo bar)
+(defun corfu--popup-show (pos off lines &optional curr lo bar)
   "Show LINES as popup at POS, with CURR highlighted and scrollbar from LO to 
LO+BAR."
   (let* ((ch (default-line-height))
          (cw (default-font-width))
@@ -393,7 +393,7 @@ completion began less than that number of seconds ago."
          (x (or (car pos) 0))
          (y (or (cdr pos) 0)))
     (corfu--make-frame
-     (- x mw) y
+     (- x mw (* cw off)) y
      (+ (* width cw) mw mw) (* (length lines) ch)
      (mapconcat (lambda (line)
                   (let ((str (concat margin line align
@@ -604,8 +604,8 @@ completion began less than that number of seconds ago."
                           (string-trim (replace-regexp-in-string "[ \t]*\n[ 
\t]*" " " s)))))
   (let* ((cw (cl-loop for x in cands maximize (string-width (car x))))
          (pw (cl-loop for x in cands maximize (string-width (cadr x))))
-         (pw (if (> pw 0) (1+ pw) 0))
          (sw (cl-loop for x in cands maximize (string-width (caddr x))))
+         (pw (if (> pw 0) (1+ pw) 0))
          (sw (if (> sw 0) (1+ sw) 0))
          (width (+ pw cw sw)))
     (when (< width corfu-min-width)
@@ -613,34 +613,35 @@ completion began less than that number of seconds ago."
             width corfu-min-width))
     ;; -4 because of margins and some additional safety
     (setq width (min width corfu-max-width (- (frame-width) 4)))
-    (mapcar (pcase-lambda (`(,cand ,prefix ,suffix))
-              (truncate-string-to-width
-               (concat prefix
-                       (make-string (- pw (string-width prefix)) ?\s)
-                       cand
-                       (make-string (+ (- cw (string-width cand))
-                                       (- sw (string-width suffix)))
-                                    ?\s)
-                       suffix)
-               width))
-            cands)))
+    (cons pw (mapcar (pcase-lambda (`(,cand ,prefix ,suffix))
+                       (truncate-string-to-width
+                        (concat prefix
+                                (make-string (- pw (string-width prefix)) ?\s)
+                                cand
+                                (make-string (+ (- cw (string-width cand))
+                                                (- sw (string-width suffix)))
+                                             ?\s)
+                                suffix)
+                        width))
+                     cands))))
 
 (defun corfu--show-candidates (beg end str)
   "Update display given BEG, END and STR."
-  (let* ((start (min (max 0 (- corfu--index (/ corfu-count 2)))
-                     (max 0 (- corfu--total corfu-count))))
-         (curr (- corfu--index start))
-         (last (min (+ start corfu-count) corfu--total))
-         (bar (ceiling (* corfu-count corfu-count) corfu--total))
-         (lo (min (- corfu-count bar 1) (floor (* corfu-count start) 
corfu--total)))
-         (cands (funcall corfu--highlight (seq-subseq corfu--candidates start 
last)))
-         (ann-cands (corfu--format-candidates (corfu--affixate cands))))
+  (pcase-let* ((start (min (max 0 (- corfu--index (/ corfu-count 2)))
+                           (max 0 (- corfu--total corfu-count))))
+               (curr (- corfu--index start))
+               (last (min (+ start corfu-count) corfu--total))
+               (bar (ceiling (* corfu-count corfu-count) corfu--total))
+               (lo (min (- corfu-count bar 1) (floor (* corfu-count start) 
corfu--total)))
+               (cands (funcall corfu--highlight (seq-subseq corfu--candidates 
start last)))
+               (`(,pw . ,fcands) (corfu--format-candidates (corfu--affixate 
cands))))
     ;; Nonlinearity at the end and the beginning
     (when (/= start 0)
       (setq lo (max 1 lo)))
     (when (/= last corfu--total)
       (setq lo (min (- corfu-count bar 2) lo)))
-    (corfu--popup-show (+ beg corfu--base) ann-cands curr (and (> corfu--total 
corfu-count) lo) bar)
+    (corfu--popup-show (+ beg corfu--base) pw fcands curr
+                       (and (> corfu--total corfu-count) lo) bar)
     (when (>= curr 0)
       (corfu--echo-documentation (nth corfu--index corfu--candidates))
       (corfu--show-overlay beg end str (nth curr cands)))))
@@ -719,7 +720,7 @@ completion began less than that number of seconds ago."
                (if (and corfu--auto-start (numberp corfu-quit-no-match))
                    (< (- (float-time) corfu--auto-start) corfu-quit-no-match)
                  (eq t corfu-quit-no-match))))
-      (corfu--popup-show beg '(#("No match" 0 8 (face italic)))) ;; => Show 
confirmation popup
+      (corfu--popup-show beg 0 '(#("No match" 0 8 (face italic)))) ;; => Show 
confirmation popup
       t))))
 
 (defun corfu--pre-command ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]