2013-03-31 79 views
3

有在.emacs中獲得二郎項目路徑defun,我怎麼能執行一個shell命令執行以下操作:在emacs中使用鋼筋?

cd *~/erlang-project-folder* 
make 

我用鋼筋搭建我的項目,並且有一個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) 

回答

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中完成螺紋鋼的支持 - 在這種情況下,它將成爲與項目工作相同的統一界面。

+0

嗨,@亞歷克斯,謝謝。但是'(defvar erlang-compile-function'my-inferior-erlang-compile)'報告「錯誤的類型參數:commandp,my-inferior-erlang-compile」 – goofansu

+0

啊,看起來使用劣erlang編譯來編譯erlang環境中的緩衝區,而不是執行外部shell命令。我會建議綁定一些鍵來調用編譯函數,例如'(defun my-erlang-mode-hook()(local-set-key [f9]'my-inferior-erlang-compile)) (add- hook'erlang-mode-hook'my-erlang-mode-hook)' –

+0

我編輯了代碼,添加了'(interactive)',所以這個命令將被視爲命令... –

相關問題