3

在 .emacs 中有一个defun获取 erlang 项目路径的内容,我如何执行 shell 命令来执行以下操作:

cd *~/erlang-project-folder*
make

我正在使用 rebar 来构建我的项目,并且有一个 Makefile 可以完成所有工作。

我可以通过覆盖来编译erlang-compile-function,但我不熟悉 Emacs Lisp,请帮忙。

这是我的 .emacs:

(defun erlang-project-dir ()
  (let* ((src-path (file-name-directory (buffer-file-name)))
         (pos (string-match "/src/" src-path)))
    (if pos (substring src-path 0 (+ 1 pos)) src-path)))

;; there is an error: wrong type argument: commandp
(defun my-inferior-erlang-compile ()
  (shell-command.
    (concat (concat (concat "cd" erlang-project-dir) "; make"))))

(defvar erlang-compile-function 'my-inferior-erlang-compile)
4

1 回答 1

3

与其依赖目录结构,不如尝试找到rebar.config项目根目录中的文件。这可以通过以下代码实现:

(defun my-find-rebar-root ()
  (let ((dir (locate-dominating-file default-directory "rebar.config")))
    (or dir default-directory)))

之后,您可以使用此函数进行编译:

(defun my-inferior-erlang-compile ()
  (interactive)
  (let ((default-directory (my-find-rebar-root)))
    (compile "make")))

虽然,我不确定make这里的命令是否正确 - 也许使用它会更好rebar compile

PS 我希望,我能找到一些空闲时间,并完成 EDE 中的钢筋支持 - 在这种情况下,它将是与项目工作相同的统一界面。

于 2013-03-31T08:29:02.647 回答