Emacs - подгрузка модулей

Опубликовано Igor - вс, 10/22/2017 - 10:12

Пару лет я серьезно осваивал текстовый редактор VIM. Использовал его для широкого круга задач - от настройки конфигов на удаленном веб-сервере под FreeBSD до разработок на C++ в MinGW-w64 под MS-Windows. В публичном репозитории завел специальный раздел с удобными для себя настройками для разных случаев. Но в конце-концов я пришел к выводу, что идеологический "Нормальный режим" VIM для меня не норма, а извращение. Лично мне неудобно постоянно переключаться между режимами. Ведь для выполнения различных операций, кроме набора текста, спокойно можно использовать клавиатурные комбинации не прыгая между режимами.

Ближайший мультисистемный соперник VIM всем известен, это конечно Emacs. Настроил я конфиг для работы с языком программирования Go (отдельным модулем):

(add-to-list 'load-path "~/.emacs.d/my-custom") ; папка с файлами настроек режимов
(require 'my-custom-go)

Все красиво и удобно! Тут тебе и синтаксис и грамматика и автодополнение, короче - все удобства в наличии. Но вот из-за того, что для режима работы с исходниками на Go требуется 12 дополнительных модулей, то Emaсs при загрузке стал притормаживать. Конечно, 1 - 2 секунды - это ерунда, но мне стало любопытно, ведь я же еще с кучей языков работаю - С++, Python, Java, скриповые языки для веб-серверов, шелл, конфиги всякие... И если я не 12 а 120 модулей со временем на него загружу, то как он «взлетать» то будет?

Вроде бы самое очевидное решение - подгружать конфиги по мере необходимости (при помощи хука):

(add-to-list 'load-path "~/.emacs.d/my-custom") ; папка с файлами настроек режимов
(add-hook 'go-mode-hook (lambda () (require 'my-custom-go))

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

(add-to-list 'load-path "~/.emacs.d/my-custom") ; папка с файлами настроек режимов
(add-hook 'go-mode-hook (load "my-custom-go.el"))
(add-hook 'с-mode-hook (load "my-custom-с.el"))
(add-hook ...

Таким образом, при преходе Emacs в определенный режим он подгрузит только необходимые для данного режима модули.

Теги