Emacs如何在elisp中以交互式命令行模式运行命令

时间:2014-01-23 11:34:36

标签: shell emacs command interactive maxima

我是Emacs的新手。

我想在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”功能的机制,屏幕将自动拆分为两个并在第二个窗口中显示编程运行信息。如果可能的话,我仍然希望在您可以帮助我的代码中使用此功能。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

  

我想在elisp中定义一个函数来在交互式中运行命令   命令行模式(如果可能,异步)。

或许async-shell-command正在寻找C-h f async-shell-command RET以获取有关该功能的帮助。

答案 1 :(得分:0)

在commint模式下使用内置的compile功能。

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

这将打开一个新窗口,并显示正在运行的程序的输出。 Commint模式意味着编译过程是交互式的,您将能够从编译缓冲区向程序发送输入。