ErgoEmacsEmacsLispBlogEmacsLispBuy Tutorial
Web Hosting by 1&1

39.1.1 Summary: Sequence of Actions at Startup

When Emacs is started up, it performs the following operations (which are defined in startup.el):

  1. It adds subdirectories to load-path, by running the file named subdirs.el in each directory in the list. Normally, this file adds the directory's subdirectories to the list, and those are scanned in their turn. The files subdirs.el are normally generated automatically when Emacs is installed.

  2. It sets the variable before-init-time to the value of current-time (see Time of Day). It also sets after-init-time to nil, which signals to Lisp programs that Emacs is being initialized.

  3. It loads the initialization library for the window system specified by the variable initial-window-system (see initial-window-system). This library's name is term/windowsystem-win.el, where windowsystem is the value of initial-window-system. From that library, it calls the appropriate initialization function. The initialization function for each supported window system is specified by window-system-initialization-alist.
  4. It sets the language environment and the terminal coding system, if requested by environment variables such as LANG.
  5. It processes the initial options. (Some of them are handled even earlier than this.)
  6. It runs the normal hook before-init-hook.
  7. It initializes the window frame and faces, if appropriate, and turns on the menu bar and tool bar, if the initial frame needs them.
  8. It loads the library site-start, if it exists. This is not done if the options ‘-Q’ or ‘--no-site-file’ were specified.
  9. It loads your init file (see Init File). This is not done if the options ‘-q’, ‘-Q’, or ‘--batch’ were specified. If the ‘-u’ option was specified, Emacs looks for the init file in that user's home directory instead.
  10. It loads the library default, if it exists. This is not done if inhibit-default-init is non-nil, nor if the options ‘-q’, ‘-Q’, or ‘--batch’ were specified.
  11. It loads your abbrevs from the file specified by abbrev-file-name, if that file exists and can be read (see abbrev-file-name). This is not done if the option ‘--batch’ was specified.

  12. It sets the variable after-init-time to the value of current-time. This variable was set to nil earlier; setting it to the current time signals that the initialization phase is over, and, together with before-init-time, provides the measurement of how long it took.
  13. It runs the normal hook after-init-hook.
  14. If the buffer ‘*scratch*’ exists and is still in Fundamental mode (as it should be by default), it sets its major mode according to initial-major-mode.
  15. If started on a text-only terminal, it loads the terminal-specific Lisp library, which is specified by the variable term-file-prefix (see Terminal-Specific). This is not done in --batch mode, nor if term-file-prefix is nil.
  16. It displays the initial echo area message, unless you have suppressed that with inhibit-startup-echo-area-message.
  17. It processes the action arguments from the command line.
  18. It now exits if the option --batch was specified.
  19. If initial-buffer-choice is a string, it visits the file with that name. Furthermore, if the ‘*scratch*’ buffer exists and is empty, it inserts initial-scratch-message into that buffer.
  20. It runs emacs-startup-hook and then term-setup-hook.
  21. It calls frame-notice-user-settings, which modifies the parameters of the selected frame according to whatever the init files specify.
  22. It runs window-setup-hook. See Window Systems.
  23. If the option --daemon was specified, it calls server-start and detaches from the controlling terminal. See Emacs Server.
  24. It displays the startup screen, which is a special buffer that contains information about copyleft and basic Emacs usage. This is not done if initial-buffer-choice or inhibit-startup-screen are nil, nor if the ‘--no-splash’ or ‘-Q’ command-line options were specified.
  25. If started by the X session manager, it calls emacs-session-restore passing it as argument the ID of the previous session. See Session Management.
— User Option: inhibit-startup-screen

This variable, if non-nil, inhibits the startup screen. In that case, Emacs typically displays the ‘*scratch*’ buffer; but see initial-buffer-choice, below.

Do not set this variable in the init file of a new user, or in a way that affects more than one user, as that would prevent new users from receiving information about copyleft and basic Emacs usage.

inhibit-startup-message and inhibit-splash-screen are aliases for this variable.

— User Option: initial-buffer-choice

This variable, if non-nil, determines a file or buffer for Emacs to display after starting up, instead of the startup screen. If its value is t, Emacs displays the ‘*scratch*’ buffer. If its value is a string, that specifies the name of a file for Emacs to visit.

— User Option: inhibit-startup-echo-area-message

This variable controls the display of the startup echo area message. You can suppress the startup echo area message by adding text with this form to your init file:

          (setq inhibit-startup-echo-area-message
                "your-login-name")

Emacs explicitly checks for an expression as shown above in your init file; your login name must appear in the expression as a Lisp string constant. Other methods of setting inhibit-startup-echo-area-message to the same value do not inhibit the startup message. This way, you can easily inhibit the message for yourself if you wish, but thoughtless copying of your init file will not inhibit the message for someone else.

— User Option: initial-scratch-message

This variable, if non-nil, should be a string, which is inserted into the ‘*scratch*’ buffer when Emacs starts up. If it is nil, the ‘*scratch*’ buffer is empty.

blog comments powered by Disqus