查找Emacs站点lisp目录
我试图让我为OSX编写的Emacs配置文件在Ubuntu上工作。我有一句话:查找Emacs站点lisp目录,emacs,elisp,dot-emacs,Emacs,Elisp,Dot Emacs,我试图让我为OSX编写的Emacs配置文件在Ubuntu上工作。我有一句话: (add-to-list 'load-path "/usr/local/Cellar/emacs/23.3/share/emacs/site-lisp/w3m") 它用于加载emacs-w3m。在OSX上,我使用自制软件安装了Emacs,因此它位于/usr/local/cillar/。Ubuntu上的站点lisp目录位于不同的位置。我怎样才能在两种操作系统上都能工作呢?是否有用于检索站点Lisp目录的Emacs Li
(add-to-list 'load-path "/usr/local/Cellar/emacs/23.3/share/emacs/site-lisp/w3m")
它用于加载emacs-w3m。在OSX上,我使用自制软件安装了Emacs,因此它位于/usr/local/cillar/。Ubuntu上的站点lisp目录位于不同的位置。我怎样才能在两种操作系统上都能工作呢?是否有用于检索站点Lisp目录的Emacs Lisp函数?如果您使用的是Emacs 23,则可以使用以下功能:
(concat user-emacs-directory
(convert-standard-filename "site-lisp/"))
但是,这将只找到用户安装的lisp文件的“默认”位置。不,没有办法。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"))
我在我的WindowsEmacs(23.4.1)和MacOSEmacs(23.4.1)上尝试了这个插件,它成功了
(concat (car load-path) "/w3m")
通常,加载路径将站点lisp作为列表中的第一项。在站点lisp目录中创建一个
subdirs.el
文件,该文件不执行(添加到列表“加载路径”(展开文件名“w3m”(文件名目录加载文件名))
。
这就是说,您也可以将w3m目录放在任何您喜欢的地方,这样您就不必担心site lisp在哪里,而只需要担心w3m在哪里。
site lisp
旨在使给定系统上的所有用户都可以使用库,因此将按系统进行管理
如果您只是试图跨服务器一致地管理自己的配置,请不要将内容放入站点lisp
;将它们放在用户目录的子目录下,例如~/.emacs.d/lisp/
,然后使用:
(添加到列表的加载路径(扩展文件名“~/.emacs.d/lisp/w3m”))
如果您确实想查询加载路径
中的“site lisp”目录(或类似目录),可以执行以下操作:
(如果没有,请删除
(lambda(路径)(string-match-p“/site lisp\\\'”路径))
加载路径)
(但是如果你真的想把东西保存在site lisp
中,Stefan的答案是最好的)出于某种原因(见下文),我想将package user dir
(ELPA)设置到site lisp目录
应该可以从标准exec目录
变量推断站点lisp目录:
(setq-site-lisp目录(concat-exec目录)。/site-lisp)
至少对于来自GNU的预编译Emacs版本,这是有效的(目录已经存在)。最终创建目录:
(除非(file-accessible-directory-p site lisp directory)
(使目录站点成为lisp目录)
我的动机是,默认情况下,package user dir
是%USERPROFILE%/.emacs.d/elpa/
,这似乎是一个相当奇怪的位置。软件包应在系统范围内为所有用户安装。此外,~/.emacs.d
包含服务器设置、自动保存列表和备份。当emacs有一个ded时,软件包在那里做什么一个人可以问到icated站点lisp目录
然而,真正的“问题”是针对Windows的。它不需要安装,因此可以像从一根棍子上一样可移植运行。然后IMHO ELPA应该使用其站点lisp目录,这样包也可以移植安装。这是用户目录,而不是系统目录。这看起来是Emacs lisp解决此问题的最佳方法。或者,对于更一般的解决方案,您可以UDE循环您当前的代码>加载路径< /代码>,查找名为“代码> W3M < /代码>的子目录,然后将它们全部添加到加载路径。但是,我不认为这真的是必要的。难道<代码> W3M < /代码>安装它自己的AutoLoad?应该!我不认为这是可靠的。