elisp: Startup Summary

 
 38.1.1 Summary: Sequence of Actions at Startup
 ----------------------------------------------
 
 When Emacs is started up, it performs the following operations (see
 ‘normal-top-level’ 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 loads any ‘leim-list.el’ that it finds in the ‘load-path’
      directories.  This file is intended for registering input methods.
      The search is only for any personal ‘leim-list.el’ files that you
      may have created; it skips the directories containing the standard
      Emacs libraries (these should contain only a single ‘leim-list.el’
      file, which is compiled into the Emacs executable).
 
   3. It sets the variable ‘before-init-time’ to the value of
      ‘current-time’ (SeeTime of Day).  It also sets
      ‘after-init-time’ to ‘nil’, which signals to Lisp programs that
      Emacs is being initialized.
 
   4. It sets the language environment and the terminal coding system, if
      requested by environment variables such as ‘LANG’.
 
   5. It does some basic parsing of the command-line arguments.
 
   6. If not running in batch mode, it initializes the window system that
      the variable ‘initial-window-system’ specifies (See
      initial-window-system Window Systems.).  The initialization
      function for each supported window system is specified by
      ‘window-system-initialization-alist’.  If the value of
      ‘initial-window-system’ is WINDOWSYSTEM, then the appropriate
      initialization function is defined in the file
      ‘term/WINDOWSYSTEM-win.el’.  This file should have been compiled
      into the Emacs executable when it was built.
 
   7. It runs the normal hook ‘before-init-hook’.
 
   8. If appropriate, it creates a graphical frame.  This is not done if
      the options ‘--batch’ or ‘--daemon’ were specified.
 
   9. It initializes the initial frame’s faces, and sets up the menu bar
      and tool bar if needed.  If graphical frames are supported, it sets
      up the tool bar even if the current frame is not a graphical one,
      since a graphical frame may be created later on.
 
   10. It use ‘custom-reevaluate-setting’ to re-initialize the members of
      the list ‘custom-delayed-init-variables’.  These are any pre-loaded
      user options whose default value depends on the run-time, rather
      than build-time, context.  Seecustom-initialize-delay Building
      Emacs.
 
   11. It loads the library ‘site-start’, if it exists.  This is not done
      if the options ‘-Q’ or ‘--no-site-file’ were specified.
 
   12. It loads your init file (SeeInit 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.
 
   13. 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.
 
   14. It loads your abbrevs from the file specified by
      ‘abbrev-file-name’, if that file exists and can be read (See
      abbrev-file-name Abbrev Files.).  This is not done if the option
      ‘--batch’ was specified.
 
   15. It calls the function ‘package-initialize’ to activate any
      optional Emacs Lisp package that has been installed.  See
      Packaging Basics.  However, Emacs doesn’t initialize packages
      when ‘package-enable-at-startup’ is ‘nil’ or when it’s started with
      one of the options ‘-q’, ‘-Q’, or ‘--batch’.  To initialize
      packages in the latter case, ‘package-initialize’ should be called
      explicitly (e.g., via the ‘--funcall’ option).
 
   16. 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.
 
   17. It runs the normal hook ‘after-init-hook’.
 
   18. 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’.
 
   19. If started on a text terminal, it loads the terminal-specific Lisp
      library (SeeTerminal-Specific), and runs the hook
      ‘tty-setup-hook’.  This is not done in ‘--batch’ mode, nor if
      ‘term-file-prefix’ is ‘nil’.
 
   20. It displays the initial echo area message, unless you have
      suppressed that with ‘inhibit-startup-echo-area-message’.
 
   21. It processes any command-line options that were not handled
      earlier.
 
   22. It now exits if the option ‘--batch’ was specified.
 
   23. If the ‘*scratch*’ buffer exists and is empty, it inserts
      ‘(substitute-command-keys initial-scratch-message)’ into that
      buffer.
 
   24. If ‘initial-buffer-choice’ is a string, it visits the file (or
      directory) with that name.  If it is a function, it calls the
      function with no arguments and selects the buffer that it returns.
      If one file is given as a command line argument, that file is
      visited and its buffer displayed alongside ‘initial-buffer-choice’.
      If more than one file is given, all of the files are visited and
      the ‘*Buffer List*’ buffer is displayed alongside
      ‘initial-buffer-choice’.
 
   25. It runs ‘emacs-startup-hook’.
 
   26. It calls ‘frame-notice-user-settings’, which modifies the
      parameters of the selected frame according to whatever the init
      files specify.
 
   27. It runs ‘window-setup-hook’.  The only difference between this
      hook and ‘emacs-startup-hook’ is that this one runs after the
      previously mentioned modifications to the frame parameters.
 
   28. It displays the “startup screen”, which is a special buffer that
      contains information about copyleft and basic Emacs usage.  This is
      not done if ‘inhibit-startup-screen’ or ‘initial-buffer-choice’ are
      non-‘nil’, or if the ‘--no-splash’ or ‘-Q’ command-line options
      were specified.
 
   29. If the option ‘--daemon’ was specified, it calls ‘server-start’,
      and on Posix systems also detaches from the controlling terminal.
      See(emacs)Emacs Server.
 
   30. If started by the X session manager, it calls
      ‘emacs-session-restore’ passing it as argument the ID of the
      previous session.  SeeSession Management.
 
 The following options affect some aspects of the startup sequence.
 
  -- 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
      If non-‘nil’, this variable is a string that specifies a file or
      directory for Emacs to display after starting up, instead of the
      startup screen.  If its value is a function, Emacs calls that
      function which must return a buffer which is then displayed.  If
      its value is ‘t’, Emacs displays the ‘*scratch*’ buffer.
 
  -- 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.  You can also use the Customize interface.  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 treated
      as documentation to be inserted into the ‘*scratch*’ buffer when
      Emacs starts up.  If it is ‘nil’, the ‘*scratch*’ buffer is empty.
 
 The following command-line options affect some aspects of the startup
 sequence.  See(emacs)Initial Options.
 
 ‘--no-splash’
      Do not display a splash screen.
 
 ‘--batch’
      Run without an interactive terminal.  SeeBatch Mode.
 
 ‘--daemon’
      Do not initialize any display; just start a server in the
      background.
 
 ‘--no-init-file’
 ‘-q’
      Do not load either the init file, or the ‘default’ library.
 
 ‘--no-site-file’
      Do not load the ‘site-start’ library.
 
 ‘--quick’
 ‘-Q’
      Equivalent to ‘-q --no-site-file --no-splash’.