2011-08-03 9 views
7

OS X用のEmacs設定ファイルをUbuntuで作ろうとしています。私は次の行を持っています:Emacs site-lispディレクトリを見つける

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

これはemacs-w3mをロードするために使用されます。 OS Xでは、Homebrewを使ってEmacsをインストールしたので、/usr/local/Cellar/にあります。Ubuntuのsite-lispディレクトリは別の場所にあります。両方のオペレーティングシステムで動作する方法でこの行を書くにはどうすればよいですか? site-lispディレクトリを取得するEmacs Lisp関数はありますか?

答えて

7

いいえ、方法はありません。 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")) 
+0

これはEmacs Lispがこの問題のためにできる最良のようです。 – hekevintran

+0

もっと一般的な解決策として、現在の 'load-path'をループし、' w3m'という名前のサブディレクトリを探してそれらをすべてロードパスに追加することができます。しかし、私はこれが本当に必要であるとは思わない。 'w3m'自身のオートロードをインストールしませんか?そうすべき! – tripleee

-1

あなたは以下を使用することができますEmacsの23を使用している場合:

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

をしかし、これが唯一のユーザーがインストールしたLispファイルでは、「デフォルト」の場所を見つけます。

+0

これは、システムではなく_user_ディレクトリです。 –

+0

はい、あなたは正しいです。 – zev

1

私は私のWindowsのEmacs(23.4.1)でこれを試してみました私の他のアドオン用のMac OS用のEmacs(23.4.1)が動作していました。

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

通常、load-pathはリストの最初の項目としてsite-lispを持っています。

+1

私は信頼できるとは思わないでしょう。 – phils

1

(add-to-list 'load-path (expand-file-name "w3m" (file-name-directory load-file-name)))のsite-lispディレクトリにsubdirs.elファイルを作成します。 これは、あなたが好きな場所にw3mディレクトリを置くこともできるので、site-lispがどこにあるのかだけ心配する必要はなくw3mがどこにあるのか心配する必要はありません。

1

site-lispは、特定のシステム上のすべてのユーザーがライブラリを利用できるようにするためのもので、システムごとに管理されます。

自分の設定をサーバー間で一貫して管理しようとしているだけの場合は、site-lispに置かないでください。など~/.emacs.d/lisp/し、その後、使用、ユーザーディレクトリのサブディレクトリの下に置く:あなたは、「サイト-lispの」ディレクトリのためにあなたのload-pathを照会したい場合は

(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/w3m")) 

(または1つのように見えるもの)に私はpackage-user-dir(ELPA)を設定したい何らかの理由(下記参照)について

(remove-if-not 
(lambda (path) (string-match-p "/site-lisp\\'" path)) 
load-path) 

(あなたが本当にsite-lispで物事を維持したい場合はステファンの答えがベストです)

1

:、あなたはこれを行うことができますsite-lisp-directory 。

標準exec-directory変数からサイト-lispのディレクトリを推定することができるようになります。

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

少なくともプリコンパイルされたEmacsの-バージョンのGNUから、この作品(ディレクトリがすでに存在しています)。最終的にディレクトリを作成します。

(unless (file-accessible-directory-p site-lisp-directory) 
    (make-directory site-lisp-directory)) 

私のモチベーションは、デフォルトでpackage-user-dirはかなり奇妙な場所であるように思わ%USERPROFILE%/.emacs.d/elpa/、であるということでした。パッケージは、すべてのユーザーに対してシステム全体にインストールされるものとします。また~/.emacs.dには、サーバー設定、自動保存リスト、およびバックアップが含まれています。 Emacsが専用のサイトリスプディレクトリを持っているときに、そこで何をするにはパッケージが必要ですか?

しかし、実際の「問題」はWindowsの場合precompiled Emacs 24.3でした。それはインストールを必要とせず、したがってスティックのように移植可能に実行することができます。 IMHO ELPAはsite-lisp-directoryを使用して、パッケージが移植可能にインストールされるようにします。

関連する問題