24.4.1 模式行基础

每个模式行的内容由缓冲区局部变量 mode-line-format 指定(see 模式行控制的顶层结构)。该变量保存一个模式行构造(mode line construct):一个控制缓冲区模式行显示内容的模板。header-line-formattab-line-format 的值以相同方式指定缓冲区的表头行和标签行。同一缓冲区的所有窗口均使用相同的 mode-line-formatheader-line-formattab-line-format,除非为该窗口单独指定了对应的参数(see Window Parameters)。

出于效率考虑,Emacs 不会持续重新计算每个窗口的模式行和表头行。仅在必要场景下才会更新,例如修改窗口配置、切换缓冲区、对缓冲区进行缩窄/扩宽、滚动或修改缓冲区内容。如果你修改了 mode-line-formatheader-line-format 所引用的任意变量(see 模式行中使用的变量),或其他影响文本显示的数据结构(see Emacs Display),应使用函数 force-mode-line-update 强制更新显示。

Function: force-mode-line-update &optional all

该函数强制 Emacs 在下一次重绘周期中,根据所有相关变量的最新值更新当前缓冲区的模式行和表头行。若可选参数 allnil,则强制更新所有模式行和表头行。

该函数同时会强制更新菜单栏与框架标题。

当前选中窗口的模式行通常使用 mode-line-active 面孔以不同颜色显示,其他窗口的模式行则使用 mode-line-inactive 面孔。See Faces

Function: mode-line-window-selected-p

若需要在选中与非选中窗口的模式行之间实现更丰富的差异,可在 :eval 构造中使用该谓词函数。例如,若希望在选中窗口中以粗体显示缓冲区名称,在其他窗口中以斜体显示,可使用如下代码:

(setq-default
 mode-line-buffer-identification
 '(:eval (propertize "%12b"
		     'face (if (mode-line-window-selected-p)
			       'bold
			     'italic))))

部分模式会在模式行中放置大量内容,导致行尾元素被挤出右侧。若变量 mode-line-compactnil,Emacs 可对模式行进行“压缩”,将连续多个空格合并为单个空格。若该变量值为 long,则仅在模式行宽度超过当前选中窗口时才执行压缩。(该计算为近似值,基于字符数量而非实际显示宽度。)该变量可设为缓冲区局部,仅对特定缓冲区的模式行进行压缩。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike