[英]emacs - set shortcut key only in major mode?
我想覆盖Cl
并使用它做Mx erase-buffer
然后仅当我处于m-shell-mode
时,模拟RET
击中。 Cl
应该是默认值,否则为recenter-top-bottom
。 我该怎么做?
不知道什么是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)
如果m-shell-mode
是基于comint-mode
,这是许多模式,提供一个外壳来与另一个进程交互的真实,那么你可以通过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会执行您想要的功能。 第二个是钩子函数,该钩子函数会将Cl
绑定到该函数,以使该函数在调用该函数时处于活动状态。 每当您启动m-shell-mode
时, add-hook
告诉emacs运行第二个功能。 您可以在my-m-shell-mode
主体中添加其他m-shell-mode定制,并且每次启动模式时Emacs都会运行所有定制。
如果m-shell-mode
不是基于comint-mode
,则需要找出在按return
时会发生什么。 从运行该模式的缓冲区中,键入Ch k RET
以查找绑定到返回键的函数。 使用该函数代替上面的代码中的comint-send-input
。
您可以将以下代码添加到m-shell-mode
挂钩:
(local-set-key (kbd "C-l") 'erase-buffer)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.