0

昔、私が .emacs のセットアップ[1]を書いたとき、私はシェルスクリプトを使ってコンパイルし、すべてを結合しました。このことは非常に古く、「無愛想」になっているため、次のようなものを置き換えるために書き直しています。

(defmacro make-new-comment( mode face strcom color1 color2)
   (list 'progn
         `(make-face ',face)     
         `(if (not (assoc ,strcom ,(intern (concat (symbol-name mode) "-comments-alist"))))
              (setf ,(intern (concat (symbol-name mode) "-comments-alist"))
              (append ,(intern (concat (symbol-name mode) "-comments-alist")) '((,strcom . ,face)))
              )
          )
        `(modify-face ',face ,color1 ,color2 nil t nil nil nil nil)
   )
)

そして、何かが私に起こりました。コンパイル時に、システムに関する情報を提供するいくつかの環境変数にアクセスします。たとえば、[2]、comint[3] を使用するモードによって呼び出されるほとんどのプログラムの完全な名前です。環境変数を読み取るのではなく、autoconf のようなツールを使用して .emacs ファイルを微調整し、コンパイルすることができます。

問題は、autoconf が単純に醜いことです。私はcmakeを検討しましたが、特に独自のビルドシステムを構築する際のドキュメントは非常に貧弱です. 私は代替システムに慣れていません。

提案?

[1]: 明確にするために、.emacs セットアップとは、私が持っている 30 ほどのファイルと 2 つのコードのサブディレクトリを意味します。言うまでもなく、(インクルードの時点で) 標準の emacs ディストリビューションに含まれていないパッケージがいくつかあります。

[2] eg を "" に置き換えました。なぜなら、eg の意味を知らない人が多いようです。それか、彼らは例が何であるかを知りません。

[3] diff-mode、ruby-modeなど。

4

3 に答える 3

1

私が理解していることから、環境変数を介して.emacsにツールがどこにあるかを手動で通知するのではなく、スクリプトがツール(diff、grep ...など)の場所を自動検出する必要があります。

UNIXライクなプラットフォームを使用している場合は、diff、grepなどのすべてのツールがすでにPATHに含まれているはずであり、emacsはそれらを問​​題なく見つけることができます。したがって、.emacsでは、環境変数を使用せず、構成にツール名を直接入力する必要があります。

たとえば、Windowsで実行できるポータブルな.emacsを作成することが目標の場合は、すべてのgnuwin32ツールもPATHに入れて、emacsが問題なくそれらを見つけられるようにする必要があります。しかし、Windowsの場合、UNIXシステムのようにemacsコマンドが正しく機能するようにするには、他にも多くの小さな調整を行う必要があります。

autoconfのようなツールを使用することは、単一の.emacsファイルをカスタマイズすることでうまく処理できるものにとっては非常に時間がかかるものです。特定のシステムに対して特定のことを行う場合は、次のようなelispコードを記述できます。

(if (eq window-system 'w32)
    (progn ... ))

また、すべての.elファイルのバイトコンパイルを自動化したい場合は、シェルで次のようなコマンドを使用できます。

emacs --batch -f batch-byte-compile *.el
于 2010-09-06T15:27:13.930 に答える
1

which diff?

詳細はここで役立ちます。これらの環境変数は自分で設定したものですか? またはあなたのディストリビューションによって提供されるもの?

少し皮肉なことに、emacs の信じられないほど強力な組み込みスクリプトが探しているものであるように思えます。

于 2010-09-05T21:14:43.483 に答える
1

私は jkerian に同意します: なぜパーツから .emacs を組み立てているのですか? これが私がしていることです: 言語または機能ごとに分類し、 と を使用requireprovideます。私の .emacs は次のようになります。

; -*- emacs-lisp -*-
(add-to-list 'load-path "~/elisp/personal")

(require 'jdk-generic)
(require 'jdk-haskell)
(require 'jdk-keywiz)
(require 'jdk-lua)
(require 'jdk-ocaml)
(require 'jdk-org)
(require 'jdk-php)
(require 'jdk-tex)
(require 'jdk-text)
(require 'jdk-whitespace)

次に、個々のファイルごと~/elisp/personalに言語などのサポートを設定し、次にprovides jdk-whatever. jdk-lua.el は次のとおりです。

(add-to-list 'load-path "~/elisp/packages/lua-mode-20071122")
(add-to-list 'auto-mode-alist '("\\.lua$" . lua-mode))
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)
(provide 'jdk-lua)

~/elisp/packages にすべての elisp パッケージを保持していることに注意してください。つまり、.emacs と ~/elisp ディレクトリをほぼどこにでもコピーして、すぐに機能させることができます。

于 2010-09-06T00:30:48.670 に答える