2012-01-19 4 views
1

は私の試みです:モジュールをlinuxで読み込むには?ここ

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

しかし、とにかく、私は窓にエラーが表示されます。

/.emacs': 

File error: Cannot open load file, site-gentoo 

答えて

10

あなたの問題はあなたがifを使用する方法である:そのドキュメントは、それが

(if COND THEN ELSE...) 

すなわちだと言いますあなたの(require 'site-gentoo)でない場合にのみ実行されます。はGNU/Linuxシステムです。

代わりにwhenを使用してください。これは意図したとおりに行う必要があります。

また、実際にはloadrequireの両方を使用する必要はありません。その使用法は同じ結果になるはずです。違いはほとんどがrequireload-pathを検索し、前に既に読み込まれたものを再度読み込まないことです。

+0

ありがとうございました。 – Cynede

4

それは次のようになります。

(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)) 

代わりにトリックを行う必要があります

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

(load "/usr/share/emacs/site-lisp/site-gentoo")のあなたはload-pathにロードファイルを含むフォルダを追加する必要があります。 requireは、load-pathのファイルに対してのみ機能し、loadは、パラメータとして与えられたlispファイルを評価します。

1

RördとBozhidar Batsovは、解決方法についての回答をすでに提供していますが、元のコードが失敗した理由を追加するだけです。

(if COND THEN ELSE...)は、単一のTHENコマンドのみを受け入れます。 trueを返すときに複数のコマンドを評価できるようにするには、コマンドを(progn BODY...)にラップする必要があります。

あなたのコードは述べた:
Linuxの場合:(load "/usr/share/emacs/site-lisp/site-gentoo")
ない場合をLinux上:(require 'site-gentoo)

目的のソリューションを提供します両方(progn ...)(when ...)やラッピングを使用します。

関連する問題