我想覆盖C-l
并使用它来M-x erase-buffer
模拟击球RET
,只有当我在m-shell-mode
. C-l
应该是它的默认值recenter-top-bottom
,否则。我该怎么做?
问问题
1193 次
3 回答
4
不知道是什么m-shell-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)
于 2012-05-31T17:29:25.503 回答
3
如果m-shell-mode
基于comint-mode
,这对于提供 shell 与另一个进程交互的许多模式都是如此,那么您可以将return
按键传递给 matlab 函数comint-send-input
。在这种情况下,下面的代码应该做你想做的事:
(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
到函数调用时处于活动状态的缓冲区的该函数。告诉 emacs在add-hook
你启动时运行第二个函数m-shell-mode
。您可以在 的主体中添加更多 m-shell-mode 自定义my-m-shell-mode
,每次启动该模式时,Emacs 都会运行所有这些自定义。
如果m-shell-mode
不是基于comint-mode
,则需要了解按下时会发生什么return
。从运行该模式的缓冲区中,键入C-h k RET
以查找绑定到返回键的函数。使用该函数而不是comint-send-input
上面的代码。
于 2012-05-31T21:32:37.993 回答
1
您可以将m-shell-mode
以下代码添加到您的钩子中:
(local-set-key (kbd "C-l") 'erase-buffer)
于 2012-05-31T17:34:44.767 回答