9

我正在尝试让为 OS X 编写的 Emacs 配置文件在 Ubuntu 上运行。我有这条线:

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

它用于加载 emacs-w3m。在 OS XI 上使用 Homebrew 安装 Emacs,因此它位于 /usr/local/Cellar/ 中。Ubuntu 上的 site-lisp 目录位于不同的位置。如何以适用于两个操作系统的方式编写此行?是否有 Emacs Lisp 函数来检索 site-lisp 目录?

4

6 回答 6

8

不,没有办法。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"))
于 2011-08-03T19:34:32.943 回答
1

我在我的 Windows Emacs (23.4.1) 和 Mac OS Emacs (23.4.1) 上为我的其他附加组件尝试了这个,它成功了。

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

通常,加载路径将 site-lisp 作为列表中的第一项。

于 2012-10-02T14:58:19.523 回答
1

subdirs.el在您的 site-lisp 目录中创建一个文件,其中包含(add-to-list 'load-path (expand-file-name "w3m" (file-name-directory load-file-name))). 也就是说,您也可以将 w3m 目录放在您喜欢的任何位置,因此您不必担心 site-lisp 在哪里,而只需担心 w3m 在哪里。

于 2012-10-02T17:12:07.827 回答
1

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)

(但如果你真的想保留东西,Stefan 的回答是最好的site-lisp

于 2012-10-02T20:40:16.827 回答
1

出于某种原因(见下文),我想将package-user-dir(ELPA)设置为 site-lisp 目录。

应该可以从标准exec-directory变量中推断出 site-lisp-directory:

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

至少使用来自 GNU 的预编译 Emacs 版本是可行的(该目录已经存在)。最终创建目录:

(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-directory 可以询问时,那里有什么包可以做。

然而,真正的“问题”是用于 Windows的预编译 Emacs 24.3 。它不需要安装,因此可以便携式运行,就像从棍子上一样。恕我直言,ELPA 应该使用它的 site-lisp-directory,这样包也可以移植安装。

于 2013-06-11T12:08:30.103 回答
-1

如果您使用的是 Emacs 23,则可以使用以下内容:

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

但是,这只会找到用户安装的 lisp 文件的“默认”位置。

于 2011-08-03T19:33:34.177 回答