emacs - 仅在主模式下设置快捷键?

时间:2012-05-31 17:18:27

标签: emacs

我想覆盖C-l并使用它来执行M-x erase-buffer,然后模拟点击RET,仅当我在m-shell-mode时。 C-l应该是默认值recenter-top-bottom,否则。我该怎么做?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)

第一次定位会产生一个能够满足您需求的功能。第二个是钩子函数,它将C-l绑定到该函数,用于调用函数时处于活动状态的缓冲区。每当您启动add-hook时,m-shell-mode都会告诉emacs运行第二个函数。您可以在my-m-shell-mode的正文中添加更多m-shell模式自定义,每次启动模式时,Emacs都会运行所有这些自定义。

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

答案 2 :(得分:1)

您可以在m-shell-mode挂钩添加以下代码:

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