2010-09-05 56 views
0

很久以前,當我編寫我的.emacs安裝程序[1]時,我使用shell腳本來編譯和加入整個事情。問題是現在很舊,「脾氣暴躁」,所以我現在重寫它來代替的東西,如:.emacs,automake和cmake

(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個左右的文件和兩個子代碼。更不用說幾個包(在包含時)並不是標準emacs發行版的一部分。

[2]我用例如「」代替了,因爲顯然很多人不知道,例如,無論是他們還是他們不知道一個例子。

[3]如diff-mode和ruby-mode。

+0

爲什麼你不能只是改變你的PATH設置來找到像diff一樣的常見程序? – 2010-09-05 20:54:36

+0

爲什麼你需要設置一些環境變量來查找像diff或grep這樣的工具,這些工具通常應該在你的PATH上? – 2010-09-06 15:21:24

+0

你爲什麼完全改變這個問題。請開始一個新問題並將其恢復。謝謝。 – ocodo 2010-09-07 02:13:34

回答

1

which diff

更多細節將在此處有用。這些環境變量是你自己設定的嗎?或您的發行版提供的東西?

有點諷刺的是,這聽起來像emacs的內置腳本非常強大的內置腳本是你要找的。

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每個單獨的文件然後建立支持語言或什麼的,然後provide小號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包保存在〜/ elisp/packages中。這意味着我可以在任何地方複製我的.emacs和〜/ elisp目錄,並立即開始工作。

1

根據我的理解,您需要一個腳本來自動檢測您的工具(如diff,grep等)在哪裏,而不是手動通過環境變量告訴您​​的.emacs。

如果您使用的是類似unix的平臺,那麼您的所有工具(如diff,grep)應該已經放在您的PATH上,並且emacs應該沒有問題找到它們。因此,在你的.emacs中,你不應該使用任何環境變量,並且直接在你的配置中輸入工具名稱。

如果您的目標是製作可在Windows上執行的便攜式.emacs,那麼您應該將所有gnuwin32 tools都放在PATH中,以便emacs可以毫無問題地找到它們。但對於Windows,您必須爲emacs命令做很多其他微小的安排才能在unix系統上正常工作。

使用像autoconf這樣的工具對於通過定製一個.emacs文件可以很好地處理的東西來說是非常耗時的。如果你有具體的事情,對於一個特定的製做,你可以寫elisp的代碼是這樣的:

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

另外,如果你想自動所有.el文件的字節編譯,你可以使用像這樣的命令這在你的外殼上:

emacs --batch -f batch-byte-compile *.el