Emacs的按键绑定没有定制主要模式
我在浏览创建major mode for Emacs,并与堆栈交换网络交互的早期阶段,我的工作。Emacs的按键绑定没有定制主要模式
在它涉及到几种主要模式,全部采用一键式按键绑定类似dired
。我看了看源dired
,并提取了我认为会的工作:
(defvar stack-network-mode-map
(let ((map (make-keymap)))
(define-key map "n" 'stack-network-next-site)
(define-key map "p" 'stack-network-previous-site)
(define-key map "," 'stack-network-move-site-up)
(define-key map "." 'stack-network-move-site-down)
(define-key map "j" 'stack-network-jump-to-bookmarks)
(define-key map "\C-m" 'stack-network-do-enter-site) ; ret
(define-key map "o" 'stack-network-do-enter-site)
(define-key map "u" 'stack-network-do-profile-summary)
(define-key map "\C-uu" 'stack-network-do-profile-summary-for-user)
(define-key map "i" 'stack-network-do-inbox)
(define-key map "b" 'stack-network-toggle-bookmark)
(define-key map "?" 'stack-network-list-functions) ; [1]
(define-key map "\C-i" 'stack-network-display-details) ; tab
map)
"Keymap for Stack Exchange: Network Browser major mode")
但不幸的是,这似乎完全没有影响;缓冲区就像任何其他正常缓冲区一样简单地编辑。如果这不是他们的方式,我怎么能实现单键键控绑定? (其中,顺便说一下,我敢肯定它是。必须有别的东西怎么回事。)
你想使用define-derived-mode
定义stack-network-mode
(并使其从special-mode
获得,例如)。
你的代码的其他意见:
- 使用
()
,而不是nil
空参数列表。 - 栈网络下的网站需要有
(interactive)
文档字符串之后,使其成为一个交互式命令,否则它不会作为重点,结合工作。
如果你不想使用special-mode
,您可以创建make-keymap
后立即打电话supress-keymap
。
这确实防止缓冲区编辑(感谢'special- mode',我相信),但关键是还没有被绑定:((而且,据我所知,'()=== nil') – 2013-02-28 08:35:36
如果你想看到的代码,因为它主张,这是[这里](https://github.com/vermiculus/stack-mode/blob/71fb0081400bf71abf226fc6cb9e0382e2b7009a/elisp/stack-network-mode.el)(具体提交链接保存以供将来参考使用) – 2013-02-28 08:38:15
@vermiculus'()== = nil'成立,但它是约定使用'()'空参数列表。'nil'在这个地方看起来令人不安大多数的Emacs Lisp编程。 – lunaryorn 2013-02-28 11:54:13
您已经定义了一个键盘映射,但你还没有使用过。该变量存在但不捕获任何关键事件。
(use-local-map stack-network-mode-map)
模式的定义之前移动的stack-network-mode-map
定义。否则define-derived-mode
隐式地定义这个变量,defvar
不改变非空变量的值,所以在地图将是空的实际。
新模式都有自己稀疏的键盘映射,名为变种
-map
。define-derived-mode
使得父模式的键盘映射新地图的父母,除非变种-map
已经设置,并且已经有一个父。
需要更详细的....我打开你指的是包,它工作得很好。所有主要的模式绑定都可用(虽然未定义)。 – 2013-02-27 23:58:57
不要用'defun'定义主要模式。使用'定义衍生-mode',负责处理所有的样板给你,包括杀害局部变量,切换键映射,设置主要模式乏,运行钩等 – lunaryorn 2013-02-28 00:47:53