Spec-Zone.ru › Elisp

Краткое описание: последовательность действий при запуске

При запуске Emacs выполняет следующие операции (см. normal-top-level в startup.el):

  1. Он добавляет подкаталоги в load-path, запуская файл с именем subdirs.el в каждом каталоге из списка. Обычно этот файл добавляет подкаталоги каталога в список, и затем выполняется их просмотр. Файлы subdirs.el обычно генерируются автоматически при установке Emacs.
  2. Он загружает все найденные файлы leim-list.el в каталогах load-path. Этот файл предназначен для регистрации методов ввода. Выполняется поиск только личных файлов leim-list.el, которые вы могли создать; каталоги со стандартными библиотеками Emacs пропускаются (в них должен находиться только один файл leim-list.el, скомпилированный в исполняемый файл Emacs).
  3. Он устанавливает переменную before-init-time в значение current-time (см. Время суток). Он также устанавливает after-init-time в nil, сигнализируя программам на Lisp о том, что Emacs инициализируется.
  4. Он устанавливает языковое окружение и кодировку терминала, если это указано переменными окружения, такими как LANG.
  5. Он выполняет базовый разбор аргументов командной строки.
  6. Он загружает библиотеку site-start, если она существует. Этого не происходит, если указаны параметры ‘-Q’ или ‘--no-site-file’.
  7. Он загружает ваш файл ранней инициализации (см. Файл ранней инициализации в Руководстве по GNU Emacs). Этого не происходит, если указаны параметры ‘-q’, ‘-Q’ или ‘--batch’. Если указан параметр ‘-u’, Emacs ищет файл инициализации в домашнем каталоге этого пользователя.
  8. Он вызывает функцию package-activate-all для активации всех установленных дополнительных пакетов Emacs Lisp. См. Основы создания пакетов. Однако Emacs не активирует пакеты, если package-enable-at-startup имеет значение nil или если он запущен с одним из параметров ‘-q’, ‘-Q’ или ‘--batch’. Чтобы активировать пакеты в последнем случае, следует явно вызвать package-activate-all (например, с помощью параметра ‘--funcall’).
  9. Если Emacs запущен не в пакетном режиме, он инициализирует оконную систему, указанную переменной initial-window-system (см. initial-window-system). Функция инициализации window-system-initialization — это обобщённая функция (см. Обобщённые функции), фактическая реализация которой различается для каждой поддерживаемой оконной системы. Если значением initial-window-system является windowsystem, соответствующая реализация функции инициализации определяется в файле term/windowsystem-win.el. Этот файл должен быть скомпилирован в исполняемый файл Emacs при его сборке.
  10. Он запускает обычный хук before-init-hook.
  11. При необходимости он создаёт графический фрейм. В рамках создания графического фрейма он инициализирует оконную систему, указанную переменными initial-frame-alist и default-frame-alist (см. Начальные параметры фрейма) для графического фрейма, вызывая функцию window-system-initialization этой оконной системы. Этого не происходит в пакетном (неинтерактивном) режиме или в режиме демона.
  12. Он инициализирует начальные фейсы фрейма и при необходимости настраивает строку меню и панель инструментов. Если поддерживаются графические фреймы, он настраивает панель инструментов, даже если текущий фрейм не является графическим, поскольку позднее может быть создан графический фрейм.
  13. Он использует custom-reevaluate-setting для повторной инициализации элементов списка custom-delayed-init-variables. Это любые предварительно загруженные пользовательские параметры, значение по умолчанию которых зависит от контекста во время выполнения, а не во время сборки. См. custom-initialize-delay.
  14. Он загружает ваш файл инициализации (см. Файл инициализации). Этого не происходит, если указаны параметры ‘-q’, ‘-Q’ или ‘--batch’. Если указан параметр ‘-u’, Emacs ищет файл инициализации в домашнем каталоге этого пользователя.
  15. Он загружает библиотеку default, если она существует. Этого не происходит, если inhibit-default-init имеет значение, отличное от nil, или если указаны параметры ‘-q’, ‘-Q’ или ‘--batch’.
  16. Он загружает ваши сокращения из файла, указанного в abbrev-file-name, если этот файл существует и доступен для чтения (см. abbrev-file-name). Этого не происходит, если указан параметр ‘--batch’.
  17. Он устанавливает переменную after-init-time в значение current-time. Ранее эта переменная была установлена в nil; установка её в текущее время сигнализирует об окончании фазы инициализации и вместе с before-init-time позволяет измерить, сколько времени она заняла.
  18. Он запускает обычные хуки after-init-hook и delayed-warnings-hook. Последний отображает предупреждения, выданные на предыдущих этапах запуска и автоматически отложенные.
  19. Если буфер *scratch* существует и всё ещё находится в режиме Fundamental (как и должно быть по умолчанию), он устанавливает его основной режим в соответствии с initial-major-mode.
  20. Если Emacs запущен в текстовом терминале, он загружает специфичную для терминала библиотеку Lisp (см. Инициализация для конкретного терминала) и запускает хук tty-setup-hook. Этого не происходит в режиме --batch или если term-file-prefix имеет значение nil.
  21. Он отображает начальное сообщение в области эха, если вы не отключили его с помощью inhibit-startup-echo-area-message.
  22. Он обрабатывает все параметры командной строки, которые не были обработаны ранее.
  23. Теперь он завершает работу, если был указан параметр --batch.
  24. Если буфер *scratch* существует и пуст, он вставляет в этот буфер (substitute-command-keys initial-scratch-message).
  25. Если initial-buffer-choice — строка, Emacs открывает файл (или каталог) с этим именем. Если это функция, он вызывает её без аргументов и выбирает возвращённый ею буфер. Если в качестве аргумента командной строки указан один файл, этот файл открывается, а его буфер отображается рядом с initial-buffer-choice. Если указано несколько файлов, открываются все файлы, а рядом с initial-buffer-choice отображается буфер *Buffer List*.
  26. Он запускает emacs-startup-hook.
  27. Он вызывает frame-notice-user-settings, которая изменяет параметры выбранного фрейма в соответствии с настройками файлов инициализации.
  28. Он запускает window-setup-hook. Единственное отличие этого хука от emacs-startup-hook заключается в том, что он выполняется после упомянутого выше изменения параметров фрейма.
  29. Он отображает начальный экран — специальный буфер со сведениями о копилефте и основах работы с Emacs. Этого не происходит, если inhibit-startup-screen или initial-buffer-choice имеют значения, отличные от nil, или если указаны параметры командной строки ‘--no-splash’ или ‘-Q’.
  30. Если запрошен запуск демона, он вызывает server-start. (В системах POSIX, если запрошен фоновый демон, после этого он отсоединяется от управляющего терминала.) См. Сервер Emacs в Руководстве по GNU Emacs.
  31. Если Emacs запущен диспетчером сеансов X, он вызывает emacs-session-restore, передавая ему в качестве аргумента идентификатор предыдущего сеанса. См. Управление сеансами.

Следующие параметры влияют на некоторые аспекты последовательности запуска.

Пользовательский параметр: inhibit-startup-screen

Если значение этой переменной отлично от nil, начальный экран не отображается. В этом случае Emacs обычно отображает буфер *scratch*; однако см. initial-buffer-choice ниже.

Не устанавливайте эту переменную в файле инициализации нового пользователя и не задавайте её значение таким образом, чтобы оно затрагивало более одного пользователя: иначе новые пользователи не получат сведения о копилефте и основах работы с Emacs.

inhibit-startup-message и inhibit-splash-screen — псевдонимы этой переменной.

Пользовательский параметр: initial-buffer-choice

Если значение этой переменной отлично от nil, переменная содержит строку, задающую файл или каталог, который Emacs должен отобразить после запуска вместо начального экрана. Если её значение — функция, Emacs вызывает эту функцию, которая должна вернуть буфер для отображения. Если её значение — t, Emacs отображает буфер *scratch*.

Пользовательский параметр: inhibit-startup-echo-area-message

Эта переменная управляет отображением начального сообщения в области эха. Чтобы отключить это сообщение, добавьте в файл инициализации текст следующего вида:

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

Emacs явно проверяет наличие в файле инициализации выражения, показанного выше; в выражении ваше имя пользователя должно присутствовать в виде строковой константы Lisp. Вы также можете воспользоваться интерфейсом Customize. Другие способы присвоить inhibit-startup-echo-area-message то же значение не отключают начальное сообщение. Благодаря этому вы можете легко отключить сообщение для себя, если захотите, но необдуманное копирование вашего файла инициализации не отключит сообщение для кого-либо ещё.

Пользовательский параметр: initial-scratch-message

Если значение этой переменной отлично от nil, оно должно быть строкой, которая рассматривается как документация для вставки в буфер *scratch* при запуске Emacs или при повторном создании этого буфера. Если значение — nil, буфер *scratch* остаётся пустым.

Следующие параметры командной строки влияют на некоторые аспекты последовательности запуска. См. Начальные параметры в Руководстве по GNU Emacs.

--no-splash

Не отображать заставку.

--batch

Запустить Emacs без интерактивного терминала. См. Пакетный режим.

--daemon
--bg-daemon
--fg-daemon

Не инициализировать дисплей; только запустить сервер. («Фоновый» демон автоматически запускается в фоновом режиме.)

--no-init-file
-q

Не загружать ни файл инициализации, ни библиотеку default.

--no-site-file

Не загружать библиотеку site-start.

--quick
-Q

Эквивалентно ‘-q --no-site-file --no-splash’.

--init-directory

Указать каталог для поиска файлов инициализации Emacs.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Startup-Summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API