43.1.4 命令行参数

你可以在启动 Emacs 时使用命令行参数执行各类操作。 注意,推荐的 Emacs 使用方式是登录后仅启动一次, 并在同一个 Emacs 会话中完成所有编辑操作(see Entering Emacs in The GNU Emacs Manual)。 因此你可能不常使用命令行参数;但在从会话脚本调用 Emacs 或调试 Emacs 时, 命令行参数依然很实用。本节介绍 Emacs 处理命令行参数的方式。

Function: command-line

该函数解析 Emacs 启动时传入的命令行,处理参数, 并(除此之外)加载用户初始化文件、显示启动信息。

Variable: command-line-processed

一旦命令行处理完成,该变量的值即为 t

如果你通过调用 dump-emacs 重新转储 Emacs(see 构建 Emacs), 建议先将该变量设置为 nil,使新转储的 Emacs 处理新的命令行参数。

Variable: command-switch-alist

该变量是一个关联列表,存储用户自定义的命令行选项及其关联的处理函数。 默认情况下该列表为空,你可以根据需要添加元素。

命令行选项(command-line option) 是命令行中的参数,格式如下:

-option

command-switch-alist 的元素格式如下:

(option . handler-function)

其中 CAR 部分 option 是字符串,表示命令行选项名称(包含开头的连字符)。 handler-function 用于处理 option,并接收选项名称作为唯一参数。

某些情况下,命令行中选项后会跟随一个参数。 此时 handler-function 可以通过变量 command-line-args-left 获取所有剩余的命令行参数(见下文)。 (完整的命令行参数列表存储在 command-line-args 中。)

注意,command-switch-alist 不会特殊处理 option 中的等号。 也就是说,如果命令行中有类似 --name=value 的选项, 只有 command-switch-alistcar 为字面量 --name=value 的成员才能匹配该选项。如果你需要解析此类选项, 应改用 command-line-functions(见下文)。

命令行参数由 startup.el 文件中的 command-line-1 函数解析。 另请参考 Command Line Arguments for Emacs Invocation in The GNU Emacs Manual

Variable: command-line-args

该变量的值是传递给 Emacs 的命令行参数列表。

Variable: command-line-args-left

该变量的值是尚未处理的命令行参数列表。

Variable: command-line-functions

该变量的值是一组用于处理未识别命令行参数的函数。 每当下一个待处理参数无特殊含义时,会按顺序调用列表中的函数, 直到其中一个函数返回非 nil 值。

这些函数无参数调用。它们可以通过临时绑定的变量 argi 访问当前待处理的命令行参数。剩余参数(不包含当前参数) 存储在变量 command-line-args-left 中。

当函数识别并处理了 argi 中的参数时, 应返回非 nil 值表示已处理该参数。 如果函数同时处理了后续的若干参数,可以通过从 command-line-args-left 中删除这些参数来标记。

如果所有函数都返回 nil,则该参数会被视为要打开的文件名。