summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--corfu.el12
1 files changed, 8 insertions, 4 deletions
diff --git a/corfu.el b/corfu.el
index 40247ef..3d82031 100644
--- a/corfu.el
+++ b/corfu.el
@@ -1015,11 +1015,13 @@ A scroll bar is displayed from LO to LO+BAR."
(with-current-buffer (corfu--make-buffer " *corfu*")
(let* ((ch (default-line-height))
(cw (default-font-width))
- (fringe (display-graphic-p))
(ml (ceiling (* cw corfu-left-margin-width)))
(bw (ceiling (* cw corfu-scroll-bar-width)))
(mr (max bw (ceiling (* cw corfu-right-margin-width))))
(marginl (and (> ml 0) (propertize " " 'display `(space :width (,ml)))))
+ ;; PROBLEM: Even if the fringe is allowed to be larger, fringe
+ ;; bitmaps can only have a width between 1 and 16. :(
+ (fringe (and (<= 1 mr 16) (display-graphic-p)))
(sbar (if fringe
#(" " 0 1 (display (right-fringe corfu--bar corfu-scroll-bar)))
(concat (propertize " " 'display `(space :align-to (- right (,bw))))
@@ -1042,11 +1044,13 @@ A scroll bar is displayed from LO to LO+BAR."
(y (if (> (+ yb (* corfu-count ch) lh lh) (frame-pixel-height))
(- yb pheight lh border border)
yb))
- (row 0))
+ (row 0)
+ (bbits (1- (ash 1 bw))))
(setq right-fringe-width (if fringe mr 0))
- (when (and (> right-fringe-width 0) (not (fringe-bitmap-p 'corfu--bar)))
+ (when (and (> right-fringe-width 0) (not (eq (get 'corfu--bar 'corfu--bar-bits) bbits)))
+ (define-fringe-bitmap 'corfu--bar (vector (put 'corfu--bar 'corfu--bar-bits bbits))
+ 1 mr '(top periodic))
(define-fringe-bitmap 'corfu--nil [])
- (define-fringe-bitmap 'corfu--bar (vector (1- (ash 1 bw))) 1 mr '(top periodic))
;; Fringe bitmaps require symbol face specification, define internal faces.
(set-face-attribute (make-face 'corfu--bar-cur) nil
:inherit '(corfu-scroll-bar corfu-current)))