.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)
答案 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中完成螺纹钢支撑 - 在这种情况下,它将是与项目一起工作的统一界面。