9

OS X 用に作成された Emacs 構成ファイルを Ubuntu で動作させようとしています。私はこの行を持っています:

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

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

4

6 に答える 6

8

いいえ、仕方がありません。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"))
于 2011-08-03T19:34:32.943 に答える
1

他のアドオンのWindowsEmacs(23.4.1)とMac OS Emacs(23.4.1)でこれを試しましたが、機能しました。

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

通常、load-pathには、リストの最初の項目としてsite-lispがあります。

于 2012-10-02T14:58:19.523 に答える
1

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

サーバー間で一貫して独自の構成を管理しようとしているだけの場合は、物事を入れないでくださいsite-lisp。それらをユーザーディレクトリのサブディレクトリの下に置き、次のよう~/.emacs.d/lisp/に使用します。

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

「site-lisp」ディレクトリ(またはそのように見えるディレクトリ)をクエリする場合はload-path、次のように実行できます。

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

(しかし、本当に物事を維持したいのであれば、ステファンの答えが最善ですsite-lisp

于 2012-10-02T20:40:16.827 に答える
1

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

于 2012-10-02T17:12:07.827 に答える
1

package-user-dir何らかの理由で (以下を参照) 、(ELPA) を site-lisp-directoryに設定したかったのです。

exec-directory標準変数から site-lisp-directory を推測できるはずです:

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

少なくとも、GNU からコンパイル済みの Emacs バージョンではこれが機能します (ディレクトリは既に存在します)。最終的にディレクトリを作成します。

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

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

しかし、本当の「問題」は、プリコンパイルされた Windows 用のEmacs 24.3でした。インストールが不要なため、スティックからのようにポータブルに実行できます。私見 ELPA はその site-lisp-directory を使用する必要があるため、パッケージも移植可能にインストールされます。

于 2013-06-11T12:08:30.103 に答える
-1

Emacs 23 を使用している場合は、次を使用できます。

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

ただし、これは、ユーザーがインストールした Lisp ファイルの「デフォルト」の場所のみを検索します。

于 2011-08-03T19:33:34.177 に答える