Emacs 如何仅在linux中加载模块?

Emacs 如何仅在linux中加载模块?,emacs,elisp,Emacs,Elisp,以下是我的尝试: (if (eq system-type 'gnu/linux) (load "/usr/share/emacs/site-lisp/site-gentoo") (require 'site-gentoo)) 但无论如何,我在windows上收到错误: /.emacs': File error: Cannot open load file, site-gentoo 应该是: (if (eq system-type 'gnu/linux) (progn

以下是我的尝试:

(if (eq system-type 'gnu/linux)
    (load "/usr/share/emacs/site-lisp/site-gentoo")
    (require 'site-gentoo))
但无论如何,我在windows上收到错误:

/.emacs':

File error: Cannot open load file, site-gentoo
应该是:

(if (eq system-type 'gnu/linux)
    (progn
      (load "/usr/share/emacs/site-lisp/site-gentoo")
      (require 'site-gentoo)))

您应该将包含加载文件的文件夹添加到加载路径,而不是load/usr/share/emacs/site lisp/site gentoo:


这应该能奏效。require仅适用于加载路径上的文件,而另一方面,load只计算作为参数提供的lisp文件。

您的问题在于您使用的方式,如果:其文档说明它是

(if COND THEN ELSE...)
即,当且仅当您的require站点gentoo不是GNU/Linux系统时,才会执行它

使用when代替,它应该做你想要做的


另外,实际上不需要同时使用load和require,它们的使用应该有相同的结果。区别主要在于需要搜索加载路径,不再加载以前已加载的内容。

Rörd和Bozhidar Batsov已经给出了解决方法的答案,但只是补充了原始代码失败的原因

如果是康德,那么其他。。。只接受一个THEN命令。为了让它在返回true时计算多个命令,您必须将命令包装在progn BODY中

你的密码是: 如果在linux上:load/usr/share/emacs/site lisp/site gentoo 如果不在linux上:需要“站点gentoo”

使用时。。。或者用程序包起来。。。两者都将提供所需的解决方案

(add-to-list 'load-path "/usr/share/emacs/site-lisp/")
(if COND THEN ELSE...)