单独为 modeline 设置字体时如何设置右对齐

我使用 (set-face-attribute 'mode-line nil :font (font-spec :family "Sarasa Term SC" :size size)) 单独为 mode-line 设置字体时,mode-line 元素的右对齐会出问题,猜测是计算宽度时出错,这个问题该如何解决呢?

mode-line 右对齐的设置方法如下:

(let* ((lhs `(...)
         (rhs `(...)
         (rhs-str (format-mode-line rhs))
         (rhs-w (string-width rhs-str)))
    `(,lhs
      ,(propertize " " 'display `((space :align-to (- (+ right right-fringe right-margin) ,rhs-w))))
      ,rhs-str))
1 个赞

先加 properties 然后用 string-pixel-width

(rhs-w (string-pixel-width
                 (propertize rhs-str 'face 'mode-line)))
;; ...
,(propertize " "
                   'display (if (window-system)
                                `(space :align-to (- (+ right right-fringe right-margin) (,rhs-w)))
                              `(space :align-to (,(- (frame-inner-width) rhs-w)))))

string-pixel-width 的做法非常暴力,不清楚这样做性能会不会很差……