Вопрос или проблема
Я пытаюсь настроить конфигурацию Emacs, специфичную для проекта, с помощью файла .dir-locals.el
. Моя цель — создать настройки, которые будут работать при открытии Emacs в этой конкретной папке (например, в терминальном режиме emacs -nw
, emacs -nw .
или emacs -nw .\
), с следующими функциями:
- Автоматически отображать структуру файлов/папок на левом панели, аналогично боковой панели Visual Studio Code.
- Удалить экран загрузки и строку меню.
- Использовать локальную директорию
.emacs.d.local
для специфичных для проекта пакетов.
Вот что я попробовал до сих пор в своем .dir-locals.el
:
((nil . ((eval . (progn
;; Настройка локальной директории пакетов
(setq package-user-dir (expand-file-name ".emacs.d.local" default-directory))
(setq package-gnupghome-dir (expand-file-name "gnupg" package-user-dir))
;; Инициализация системы пакетов
(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")
("elpa" . "https://elpa.gnu.org/packages/")))
(package-initialize)
;; Определение и установка необходимых пакетов
(setq my-packages
'(company flycheck projectile magit format-all treemacs treemacs-projectile dired-sidebar))
(dolist (package my-packages)
(unless (package-installed-p package)
(package-refresh-contents)
(package-install package)))
;; Отключение экрана загрузки и строки меню
(setq inhibit-startup-screen t)
(setq initial-buffer-choice t)
(menu-bar-mode -1)
;; Настройка боковой панели с деревом файлов
(require 'dired-sidebar)
(dired-sidebar-toggle-sidebar)
;; Другая конфигурация...
))))))
Тем не менее, я сталкиваюсь с следующими проблемами:
- Боковая панель с деревом файлов не отображается автоматически в терминальном режиме.
- Экран загрузки иногда все еще появляется.
- Я не уверен, правильно ли используется локальная
.emacs.d.local
.
Как я могу изменить эту конфигурацию, чтобы достичь желаемых настроек, особенно чтобы убедиться, что боковая панель с деревом файлов появляется автоматически в терминальном режиме?
Ответ или решение
Чтобы настроить проект специфическую конфигурацию Emacs с использованием файла .dir-locals.el
, вам нужно внести несколько изменений в вашу текущую конфигурацию, чтобы удовлетворить всем требованиям. Вот шаги, которые помогут вам достичь желаемого результата:
1. Обеспечение автоматического появления боковой панели с файловой структурой
Проблема с боковой панелью может заключаться в том, что функция dired-sidebar-toggle-sidebar
не запускается автоматически при запуске Emacs. Вы можете использовать хук emacs-startup-hook
для выполнения этой функции сразу после старта Emacs. Также убедитесь, что вы вызываете нужное расширение правильно.
2. Удаление стартового экрана
Иногда стартовый экран может появляться, если инициализация конфигурации происходит не в том порядке или если не все параметры заданы должным образом. Убедитесь, что вы установили inhibit-startup-screen
и другие переменные до инициализации пакетов.
3. Использование локального каталога .emacs.d.local
Для того чтобы гарантировать правильное использование локального каталога для пакетов, необходимо убедиться, что этот каталог создается заранее и доступен.
Пример исправленного файла .dir-locals.el
:
((nil . ((eval . (progn
;; Устанавливаем локальный каталог пакетов
(let ((local-package-dir (expand-file-name ".emacs.d.local" default-directory)))
(setq package-user-dir local-package-dir)
(setq package-gnupghome-dir (expand-file-name "gnupg" package-user-dir))
;; Инициализируем систему пакетов
(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")
("elpa" . "https://elpa.gnu.org/packages/")))
(unless package--initialized
(package-initialize))
;; Определяем необходимые пакеты
(setq my-packages
'(company flycheck projectile magit format-all dired-sidebar))
;; Устанавливаем недостающие пакеты
(dolist (package my-packages)
(unless (package-installed-p package)
(package-refresh-contents)
(package-install package)))
;; Отключаем стартовый экран и меню
(setq inhibit-startup-screen t)
(menu-bar-mode -1)
;; Устанавливаем боковую панель файлов
(add-hook 'emacs-startup-hook
(lambda ()
(require 'dired-sidebar)
(dired-sidebar-toggle-sidebar))))))))
Объяснение изменений:
- Использование
add-hook 'emacs-startup-hook
: Это гарантирует, что боковая панель будет вызвана при старте Emacs. - Проверка и инициализация пакетов: Мы добавили проверку
unless package--initialized
, чтобы предотвратить повторную инициализацию пакетов. - Проверка необходимых пакетов: Пакеты будут устанавливаться только в том случае, если их нет, что позволяет избежать лишних действий.
- Отключение меню: Логика отключения меню и стартового экрана была ранее корректна, но мы проверили порядок выполнения.
Вывод
С помощью этих изменений ваш Emacs должен запускаться в терминальном режиме с боковой панелью, без стартового экрана, и использовать локальный каталог для пакетов. Попробуйте применить предложенные изменения и посмотрите, решены ли ваши проблемы. Если потребуются дополнительные настройки, вы всегда сможете добавить новые параметры в ваш .dir-locals.el
файл.