Emacs 键绑定(bind)在自定义主模式下不起作用

标签 emacs elisp key-bindings major-mode

我正处于创建 major mode for Emacs 的早期阶段用于浏览 Stack Exchange 网络并与之交互。

涉及到几种主要模式,都具有类似于dired的一键键绑定(bind)。 .我查看了 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")

但不幸的是,这似乎完全没有效果;像任何其他普通缓冲区一样简单地编辑缓冲区。如果不是这样,我如何实现单键键绑定(bind)? (顺便说一句,我敢肯定。这里肯定发生了其他事情。)

最佳答案

你想定义 stack-network-mode使用 define-derived-mode (并使其派生自 special-mode ,例如)。

关于您的代码的其他评论:

  • 使用 ()而不是 nil对于空参数列表。
  • stack-network-next-site 需要有 (interactive)在文档字符串之后使其成为交互式命令,否则它将无法用作键绑定(bind)。

  • 如果您不想使用 special-mode ,您可以调用supress-keymap在创建您的 make-keymap 之后.

    关于Emacs 键绑定(bind)在自定义主模式下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15124824/

    相关文章:

    lisp - TextMate 有 "elisp bundle"这样的东西吗?

    emacs - 在缓冲区中输入时监听键盘事件

    Java KeyEvent 只是 ALT

    macos - Emacs 中的 'risky' 是什么?

    android - 对于 Emacs,在 Android 中使用 CTRL 键的漫长旅程

    Emacs:将功能分配给键绑定(bind),并重复按下,撤消最后一次按下并在更广泛的设置下重做

    java - 如何将键绑定(bind)附加到 JSplitPane 分隔符的向上和向下箭头?

    macros - Sublime Text 使用键绑定(bind)运行宏

    emacs - 我可以更改emacs第一栏的概念吗? (从零到一)

    emacs - 在 emacs 中添加新代码时重新缩进 lisp 代码