- 解释执行subdirs.el (emacs安装时自动生成),将list里的内容添加到load-path中
- 解释执行lemi-list.el(load-path中找到)主要是注册输入法
- 设置before-init-time为current-time, 设置after-init-time为nil表示正在初始化emacs
- 根据环境变量LANG等设置语言环境和终端编码
- 解析命令行参数
- 如果没有指定–batch的话,初始化窗口系统用于后面创建frame; 由initial-window-system指定所用的系统,初始化的函数则由window-system-initialization-alist指定
- 运行钩子before-init-hook
- 如果没有指定–batch或–daemon命令选项,创建frame
- 执行一些frame相关的设置
- 使用custom-reevaluate-setting重新初始化custom-delayed-init-variables的所有成员
- 如果没有指定-Q或–no-site-file命令选项就加载site-start库文件
- 加载init file, 如果指定-q或-Q或–batch选项则跳过
- 加载default.el库文件, inhibit-default-init非空,或者指定了-q或-Q或–batch则跳过
- 加载abbrev-file-name指定的文件, 如果指定–batch选项则跳过
- 如果package-enable-at-startup为真,调用package-initialize激活lisp packages
- 设置after-init-time为current-time,表示emacs初始化完成; after-init-time与before-init-time之间的差即为emacs初始化消耗的时间
- 执行钩子after-init-hook
- 根据initial-major-mode的值设置*scratch*的主模式
- 如果是文本终端则加载终端相关的库文件,然后执行钩子tty-setup-hook, 如果指定–batch或term-file-prefix为空则跳过
- 如果没有设置inhibit-startup-echo-area-message,则显示回显区域初始信息
- 处理之前没有处理完的命令行相关的选项
- 如果指定–batch选项则退出emacs
- 执行initial-buffer-choice,如果*scratch*内容为空,则插入initial-scratch-message
- 执行钩子emacs-startup-hook
- 调用frame-notice-user-settings修改选定frame的参数
- 执行钩子window-setup-hook
- 显示启动界面,可以通过设置inhibit-startup-screen为真,或initial-buffer-choice为真或–no-splash或-Q选项跳过
- 如果指定–daemon选项,调用server-start并脱离控制终端
- 如果在x视窗下启动emacs,以之前的seesion id作为参数调用emacs-session-restore
原文地址:
https://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html