在emacs中使用rebar?

时间:2013-03-31 06:38:55

标签: emacs erlang

.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)

1 个答案:

答案 0 :(得分: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

P.S。我希望,我会找到一些空闲时间,并将在EDE中完成螺纹钢支撑 - 在这种情况下,它将是与项目一起工作的统一界面。