Поиск каталога Emacs site-lisp - PullRequest
9 голосов
/ 03 августа 2011

Я пытаюсь заставить мой файл конфигурации Emacs, написанный для OS X, работать на Ubuntu.У меня есть эта строка:

(add-to-list 'load-path "/usr/local/Cellar/emacs/23.3/share/emacs/site-lisp/w3m")

Используется для загрузки emacs-w3m.На OS XI установлен Emacs с использованием Homebrew, поэтому он находится в /usr/local/Cellar/. Каталог site-lisp в Ubuntu находится в другом месте.Как я могу написать эту строку так, чтобы она работала в обеих операционных системах?Существует ли функция Emacs Lisp для получения каталога site-lisp?

Ответы [ 6 ]

8 голосов
/ 03 августа 2011

Нет, нет пути.Каталог site-lisp является соглашением, и только его существование не согласовано с его путем.

Либо вы устанавливаете символическую ссылку на Mac / Ubuntu, либо используете системный ключ:

(defconst my-lisp-dir (cond
    ((equal system-type 'gnu/linux) "/usr/share/emacs/site-lisp/")
    ((equal system-type 'darwin) (concat "/usr/local/Cellar/emacs/" (number-to-string emacs-major-version) "." (number-to-string emacs-minor-version) "/share/emacs/site-lisp/"))
    (t (concat "/usr/local/emacs/site-lisp/")))

и затем

(add-to-list 'load-path (concat my-lisp-dir "w3m"))
1 голос
/ 11 июня 2013

По какой-то причине (см. Ниже) я хотел установить package-user-dir (ELPA) в каталог site-lisp.

Должна быть возможность вывести каталог site-lisp из стандартного exec-directory переменная:

(setq site-lisp-directory (concat exec-directory "../site-lisp")

По крайней мере с предварительно скомпилированными версиями Emacs из GNU это работает (каталог уже существует).В конце концов создайте каталог:

(unless (file-accessible-directory-p site-lisp-directory)
    (make-directory site-lisp-directory))

Моя мотивация заключалась в том, что package-user-dir по умолчанию - %USERPROFILE%/.emacs.d/elpa/, что выглядит довольно странно.Пакеты должны быть установлены в масштабе всей системы для всех пользователей.Также ~/.emacs.d содержит настройки сервера, списки автосохранения и резервные копии.Что нужно делать с пакетами, когда в Emacs есть выделенный каталог site-lisp, который можно спросить.

Однако настоящей «проблемой» была предварительно скомпилированная Emacs 24.3 для Windows.Он не требует установки и, следовательно, может быть запущен переносно, как с палки.ИМХО ELPA должен затем использовать свой каталог site-lisp, чтобы пакеты также устанавливались переносимо.

1 голос
/ 03 октября 2012

site-lisp предназначен для того, чтобы сделать библиотеки доступными для всех пользователей в данной системе, и поэтому будет управляться отдельно для каждой системы.

Если вы просто пытаетесь последовательно управлять своей собственной конфигурацией черезсерверы, не кладите вещи в site-lisp;поместите их в подкаталог вашего пользовательского каталога, например, ~/.emacs.d/lisp/, а затем используйте:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/w3m"))

Если вы хотите запросить у вашего load-path каталог "site-lisp" (илите, которые похожи на один), вы можете сделать это:

(remove-if-not
 (lambda (path) (string-match-p "/site-lisp\\'" path))
 load-path)

(но ответ Стефана лучше, если вы действительно хотите сохранить вещи в site-lisp)

1 голос
/ 02 октября 2012

Создайте файл subdirs.el в каталоге site-lisp, который делает (add-to-list 'load-path (expand-file-name "w3m" (file-name-directory load-file-name))).При этом вы также можете просто разместить каталог w3m в любом месте, чтобы вам не пришлось беспокоиться о том, где находится site-lisp, а только о том, где находится w3m.

1 голос
/ 02 октября 2012

Я пробовал это на своих Windows Emacs (23.4.1) и Mac OS Emacs (23.4.1) для моего другого дополнения, и это работало.

(concat (car load-path) "/w3m")

Обычно путь загрузки имеетsite-lisp как первый элемент в списке.

0 голосов
/ 03 августа 2011

Если вы используете Emacs 23, вы можете использовать следующее:

(concat user-emacs-directory
        (convert-standard-filename "site-lisp/")) 

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

...