在emacs中使用钢筋?

在emacs中使用钢筋?,emacs,erlang,Emacs,Erlang,在.emacs中有一个defun来获取erlang项目路径,我如何执行shell命令来执行以下操作: cd *~/erlang-project-folder* make 我正在使用钢筋来构建我的项目,并且有一个Makefile来完成一切 我可以通过重写erlang编译函数来编译,但我不熟悉Emacs Lisp,请帮助 这是我的.emacs: (defun erlang-project-dir () (let* ((src-path (file-name-directory (buffer-

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

cd *~/erlang-project-folder*
make
我正在使用钢筋来构建我的项目,并且有一个Makefile来完成一切

我可以通过重写erlang编译函数来编译,但我不熟悉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)

与其依赖目录结构,不如尝试定位项目根目录中的
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
更好


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

Hi,@Alex,谢谢。但是
(defvar erlang compile函数'my subsier erlang compile)
报告了“错误类型参数:commandp,my subsier erlang compile”啊,看起来subsier erlang compile是用来在erlang环境中编译缓冲区的,而不是执行外部shell命令。我建议绑定一些键来调用编译函数,例如,
(defun my erlang mode hook()(local set key[f9]'my subsier erlang compile))(添加hook'erlang mode hook'my erlang mode hook)
我编辑了代码,向其中添加了
(交互式)
,所以这个命令将被视为命令…非常感谢你的完美回答。它运行完美:)