24.4.7 窗口标题栏

窗口可以在顶部显示一条标题栏(header line),就像它可以在底部显示模式行一样。标题栏的工作机制与模式行完全相同,只是它由 header-line-format 控制:

Variable: header-line-format

该变量对每个缓冲区局部有效,用于指定显示该缓冲区的窗口如何展示标题栏。其值的格式与 mode-line-format 一致 (see 模式行的数据结构)。 该变量通常为 nil,因此普通缓冲区不会显示标题栏。

如果在缓冲区中开启了 display-line-numbers-mode (see display-line-numbers-mode in The GNU Emacs Manual),缓冲区文本在显示时会根据行号所需的屏幕宽度自动缩进。 与之不同,标题栏文本不会自动缩进,因为标题栏从不显示行号,且标题栏内容也不一定与下方的缓冲区文本直接相关。 如果 Lisp 程序需要让标题栏文本与缓冲区文本对齐(例如缓冲区以列状数据展示,如同 tabulated-list-mode,see 表格列表模式),则应开启次要模式 header-line-indent-mode

Command: header-line-indent-mode

该缓冲区局部次要模式会跟踪屏幕上行号显示宽度的变化(行号宽度可能随窗口内显示的行号范围而改变), 并允许 Lisp 程序在行号宽度变化时始终保持标题栏文本与缓冲区文本对齐。 这类 Lisp 程序应在缓冲区中开启此模式,并在 header-line-format 中使用变量 header-line-indentheader-line-indent-width,以确保标题栏始终与文本缩进匹配。

Variable: header-line-indent

该变量的值为一个空白字符串,在窗口显示的缓冲区中开启 header-line-indent-mode 时, 其宽度会始终与当前行号显示宽度保持一致。空格数量基于一个假设计算:标题栏文本所使用的字体(包括字号) 与框架默认字体相同;若该假设不成立,则应使用下文介绍的 header-line-indent-width。 该变量适用于简单场景:只需将标题栏整体缩进,使其与下方缓冲区文本对齐,只需将此变量值添加到实际标题栏文本前即可。 例如,如下 header-line-format 定义:

(setq header-line-format
      `("" header-line-indent ,my-header-line))

其中 my-header-line 是生成标题栏实际内容的格式字符串,可确保标题栏文本始终与下方缓冲区文本保持相同缩进。

Variable: header-line-indent-width

在窗口显示的缓冲区中开启 header-line-indent-mode 时,该变量的值会持续更新, 以框架标准字符宽度为单位,表示当前行号显示所占用的宽度。当 header-line-indent 灵活性不足时,可使用该变量实现标题栏文本与缓冲区文本的对齐。 例如,若标题栏使用的字体度量与默认字体不同,你的 Lisp 程序可将此变量值与 frame-char-width 返回值相乘(see Frame Font),计算出行号显示的像素宽度, 再在 header-line-format 的相关部分使用 :align-to 显示属性规范(see Specified Spaces) 以像素为单位对齐标题栏文本。

Function: window-header-line-height &optional window

该函数返回 window 标题栏的像素高度。window 必须为活动窗口,默认为选中窗口。

高度仅一行的窗口永远不会显示标题栏。高度为两行的窗口无法同时显示模式行与标题栏; 若存在模式行,则不会显示标题栏。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike