2010-09-05 65 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