Emacs启动过程

启动过程总结

emacs启动在lisp源码里的顶级目录中的startup.el文件,如

/usr/share/emacs/26.1/lisp/startup.el

  1. 运行load-path里面每个目录中的subdirs.el文件,递归的把所有把子目录添加到路径中。

  2. 运行load-path中找到的用户创建的leim-list.el文件,Emacs自带的忽略掉。
    这个文件用于注册输入法。

  3. 设置before-init-time变量的时间为current-time目前时间,after-init-timenil

  4. 设置语言环境和终端的编码系统。

  5. 解析命令行参数。

  6. 如果不是以bacth模式运行,Emacs初始化窗口系统,initital-window-system变量被指定。
    这个变量被指定后,就会在term目录下找到匹配的文件来初始化窗口。

  7. 运行before-init-hook

  8. 如果不是以batch模式或daemon模式运行,Emacs会创建一个图形化的Frame。

  9. 初始化Frame的外观。如果需要,设置菜单栏和工具栏。

  10. 通过custom-reevaluate-setting重新初始化custom-delayed-init-variables列表中的变量。
    这些变量都是预先加载的用户选项,默认值取决于运行时,而不是构建时。

  11. 如果启动选项里面没有-Qno-site-file。Emacs会载入存在的site-start。

  12. 如果启动选项里面没有-Q, -q--batch,Emacs会加载用户的init文件,即我们自己写的配置。
    如果-u被指定,Emacs会在用户的home目录寻找init文件

  13. 如果启动选项里面没有-q-Q--batch被指定,或者inhibit-default-init没有被设为nil
    加载存在的default库文件。

  14. 如果启动选项里没有--batchabbrev-file-name指定的abbrev文件存在且可读时,加载该文件。

  15. package-initialize函数激活已经安装的package。但是如果package-enable-at-startup被设为nil,
    或者启动选项里有-q, -Q--batch,Emacs不会激活package,用户必须显示的调用package-initialize(
    --funcall或者写在init文件里。

  16. 设置after-init-time为目前的时间,结合before-init-time算出花了多少时间。

  17. 运行after-init-hook

  18. 设置*scratch buffer的major mode为initial-major-mode的值。

  19. 如果以文本终端启动,且启动选项里没有--batchterm-file-prefix的值不为nil,加载终端指定的库文件。

  20. 如果inhibit-startup-echo-area-messaeg为nil,显示初始化的信息。

  21. 处理前面没有处理的命令行参数。

  22. 如果以--batch启动,emacs在此时退出。

  23. 如果*scratch* Buffer存在且为空,插入substitute-command-keys initial-scratch-message变量中的内容。

  24. 如果initial-choice-buffer是一个字符串,Emacs用这个字符串作为名字打开对应的文件名或者文件目录;
    如果是一个函数,他不带参数的调用该函数,函数的返回值作为一个buffer被选择;
    如果启动选项带有一个文件名,这个文件被打开,然后显示在initial-choice-buffer的旁边;
    如果启动选项带有多个文件名,所有的文件都会被打开,然后*Buffer List* Buffer 显示在
    initial-choice-buffer的旁边。

  25. 运行emacs-startup-hook

  26. 调用frame-notice-user-settings,使在init文件中设置的frame参数生效。
    主要是initial-frame-alistwindow-system-default-frame-alist
    default-frame-alist,优先级递减

  27. 运行window-setup-hook

  28. 显示默认的启动界面,包括版权信息和基本的Emacs用法。如果inhibit-startup-screen
    initial-choice-buffer不为nil,或者启动参数带有-Q--no-splash时不显示。

  29. 如果daemon被要求,调用start-server函数。

  30. 如果通过X会话管理器启动,调用emacs-session-restore

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值