Краткое описание: последовательность действий при запуске
При запуске Emacs выполняет следующие операции (см. normal-top-level в startup.el):
- Он добавляет подкаталоги в
load-path, запуская файл с именем subdirs.el в каждом каталоге из списка. Обычно этот файл добавляет подкаталоги каталога в список, и затем выполняется их просмотр. Файлы subdirs.el обычно генерируются автоматически при установке Emacs. - Он загружает все найденные файлы leim-list.el в каталогах
load-path. Этот файл предназначен для регистрации методов ввода. Выполняется поиск только личных файлов leim-list.el, которые вы могли создать; каталоги со стандартными библиотеками Emacs пропускаются (в них должен находиться только один файл leim-list.el, скомпилированный в исполняемый файл Emacs). - Он устанавливает переменную
before-init-timeв значениеcurrent-time(см. Время суток). Он также устанавливаетafter-init-timeвnil, сигнализируя программам на Lisp о том, что Emacs инициализируется. - Он устанавливает языковое окружение и кодировку терминала, если это указано переменными окружения, такими как
LANG. - Он выполняет базовый разбор аргументов командной строки.
- Он загружает библиотеку site-start, если она существует. Этого не происходит, если указаны параметры ‘-Q’ или ‘--no-site-file’.
- Он загружает ваш файл ранней инициализации (см. Файл ранней инициализации в Руководстве по GNU Emacs). Этого не происходит, если указаны параметры ‘-q’, ‘-Q’ или ‘--batch’. Если указан параметр ‘-u’, Emacs ищет файл инициализации в домашнем каталоге этого пользователя.
- Он вызывает функцию
package-activate-allдля активации всех установленных дополнительных пакетов Emacs Lisp. См. Основы создания пакетов. Однако Emacs не активирует пакеты, еслиpackage-enable-at-startupимеет значениеnilили если он запущен с одним из параметров ‘-q’, ‘-Q’ или ‘--batch’. Чтобы активировать пакеты в последнем случае, следует явно вызватьpackage-activate-all(например, с помощью параметра ‘--funcall’). - Если Emacs запущен не в пакетном режиме, он инициализирует оконную систему, указанную переменной
initial-window-system(см. initial-window-system). Функция инициализацииwindow-system-initialization— это обобщённая функция (см. Обобщённые функции), фактическая реализация которой различается для каждой поддерживаемой оконной системы. Если значениемinitial-window-systemявляется windowsystem, соответствующая реализация функции инициализации определяется в файле term/windowsystem-win.el. Этот файл должен быть скомпилирован в исполняемый файл Emacs при его сборке. - Он запускает обычный хук
before-init-hook. - При необходимости он создаёт графический фрейм. В рамках создания графического фрейма он инициализирует оконную систему, указанную переменными
initial-frame-alistиdefault-frame-alist(см. Начальные параметры фрейма) для графического фрейма, вызывая функциюwindow-system-initializationэтой оконной системы. Этого не происходит в пакетном (неинтерактивном) режиме или в режиме демона. - Он инициализирует начальные фейсы фрейма и при необходимости настраивает строку меню и панель инструментов. Если поддерживаются графические фреймы, он настраивает панель инструментов, даже если текущий фрейм не является графическим, поскольку позднее может быть создан графический фрейм.
- Он использует
custom-reevaluate-settingдля повторной инициализации элементов спискаcustom-delayed-init-variables. Это любые предварительно загруженные пользовательские параметры, значение по умолчанию которых зависит от контекста во время выполнения, а не во время сборки. См. custom-initialize-delay. - Он загружает ваш файл инициализации (см. Файл инициализации). Этого не происходит, если указаны параметры ‘-q’, ‘-Q’ или ‘--batch’. Если указан параметр ‘-u’, Emacs ищет файл инициализации в домашнем каталоге этого пользователя.
- Он загружает библиотеку default, если она существует. Этого не происходит, если
inhibit-default-initимеет значение, отличное отnil, или если указаны параметры ‘-q’, ‘-Q’ или ‘--batch’. - Он загружает ваши сокращения из файла, указанного в
abbrev-file-name, если этот файл существует и доступен для чтения (см. abbrev-file-name). Этого не происходит, если указан параметр ‘--batch’. - Он устанавливает переменную
after-init-timeв значениеcurrent-time. Ранее эта переменная была установлена вnil; установка её в текущее время сигнализирует об окончании фазы инициализации и вместе сbefore-init-timeпозволяет измерить, сколько времени она заняла. - Он запускает обычные хуки
after-init-hookиdelayed-warnings-hook. Последний отображает предупреждения, выданные на предыдущих этапах запуска и автоматически отложенные. - Если буфер *scratch* существует и всё ещё находится в режиме Fundamental (как и должно быть по умолчанию), он устанавливает его основной режим в соответствии с
initial-major-mode. - Если Emacs запущен в текстовом терминале, он загружает специфичную для терминала библиотеку Lisp (см. Инициализация для конкретного терминала) и запускает хук
tty-setup-hook. Этого не происходит в режиме--batchили еслиterm-file-prefixимеет значениеnil. - Он отображает начальное сообщение в области эха, если вы не отключили его с помощью
inhibit-startup-echo-area-message. - Он обрабатывает все параметры командной строки, которые не были обработаны ранее.
- Теперь он завершает работу, если был указан параметр
--batch. - Если буфер *scratch* существует и пуст, он вставляет в этот буфер
(substitute-command-keys initial-scratch-message). - Если
initial-buffer-choice— строка, Emacs открывает файл (или каталог) с этим именем. Если это функция, он вызывает её без аргументов и выбирает возвращённый ею буфер. Если в качестве аргумента командной строки указан один файл, этот файл открывается, а его буфер отображается рядом сinitial-buffer-choice. Если указано несколько файлов, открываются все файлы, а рядом сinitial-buffer-choiceотображается буфер *Buffer List*. - Он запускает
emacs-startup-hook. - Он вызывает
frame-notice-user-settings, которая изменяет параметры выбранного фрейма в соответствии с настройками файлов инициализации. - Он запускает
window-setup-hook. Единственное отличие этого хука отemacs-startup-hookзаключается в том, что он выполняется после упомянутого выше изменения параметров фрейма. - Он отображает начальный экран — специальный буфер со сведениями о копилефте и основах работы с Emacs. Этого не происходит, если
inhibit-startup-screenилиinitial-buffer-choiceимеют значения, отличные отnil, или если указаны параметры командной строки ‘--no-splash’ или ‘-Q’. - Если запрошен запуск демона, он вызывает
server-start. (В системах POSIX, если запрошен фоновый демон, после этого он отсоединяется от управляющего терминала.) См. Сервер Emacs в Руководстве по GNU Emacs. - Если 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