Spec-Zone.ru › Elisp

Создание Emacs

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

Для сборки Emacs требуется GNU Make версии 3.81 или новее.

Компиляция файлов исходного кода C в каталоге src создаёт исполняемый файл под названием temacs, также называемый неполным нечистым Emacs. Он содержит интерпретатор Emacs Lisp и функции ввода-вывода, но не команды редактирования.

Команда temacs -l loadup запустит temacs и загрузит loadup.el. Библиотека loadup загружает дополнительные библиотеки Lisp, которые настраивают обычную среду редактирования Emacs. После этого этапа исполняемый файл Emacs больше не является неполным.

Поскольку загрузка стандартных файлов Lisp занимает некоторое время, исполняемый файл temacs обычно не запускается пользователями напрямую. Вместо этого один из последних шагов сборки Emacs выполняет команду ‘temacs -batch -l loadup --temacs=dump-method’. Специальный параметр --temacs указывает temacs способ записи всех стандартных загруженных функций и переменных Lisp, чтобы при последующем запуске Emacs он запускался намного быстрее. Параметр --temacs требует аргумент dump-method, который может быть одним из следующих:

‘pdump’

Записывает данные загруженных Lisp в файл дампов. Этот метод создаёт дополнительный файл данных, который Emacs загрузит при запуске. Создаваемый файл дампов обычно называется emacs.pdmp и устанавливается в каталог Emacs exec-directory (см. Справочные функции). Этот метод является наиболее предпочтительным, так как он не требует от Emacs использования каких-либо специальных методов выделения памяти, которые могут помешать различным методам размещения памяти, используемым современными системами для повышения безопасности и конфиденциальности.

‘pbootstrap’

Подобно ‘pdump’, но используется при загрузке Emacs, когда нет предыдущей двоичной версии Emacs и нет скомпилированных байтовыми кодами файлов Lisp *.elc. В этом случае создаваемый файл дампов обычно называется bootstrap-emacs.pdmp.

‘dump’

Этот метод заставляет temacs создать исполняемую программу под названием emacs, в которую уже загружены все стандартные файлы Lisp. (Аргумент ‘-batch предотвращает temacs попытку инициализации каких-либо данных на терминале, так что таблицы информации о терминале в дампе Emacs будут пустыми.) Этот метод также известен как unexec, потому что он создаёт файл программы из работающего процесса и таким образом, в некотором смысле, является обратной операцией запуска программы для запуска процесса. Хотя этот метод традиционно использовался для сохранения состояния Emacs, он теперь устарел.

‘bootstrap’

Подобно ‘dump’, но используется при загрузке Emacs с помощью метода unexec.

Исполняемый файл emacs (также называемый чистым Emacs), созданный с помощью дампинга, является устанавливаемым. Если для сборки Emacs использовался портативный дампер, исполняемый файл emacs является точной копией temacs, и соответствующий файл emacs.pdmp также устанавливается. Переменная preloaded-file-list хранит список загруженных файлов Lisp, записанных в файле дампов или в скомпилированном исполняемом файле Emacs. Если вы портируете Emacs на новую операционную систему и не можете реализовать дампинг любого типа, Emacs должен загружать loadup.el каждый раз при запуске.

По умолчанию создаваемый исполняемый файл emacs записывает такие данные, как время сборки и имя хоста. Используйте параметр --disable-build-details configure для подавления этих данных, чтобы повторная сборка и установка Emacs из одних и тех же исходных кодов с большей вероятностью приведет к идентичным копиям Emacs.

Вы можете указать дополнительные файлы для загрузки, создав библиотеку под названием site-load.el, которая загрузит их. Возможно, вам понадобится пересобрать Emacs с добавлением определения

#define SITELOAD_PURESIZE_EXTRA n

чтобы добавить n дополнительных байтов чистого пространства для хранения дополнительных файлов; см. src/puresize.h. (Попробуйте добавлять приращения по 20000, пока не будет достаточно.

Однако преимущество загрузки дополнительных файлов уменьшается по мере увеличения скорости компьютеров. На современных компьютерах это обычно не рекомендуется.

После того, как loadup.el прочитает site-load.el, он найдёт строки документации для примитивных и загруженных функций (и переменных) в файле etc/DOC, где они хранятся, вызвав Snarf-documentation (см. Получение документации).

Вы можете указать другие выражения Lisp, которые будут выполняться непосредственно перед дампингом, поместив их в библиотеку под названием site-init.el. Этот файл выполняется после того, как будут найдены строки документации.

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

  • Обеспечьте сканирование этих файлов при создании файла etc/DOC и загружайте их с помощью site-load.el.
  • Загрузите файлы с помощью site-init.el, а затем скопируйте файлы в каталог установки файлов Lisp при установке Emacs.
  • Укажите значение nil для byte-compile-dynamic-docstrings в качестве локальной переменной в каждом из этих файлов и загрузите их с помощью site-load.el или site-init.el. (Этот метод имеет недостаток, заключающийся в том, что строки документации занимают место в Emacs постоянно).

Не рекомендуется включать в site-load.el или site-init.el что-либо, что может изменить какие-либо функции, ожидаемые пользователем в обычном немодифицированном Emacs. Если вам необходимо переопределить стандартные функции для вашего сайта, сделайте это с помощью default.el, чтобы пользователи могли переопределить ваши изменения, если захотят. См. Резюме запуска. Обратите внимание, что если site-load.el или site-init.el изменяют load-path, эти изменения будут потеряны после дампинга. См. Поиск библиотек. Чтобы внести постоянное изменение в load-path, используйте параметр --enable-locallisppath configure.

В пакете, который можно загрузить предварительно, иногда необходимо (или полезно) отложить определённые вычисления до последующего запуска Emacs. Подавляющее большинство таких случаев связаны со значениями настраиваемых переменных. Например, tutorial-directory — переменная, определённая в startup.el и загружаемая предварительно. Значение по умолчанию устанавливается на основе data-directory. Переменная должна получить доступ к значению data-directory при запуске Emacs, а не при дампинге, потому что исполняемый файл Emacs, вероятно, был установлен в другом месте после дампинга.

Функция: custom-initialize-delay символ значение

Эта функция откладывает инициализацию символ до следующего запуска Emacs. Обычно эту функцию используют, указав её как свойство :initialize настраиваемой переменной. (Аргумент значение не используется и предоставляется только для совместимости с ожидаемой формой Custom).

В том маловероятном случае, если вам нужна более обширная функциональность, чем предоставляет custom-initialize-delay, вы можете использовать before-init-hook (см. Резюме запуска).

Функция: dump-emacs-portable в_файл &опционально отслеживать_ссылки

Эта функция сохраняет текущее состояние Emacs в файл дампов в_файл с помощью метода pdump. Обычно имя файла дампов — имя_файла_emacs.dmp, где имя_файла_emacs — имя исполняемого файла Emacs. Необязательный аргумент отслеживать_ссылки, если не nil, заставляет портативный дампер сохранять дополнительную информацию, чтобы помочь отследить происхождение типов объектов, которые пока не поддерживаются методом pdump.

Хотя код портативного дампера может работать на многих платформах, файлы дампов, которые он создаёт, не являются портативными — их может загрузить только исполняемый файл Emacs, который их создал.

Если вы хотите использовать эту функцию в уже дампе Emacs, вам нужно запустить Emacs с параметром ‘-batch’.

Функция: dump-emacs в_файл из_файла

Эта функция сохраняет текущее состояние Emacs в исполняемый файл в_файл с помощью метода unexec. Она берёт символы из из_файла (обычно это исполняемый файл temacs).

Эта функция не может быть использована в уже дампе Emacs. Эта функция устарела, и по умолчанию Emacs собирается без поддержки unexec, поэтому эта функция недоступна.

Функция: pdumper-stats

Если текущая сессия Emacs восстановила своё состояние из файла дампов, эта функция возвращает информацию о файле дампов и времени, которое потребовалось для восстановления состояния Emacs. Значение — это список ((dumped-with-pdumper . t) (load-time . time) (dump-file-name . file)), где файл — имя файла дампов, а время — время в секундах, которое потребовалось для восстановления состояния из файла дампов. Если текущая сессия не была восстановлена из файла дампов, значение равно nil.

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/Building-Emacs.html

Spec-Zone.ru

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