Как построить emacs конфигурацию из модулей?

Я решил переписать свой .emacs с нуля, и я хочу установить что-то, что это является модульным для предотвращения страшного 1k + файл LoC init.el...

Я думаю, что существуют некоторые основные опасения, что каждая конфигурация должна обратиться:

  • глобальные опции
  • функции редактирования
  • навигация (кадры и буферы)
  • привязки клавиш
  • настройки режимов

В то время как я все еще связываю для продумывания структуры, я ищу некоторые указатели о том, как достигнуть этого.
Я посмотрел на некоторый .emacs на GitHub и таком, и, кажется, существуют подходы deifferent и никакой предпочтительный способ пойти с этим, которое немного сбивает с толку.
Я интересовался бы чтением некоторых идей относительно того, как структурировать такую установку, и особенно некоторые связали код elisp.


редактирование: нагнал с вещами и не имели большого количества времени для проигрывания с этим все же. Будет испытывать предложенные методы через несколько дней и видеть то, что является лучшим, между тем спасибо за все рекомендации!


edit2: я использовал грамотный init файл с org-режимом, и это является абсолютно потрясающим!
Я 'm еще не установленный на механизме удельной нагрузки, я использовал этот код, для рекурсивной загрузки моего elisp каталога, затем требую или независимо от того, что в инструкциях по установке говорится.

  (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
  (let* ((my-lisp-dir "~/.emacs.d/elisp/")
  (default-directory my-lisp-dir))
  (setq load-path (cons my-lisp-dir load-path))
  (normal-top-level-add-subdirs-to-load-path)))

Я все еще должен полировать это, возможно, с помощью автозагрузки, и некоторый байт - перекомпилировал если измененные приемы; хотел бы услышать предложения на этом.

45
задан julien 12 February 2010 в 16:35
поделиться

6 ответов

загрузка моего .emacs файла ~/.emacs.d/init. el, которая определяет следующие функции, написанные сначала для XEmacs, но достаточно хорошо работающие в Emacs в наши дни:

(defconst user-init-dir
  (cond ((boundp 'user-emacs-directory)
         user-emacs-directory)
        ((boundp 'user-init-directory)
         user-init-directory)
        (t "~/.emacs.d/")))


(defun load-user-file (file)
  (interactive "f")
  "Load a file in current user's configuration directory"
  (load-file (expand-file-name file user-init-dir)))

Затем идет остальной файл и загружает множество отдельных файлов с такими формами:

(load-user-file "personal.el")

Мой текущий набор файлов следующий:

  • personal.el
  • platform.el
  • cygwin.el
  • variables.el
  • path. el
  • mail-news.el
  • misc-funcs.el
  • bbdb.el
  • calendar.el
  • gnus-funcs.el
  • c-and-java.el
  • lisp.el
  • clojure.el
  • go.el
  • markdown.el
  • sgml-xml.el
  • tex.el
  • spelling. el
  • org.el
  • packages.el
  • fonts.el
  • color-theme.el
  • frame.el
  • server.el
  • keys.el
  • aquamacs.el

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

44
ответ дан 26 November 2019 в 21:25
поделиться

Взгляд на превосходное стартовый комплект , который очень красиво организован, а также включает в себя пакеты ELPA. Я использовал структуру как вдохновение для моей намного простых настроек.

1
ответ дан 26 November 2019 в 21:25
поделиться
[11184682-

То, что я сделал для каждой вещи, X, что я мог бы захотеть использовать, создать файл, называемый Configure-X, и поместить соответствующую в .emcs. Отказ Эта функция затем может быть удалена, комментируя одну строку.

Например, чтобы выбрать простейший (если наиболее плохо называется), у меня есть настраиваемая картинка-артистка-режима. Этот файл очень прост:

(global-set-key (kbd "C-M-P")
                'picture-mode)

(provide 'configure-picture-and-artist-mode)

и в .emacs:

(require 'configure-picture-and-artist-mode)

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

(У меня также есть файл Catch-All .el, который я использую для хранения вещей, которые не имеют никакого очевидного дома (мои глобальные ключевые ключи, функции помощника и т. Д.), Но все же идеально хочется остаться вне. Emacs. Этот бит не очень модульный, и может ввести неявные зависимости от пакетов, которые моя схема должна легко произносить бесчисленным, но на практике это не имеет большого значения.)

0
ответ дан 26 November 2019 в 21:25
поделиться

Что не так с использованием LOAD-файл ?

Некоторые дополнительные биты, которые вы можете найти полезными, включают

  • файл - P
  • Подстановочные знаки

Использование CH F <Функция> Чтобы получить помощь, и вы можете найти Введение в программирование в Emacs Lisp Полезно (или Скачать PDF ))

2
ответ дан 26 November 2019 в 21:25
поделиться

Вы можете сделать (require 'foo) и это загрузит первый "foo.el" elisp найденный в пути загрузки, или (require 'foo "/home/user/experimental/foo.el")(require 'foo "/home/user/experimental/foo.el") для чего-то находящегося за пределами пути загрузки. Он сообщит об ошибке, если "foo.el" не содержит выражения (предоставить 'foo'). В извращенной ситуации Вы могли бы сделать (потребовать 'foo "bar.el"), и это работало бы до тех пор, пока в "bar.el" есть (предоставить 'foo) выражение.

2
ответ дан 26 November 2019 в 21:25
поделиться

Чтобы разделить настраивания в разные файлы, вы можете использовать initsplit.el . Кроме того, у Wiki есть страница на модульной макете .emcs .

6
ответ дан 26 November 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: