Как загрузить модуль только в Linux? - PullRequest
0 голосов
/ 19 января 2012

Вот моя попытка:

(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

Ответы [ 3 ]

9 голосов
/ 19 января 2012

Ваша проблема в том, как вы используете if: в документации сказано, что он

(if COND THEN ELSE...)

Т.е. ваш (require 'site-gentoo) выполняется тогда и только тогда, когда он не GNU /Система Linux.

Вместо этого используйте when, это должно делать то, что вы намерены.

Кроме того, на самом деле не должно быть необходимости использовать оба load и require, их использование должно иметьтот же результат.Различия в основном в том, что require будет искать load-path и не загружать что-то еще, что уже было загружено ранее.

4 голосов
/ 19 января 2012

Должно быть:

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

или

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

Вместо (load "/usr/share/emacs/site-lisp/site-gentoo") следует добавить папку, содержащую файл загрузки, в load-path:

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

Это должно сработать. require работает только для файлов на load-path, load, с другой стороны, просто оценивает файл lisp, который был задан в качестве параметра.

1 голос
/ 25 января 2012

Рорд и Божидар Бацов уже предоставили ответ о том, как ее решить, но просто добавили причину, по которой ваш исходный код не работал.

(if COND THEN ELSE...) принимает только одну команду THEN. Чтобы иметь возможность оценивать несколько команд, когда он возвращает true, вы должны заключить команды в (progn BODY...).

Ваш код указывал:
Если на Linux: (load "/usr/share/emacs/site-lisp/site-gentoo")
Если не в Linux: (require 'site-gentoo)

Использование (when ...) или перенос в (progn ...) обеспечат желаемое решение.

...