2014-01-23 163 views
2

我是Emacs的新手。Emacs如何在交互命令行模式下運行命令elisp

我想在elisp中定義一個函數來在交互式命令行模式下運行一個命令(如果可能的話,是異步的)。

我當前的代碼是:

(defun ma() ;run maxima batch on the current file 
    (interactive) 
    (let* 
    ((fn (buffer-file-name)) (cmd (concat "maxima -b " fn)))  
    (message "cmd:%s" cmd) 
    (shell-command cmd) 
) 
) 

的時候,我沒有破發點中的最大值代碼能正常工作。當我有中斷點「break()」時,我必須與程序進行交互。當前的shell命令功能不起作用。

我也喜歡「shell-command」功能的機制,屏幕會自動分成兩部分,並在第二個窗口中顯示編程運行信息。如果可能的話,我仍然希望可以幫助我的代碼中使用此功能。

任何幫助,將不勝感激。

+0

看起來你想重新發明imaxima:https://sites.google.com/site/imaximaimath/或http://www.emacswiki.org/emacs/MaximaMode。 – Tobias

回答

0

我想在elisp中定義一個函數,以交互式運行 命令行模式(如果可能,異步)。

也許async-shell-command是你正在尋找做C-h f async-shell-command RET幫助功能。

+0

謝謝。這樣可行。 –

0

在通勤模式下使用內置的compile功能。

(defun ma (&optional filename) 
    (interactive) 
    (compile (format "maxima -b %s" (or filename (buffer-file-name))) t)) 

這將打開一個新窗口,並向您顯示正在運行的程序的輸出。 Commint模式意味着編譯過程是交互式的,您將能夠從編譯緩衝區向程序發送輸入。