在一些时候window宽度太小,我想要筛选一些信息显示出来,有什么办法吗?
这里举个例子, 可以把 :eval
后面换成任意表达式
(setq mode-line-format
'(:eval
(if (>= (window-width) 100)
'("%e"
mode-line-buffer-identification
mode-line-position
mode-line-modes
mode-line-misc-info
mode-line-end-spaces)
'("%e"
mode-line-buffer-identification
mode-line-position
;; mode-line-modes
;; mode-line-misc-info
;; mode-line-end-spaces
))))
1 个赞
可以弄得更复杂一点,给各个部件设置优先级,用一个函数计算modeline长度,和窗口宽度对比。宽度不够的话就根据优先度去除部件。最后返回。
怎么计算长度?
看看powerline的代码
举个例子, mode line 太长的时候, 不显示中间的
(defun compute-mode-line ()
(let* ((left '("%e" mode-line-buffer-identification mode-line-position))
(center '("%e" mode-line-modes mode-line-misc-info global-mode-string))
(right default-directory)
(width (string-width (format-mode-line (list left center right)))))
(if (> width (window-width))
(list left right)
(list left center right))))
(setq mode-line-format '(:eval (compute-mode-line)))
3 个赞
太棒了