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. Он загружает ваш начальный файл инициализации (см. Ранний файл инициализации в Справочнике GNU Emacs). Это не делается, если были указаны опции ‘-q’, ‘-Q’ или ‘--batch’. Если была указана опция ‘-u’, Emacs ищет файл инициализации в домашнем каталоге этого пользователя.
  7. Он вызывает функцию package-activate-all для активации любых необязательных пакетов Emacs Lisp, которые были установлены. См. Основы упаковки. Однако Emacs не активирует пакеты, когда package-enable-at-startup равно nil, или когда он запускается с одной из опций ‘-q’, ‘-Q’ или ‘--batch’. Чтобы активировать пакеты в последнем случае, package-activate-all должен быть вызван явно (например, с помощью опции ‘--funcall’).
  8. Если запуск не происходит в пакетном режиме, он инициализирует систему окон, указанную переменной initial-window-system (см. initial-window-system). Функция инициализации, window-system-initialization, — это общая функция (см. Общие функции), чья фактическая реализация отличается для каждой поддерживаемой системы окон. Если значение initial-window-system равно windowsystem, соответствующая реализация функции инициализации определена в файле term/windowsystem-win.el. Этот файл должен был быть скомпилирован в исполняемый файл Emacs при его создании.
  9. Он выполняет обычный хук before-init-hook.
  10. При необходимости он создаёт графическую рамку. В ходе создания графической рамки он инициализирует систему окон, указанную initial-frame-alist и default-frame-alist (см. Начальные параметры) для графической рамки, вызывая функцию window-system-initialization для этой системы окон. Это не делается в пакетном (неинтерактивном) или демоне-режиме.
  11. Он инициализирует стили начальной рамки и настраивает строку меню и панель инструментов, если необходимо. Если поддерживаются графические рамки, он настраивает панель инструментов даже если текущая рамка не является графической, поскольку графическая рамка может быть создана позже.
  12. Он использует custom-reevaluate-setting для повторной инициализации элементов списка custom-delayed-init-variables. Это любые предварительно загруженные пользовательские опции, значение по умолчанию которых зависит от контекста выполнения, а не от контекста сборки. См. custom-initialize-delay.
  13. Он загружает библиотеку site-start, если она существует. Это не делается, если были указаны опции ‘-Q’ или ‘--no-site-file’.
  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.
  19. Если буфер *scratch* существует и всё ещё находится в режиме Fundamental (как и должно быть по умолчанию), он устанавливает его основной режим в соответствии с initial-major-mode.
  20. Если запуск осуществляется на текстовом терминале, он загружает терминальную библиотеку 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 является строкой, он посещает файл (или каталог) с этим именем. Если это функция, он вызывает функцию без аргументов и выбирает буфер, который она возвращает. Если один файл задан как аргумент командной строки, этот файл посещается, и его буфер отображается рядом с initial-buffer-choice. Если задано более одного файла, все файлы посещаются, а буфер *Buffer List* отображается рядом с initial-buffer-choice.
  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. Если запуск был произведён менеджером сеанса 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-строки. Вы также можете использовать интерфейс настраивания. Другие методы установки inhibit-startup-echo-area-message на то же значение не подавляют стартовое сообщение. Таким образом, вы можете легко подавить сообщение для себя, но небрежное копирование вашего файла инициализации не подавит сообщение для других.

Пользовательская опция: initial-scratch-message

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

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

--no-splash

Не отображать экран запуска.

--batch

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

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

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

--no-init-file
-q

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

--no-site-file

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

--quick
-Q

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

Copyright © 1990-1996, 1998-2022 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