0

很久以前,当我编写我的 .emacs 设置 [1] 时,我使用了一个 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)
   )
)

我发生了一些事情。编译时,我访问了几个环境变量,提供了有关系统的信息,例如[2],大多数程序的全名,由使用 comint[3] 的某种模式调用。而不是读取环境变量,我可以使用一些类似 autoconf 的工具来调整 .emacs 文件,然后编译它们。

问题是 autoconf 实在是太难看了。我考虑过 cmake,但是文档很差,尤其是在构建自己的构建系统方面。我不熟悉备用系统。

建议?

[1]:为了清楚起见,.emacs 设置是指我拥有的 30 个左右的文件和两个代码子目录。更不用说几个包(在包含的时候)不是标准 emacs 发行版的一部分。

[2] 我已经将 eg 替换为 "" 因为显然很多人不知道 eg 的意思是例如。要么,要么他们不知道一个例子是什么。

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

4

3 回答 3

1

which diff?

更多细节在这里会很有用。这些环境变量是你自己设置的吗?还是您的发行版提供的东西?

有点讽刺的是,这听起来有点像 emacs 令人难以置信的强大的内置脚本是您正在寻找的。

于 2010-09-05T21:14:43.483 回答
1

我同意 jkerian:你为什么要从零件组装你的 .emacs?这就是我所做的:按语言或功能分解它并使用requireand 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是 s 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 目录复制到几乎任何地方并立即运行。

于 2010-09-06T00:30:48.670 回答
1

据我了解,您需要一个脚本来自动检测您的工具(如 diff、grep ...)在哪里,而不是通过环境变量手动告诉您的 .emacs 它们在哪里。

如果你在一个类 unix 的平台上,你所有的工具,如 diff、grep,应该已经在你的 PATH 上,并且 emacs 应该没有问题找到它们。因此,在您的 .emacs 中,您不应使用任何环境变量,而应直接将工具名称放入您的配置中。

例如,如果您的目标是制作可以在 Windows 上执行的可移植 .emacs,那么您应该将所有gnuwin32 工具也放入您的 PATH 中,以便 emacs 可以毫无问题地找到它们。但是对于 Windows,您必须做许多其他微小的安排才能使 emacs 命令像在 unix 系统上一样正常工作。

使用像 autoconf 这样的工具非常耗时,因为可以通过自定义一个 .emacs 文件来很好地处理。如果您对特定系统有特定的事情要做,您可以编写这样的 elisp 代码:

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

此外,如果你想自动编译所有 .el 文件的字节,你可以在你的 shell 上使用这样的命令:

emacs --batch -f batch-byte-compile *.el
于 2010-09-06T15:27:13.930 回答