2012-05-31 28 views

回答

3

如果m-shell-mode基于comint-mode,这是许多模式,提供一个外壳来与另一个进程交互的真实,那么你可以将return按键通过功能comint-send-input传递给matlab。在这种情况下,下面的代码应该做你想做的:

(defun clear-and-return() 
    "Erases the buffer, and then passes a return to the buffer process. 
Assumes the buffer is attached to a comint process." 
    (interactive) 
    (erase-buffer) 
    (comint-send-input)) 

(defun my-m-shell-mode-hook() 
    (local-set-key (kbd "C-l") 'clear-and-return)) 

(add-hook 'm-shell-mode-hook 'my-m-shell-mode-hook) 

第一个defun使一个功能,做你想做的。第二个是钩子函数,该函数将C-l绑定到调用函数时激活的缓冲区的那个函数。 add-hook告诉emacs在你启动m-shell-mode时运行第二个函数。您可以在my-m-shell-mode的主体内添加更多的m-shell模式定制,并且每次启动模式时Emacs都会运行它们。

如果m-shell-mode不是基于comint-mode,则需要了解按return时会发生什么。从运行该模式的缓冲区中,输入C-h k RET以查找绑定到返回键的功能。在上面的代码中使用该函数而不是comint-send-input

4

不知道什么m-shell-mode是的,但如果它是一个明确的major mode,那么下面应该做的伎俩:

(require 'm-shell-mode) 
(define-key m-shell-mode-map (kbd "C-l") 'erase-buffer) 

我可以建议的替代结合,它具有相同的视觉效果,但保留周围的缓冲区内容(这可以很方便)。

(defun shell-clear-command (&optional a) 
    "\"clear\" the screen" 
    (interactive "P") 
    (recenter (or a 0))) 
(define-key m-shell-mode-map (kbd "C-l") 'shell-clear-command) 
+0

肯定是'm-shell-mode',它是一个MATLAB终端。任何方式我也可以模拟按ENTER键?基本上'erase-buffer'将清除MATLAB命令窗口;点击ENTER会弹出'>>'提示符(我知道它在那里,但我猜它是一个可视化的东西)。 –

+0

@Dang Koa,你可能想尝试的替代绑定。 –

+0

@TreyJackson,什么是shell-clear-command?我在Emacs(24..94.1)或google中没有看到。 – Tyler

1

您可以添加到您的m-shell-mode钩下面的代码:

(local-set-key (kbd "C-l") 'erase-buffer)