本节介绍被 mode-line-format 的标准值纳入模式行文本的变量。
这些变量本身并无特殊之处;如果修改 mode-line-format 的值以使用其他变量,
它们同样可以对模式行产生相同效果。但 Emacs 的多个模块在设置这些变量时,
均默认它们会控制模式行的相应部分;因此从实际使用角度来说,模式行必须使用这些变量。
另请参见 Optional Mode Line in The GNU Emacs Manual。
该变量保存用于显示语言环境、缓冲区编码系统以及当前输入法相关信息的模式行构造值。 See Non-ASCII Characters。
该变量保存用于显示当前缓冲区是否已被修改的模式行构造值。其默认值显示规则为: 缓冲区已修改时显示 ‘**’,未修改时显示 ‘--’, 只读时显示 ‘%%’,只读且已修改时显示 ‘%*’。
修改此变量不会强制刷新模式行。
该变量用于标识当前框架。在可显示多个框架的窗口系统下,其默认值显示为 " ";
在同一时间仅显示单个框架的普通终端上,则显示为 "-%F "。
该变量用于标识窗口中正在显示的缓冲区。其默认值显示缓冲区名称, 并使用空格填充至至少 12 列宽度。
该变量用于指示缓冲区中的当前位置。其默认值显示缓冲区百分比, 并可选择显示缓冲区大小、行号与列号。
该选项在 mode-line-position 中使用,其值同时指定要显示的缓冲区百分比
(可为 nil、"%o"、"%p"、"%P" 或 "%q" 之一,
see 模式行中的 %-constucts)以及用于填充或截断的宽度。
建议使用 customize-variable 工具设置该选项。
每个缓冲区均局部生效的变量 vc-mode,用于记录缓冲区访问的文件是否受版本控制,
以及具体的版本控制类型。其值为显示在模式行中的字符串,
无版本控制时为 nil。
该变量用于显示缓冲区的主模式与次要模式。其默认值还会显示递归编辑层级、 进程状态信息以及是否启用了缓冲区收缩。
该变量用于显示当前缓冲区的 default-directory 是否为远程路径。
该变量用于标识 emacsclient 框架。
在 mode-line-format 中,该符号之后的所有内容均会右对齐显示。
该变量精确控制 mode-line-format-right-align 将内容对齐到哪一侧。
以下三个变量在 mode-line-modes 中使用:
该缓冲区局部变量保存当前缓冲区主模式的 “友好” 名称。
每个主模式都应设置此变量,以便模式名称显示在模式行中。
其值不必是字符串,可以使用模式行构造中合法的任意数据类型(see 模式行的数据结构)。
若要计算最终在模式行中显示的模式名称字符串,可使用 format-mode-line
(see 模拟模式行格式化)。
该缓冲区局部变量保存与子进程交互的模式中,用于显示进程状态的模式行信息。
它会紧跟在主模式名称后显示,中间无空格。例如,在 *shell* 缓冲区中,
其值为 (":%s"),可让 Shell 随同主模式一起显示状态,形如:‘(Shell:run)’。
通常该变量的值为 nil。
该变量显示在模式行最前端。默认情况下,此构造直接显示在模式行开头, 但若存在内存耗尽提示信息,则该信息会优先显示。
该变量显示在模式行末尾。
用于显示杂项信息的模式行构造。默认情况下,它显示由 global-mode-string 指定的内容。
当启用 line-number-mode(see Optional Mode Line in The GNU Emacs Manual)时,
用于显示行号的格式串。格式中的 ‘%l’ 会被替换为当前行号。
当启用 column-number-mode(see Optional Mode Line in The GNU Emacs Manual)时,
用于显示列号的格式串。格式中的 ‘%c’ 会被替换为从 0 开始计数的列号,
‘%C’ 会被替换为从 1 开始计数的列号。
当同时启用 line-number-mode 与 column-number-mode 时,
用于显示行号与列号的格式串。格式符 ‘%l’、‘%c’ 与 ‘%C’ 的含义
参见前两个变量的说明。
该变量保存一个关联列表,其元素用于指定模式行如何标识某个次要模式已激活。
minor-mode-alist 中的每个元素应为一个包含两个元素的列表:
(minor-mode-variable mode-line-string)
更一般地,mode-line-string 可以是任意模式行构造。
当 minor-mode-variable 的值非 nil 时,它会显示在模式行中,否则不显示。
这些字符串建议以空格开头,避免与前后内容连在一起。按照惯例,
某个次要模式激活时,其对应的 minor-mode-variable 会被设为非 nil 值。
minor-mode-alist 本身并非缓冲区局部变量。
如果某个次要模式可在各缓冲区独立启用,则列表中对应的变量应设为缓冲区局部生效。
该变量保存一个模式行构造,默认情况下作为 mode-line-misc-info 的一部分显示在模式行中:
若启用了 which-function-mode,则显示在该次要模式信息之后;
否则显示在 mode-line-modes 之后。添加到此构造中的元素通常应以空格结尾
(以保证连续的 global-mode-string 元素正常显示)。
例如,命令 display-time 会将 global-mode-string 设置为引用变量
display-time-string,该变量保存包含时间与系统负载信息的字符串。
‘%M’ 构造会替换为 global-mode-string 的值。
默认模式行并未使用该构造,而是直接在 mode-line-misc-info 中使用此变量本身。
以下是 mode-line-format 默认值的简化版本。
实际默认值还会指定额外的文本属性。
("-"
mode-line-mule-info
mode-line-modified
mode-line-frame-identification
mode-line-buffer-identification
" " mode-line-position (vc-mode vc-mode) " "
mode-line-modes
(which-function-mode ("" which-func-format "--"))
(global-mode-string ("--" global-mode-string))
"-%-")