From 37d4ed3ca0a7c314382af64bda643a9dbf31c469 Mon Sep 17 00:00:00 2001 From: Daniel Mendler Date: Tue, 5 Nov 2024 09:39:24 +0100 Subject: Reduce popup width fluctuations --- CHANGELOG.org | 2 ++ corfu.el | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index 91ed82b..35871d1 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -9,6 +9,8 @@ sure that the scroll bar cannot be pushed outside the child frame by the content. This affects for example ~cape-emoji~. - Improve suffix alignment. +- Remember popup width during completion to avoid width fluctuations. Basically + the popup is only allowed to grow. * Version 1.5 (2024-07-26) diff --git a/corfu.el b/corfu.el index 52fe631..505d41c 100644 --- a/corfu.el +++ b/corfu.el @@ -300,6 +300,9 @@ See also the settings `corfu-auto-delay', `corfu-auto-prefix' and (defvar corfu--frame nil "Popup frame.") +(defvar corfu--width 0 + "Popup width of current completion to reduce width fluctuations.") + (defconst corfu--initial-state (mapcar (lambda (k) (cons k (symbol-value k))) @@ -313,7 +316,8 @@ See also the settings `corfu-auto-delay', `corfu-auto-prefix' and corfu--total corfu--preview-ov corfu--change-group - corfu--metadata)) + corfu--metadata + corfu--width)) "Initial Corfu state.") (defvar corfu--frame-parameters @@ -740,8 +744,9 @@ FRAME is the existing frame." (sw (cl-loop for x in cands maximize (string-width (caddr x)))) ;; -4 because of margins and some additional safety (max-width (min corfu-max-width (- (frame-width) 4))) - (width (min (max corfu-min-width (+ pw cw sw)) max-width)) + (width (min (max corfu--width corfu-min-width (+ pw cw sw)) max-width)) (trunc (not (display-graphic-p)))) + (setq corfu--width width) (list pw width (cl-loop for (cand prefix suffix) in cands collect -- cgit v1.0