很久以前,当我编写我的.emacs setup1时,我使用shell脚本来编译和连接整个过程。这个东西现在非常陈旧和“硬壳”,所以我现在正在重写它,以取代下面的东西:
(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)
)
)我突然想到了一些事情。在编译时,我访问了几个环境变量,这些变量提供了有关系统的信息,对于example2,是使用comint3的某些模式调用的大多数程序的全名。我可以使用一些类似autoconf的工具来调整.emacs文件,然后编译它们,而不是读取环境变量。
问题是autoconf实在太难看了。我考虑过cmake,但文档非常糟糕,特别是在构建您自己的构建系统方面。我不熟悉备用系统。
有什么建议吗?
1:为了清楚起见,我所说的.emacs设置指的是我拥有的大约30个文件和两个子目录。更不用说一些包(在包含时)不是标准emacs发行版的一部分。
2我用"“替换了”“,因为很明显很多人不知道”例如“的意思。要么是这样,要么他们不知道示例是什么。
3如diff-mode和ruby-mode。
发布于 2010-09-06 05:14:43
which diff
更多的细节在这里是有用的。这些环境变量是您自己设置的吗?还是你的发行版提供的东西?
有点讽刺的是,听起来似乎emacs令人难以置信的强大的内置脚本就是你要找的。
发布于 2010-09-06 08:30:49
我同意jkerian的观点:为什么你要用部件组装你的.emacs?下面是我要做的:按语言或功能分解,并使用require和provide。我的.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/package中。这意味着我可以将我的.emacs和~/elisp目录复制到任何地方,并立即让它工作。
发布于 2010-09-06 23:27:14
据我所知,你想要一个脚本自动检测你的工具在哪里(比如diff,grep...)而不是通过环境变量手动告诉.emacs它们在哪里。
如果您使用的是类unix平台,那么您的所有工具(如diff、grep )都应该已经在您的路径上,并且emacs应该可以轻松地找到它们。因此,在您的.emacs中,您不应该使用任何环境变量并将工具名称直接放入您的配置中。
例如,如果你的目标是做一个可以在Windows上执行的可移植的.emacs,那么你应该把所有的gnuwin32 tools也放在你的路径中,这样emacs就可以毫无问题地找到它们。但是对于Windows,您必须进行许多其他细微的安排,才能使emacs命令像在unix系统上那样正常工作。
对于通过定制单个.emacs文件就可以很好地处理的事情,使用autoconf这样的工具是非常耗时的。如果您要为特定系统执行特定的操作,则可以像这样编写elisp代码:
(if (eq window-system 'w32)
(progn ... ))此外,如果您想自动化所有.el文件的字节编译,您可以在您的shell上使用如下命令:
emacs --batch -f batch-byte-compile *.elhttps://stackoverflow.com/questions/3647760
复制相似问题