Emacs 启动时会执行以下操作(参见 startup.el 中的 normal-top-level):
load-path。
通常该文件会将目录的子目录加入列表,并依次扫描。subdirs.el 一般在安装 Emacs 时自动生成。
load-path 目录中找到的所有 leim-list.el。该文件用于注册输入法。
搜索仅针对你可能创建的个人 leim-list.el,会跳过包含标准 Emacs 库的目录
(这些目录应仅有一个已编译进 Emacs 可执行文件的 leim-list.el)。
before-init-time 设置为 current-time 的值(see 时刻)。
同时将 after-init-time 设为 nil,向 Lisp 程序表明 Emacs 正在初始化。
LANG 等环境变量的设置,配置语言环境与终端编码系统。
package-activate-all,激活已安装的所有可选 Emacs Lisp 包。see 软件包基础。
但当 package-enable-at-startup 为 nil,或启动时带有 ‘-q’、‘-Q’、‘--batch’
选项时,Emacs 不会自动激活包。在后一种情况下,需要显式调用 package-activate-all
(例如通过 ‘--funcall’ 选项)。
initial-window-system 指定的窗口系统(see initial-window-system)。
初始化函数 window-system-initialization 是一个 泛型函数(generic function)(see 泛型函数),
对每种支持的窗口系统有不同实现。若 initial-window-system 的值为 windowsystem,
则对应初始化函数的实现位于文件 term/windowsystem-win.el。
该文件在构建 Emacs 时应已编译进可执行文件。
before-init-hook。
window-system-initialization 函数,
按照 initial-frame-alist 与 default-frame-alist(see 初始框架参数)
初始化该图形化框架。批处理(非交互)或守护进程模式下不执行此步骤。
custom-reevaluate-setting 重新初始化列表 custom-delayed-init-variables 中的成员。
这些是预加载的用户选项,其默认值依赖运行时环境而非构建时环境。
See custom-initialize-delay.
inhibit-default-init 非 nil,
或指定了 ‘-q’、‘-Q’、‘--batch’ 选项时不执行。
abbrev-file-name 指定的文件中加载缩写,若该文件存在且可读(see abbrev-file-name)。
指定 ‘--batch’ 选项时不执行。
after-init-time 设置为 current-time 的值。
该变量此前设为 nil,设置为当前时间表示初始化阶段结束,
并与 before-init-time 一同用于计算启动耗时。
after-init-hook 与 delayed-warnings-hook。
后者用于显示启动前期阶段被自动延迟的警告信息。
initial-major-mode 设置其主模式。
tty-setup-hook。--batch 模式或 term-file-prefix 为 nil 时不执行。
inhibit-startup-echo-area-message 禁用,否则显示初始回显区消息。
--batch 选项,在此处退出。
(substitute-command-keys initial-scratch-message)。
initial-buffer-choice 为字符串,则打开对应名称的文件(或目录)。
若为函数,则无参调用该函数并选中其返回的缓冲区。
若命令行参数指定了一个文件,则打开该文件并与 initial-buffer-choice 并列显示。
若指定多个文件,则全部打开并将 *Buffer List* 与 initial-buffer-choice 并列显示。
emacs-startup-hook。
frame-notice-user-settings,根据初始化文件中的设置修改当前选中框架的参数。
window-setup-hook。该钩子与 emacs-startup-hook 的唯一区别是,
它在框架参数修改完成后运行。
inhibit-startup-screen 或 initial-buffer-choice 非 nil,
或指定了 ‘--no-splash’、‘-Q’ 命令行选项,则不显示。
server-start。
(在 POSIX 系统上,若请求后台守护进程,会与控制终端分离。)See Emacs Server in The GNU Emacs Manual。
emacs-session-restore 并传入上一会话 ID 作为参数。See Session 会话管理。
以下选项会影响启动流程的部分行为。
若该变量非 nil,则禁用启动屏幕。此时 Emacs 通常显示 *scratch* 缓冲区,
具体可参见下方的 initial-buffer-choice。
请勿在新用户的初始化文件中设置该变量,或以影响多用户的方式设置, 否则会导致新用户无法查看版权声明与 Emacs 基础使用信息。
inhibit-startup-message 与 inhibit-splash-screen 是该变量的别名。
若非 nil,该变量为字符串,指定 Emacs 启动后显示的文件或目录,替代启动屏幕。
若值为函数,Emacs 调用该函数并显示其返回的缓冲区。
若值为 t,Emacs 显示 *scratch* 缓冲区。
该变量控制启动时回显区消息的显示。可在初始化文件中添加如下代码禁用该消息:
(setq inhibit-startup-echo-area-message
"your-login-name")
Emacs 会在你的初始化文件中显式检查上述形式的表达式;登录名必须以 Lisp 字符串常量形式出现。
你也可以使用自定义界面。其他设置 inhibit-startup-echo-area-message 为相同值的方式
不会禁用启动消息。这样你可以按需为自己禁用消息,而他人随意复制你的配置文件不会生效。
若该变量非 nil,应为字符串,作为说明文本在 Emacs 启动或 *scratch* 缓冲区重建时插入。
若为 nil,*scratch* 缓冲区为空。
以下命令行选项会影响启动流程的部分行为。See Initial Options in The GNU Emacs Manual。
--no-splash不显示启动屏幕。
--batch无交互终端运行。See 批处理模式。
--daemon--bg-daemon--fg-daemon不初始化任何显示,仅启动服务器。 (“后台(background)” 守护进程会自动在后台运行。)
--no-init-file-q不加载初始化文件与 default 库。
--no-site-file不加载 site-start 库。
Do not initialize any display; just start a server. (A “background” daemon automatically runs in the background.)
--quick-Q等价于 ‘-q --no-site-file --no-splash’。
--init-directory指定 Emacs 查找初始化文件的目录。