【问题标题】:Disabling prefix key binding禁用前缀键绑定
【发布时间】:2011-09-22 09:39:28
【问题描述】:

在emacs的shell模式下,当前退出shell模式的键绑定('comint-interrupt-subjob)是"\C-c \C-c",我想把它改成"\C-c",和普通linux shell一样。我试过了

(add-hook 'shell-mode-hook '(lambda ()
  (local-set-key "\C-c" 'comint-interrupt-subjob)
))

但它没有工作。可能我需要禁用分配给"\C-c" 的前缀。我该怎么做?

【问题讨论】:

    标签: shell emacs key-bindings emacs23


    【解决方案1】:

    试试这个:

    (eval-after-load "shell"
      '(define-key shell-mode-map (kbd "C-c") 'comint-interrupt-subjob))
    

    一般来说,当您定义键时,您应该在特定的键映射中定义它们,而不是仅仅希望 local-set-key 做您想要的。

    注意:我更喜欢使用kbd 来描述键,你的"\C-c" 可以正常工作。

    【讨论】:

    • 再次感谢您。很高兴了解kbd。我试过了,但是在“\C-”之后,它似乎还在等待继续,这意味着后缀仍然有效。任何想法为什么会这样?
    【解决方案2】:
    (define-key (current-local-map) "^C" 'comint-interrupt-subjob)
    

    这将在没有本地设置键的错误检查的情况下完成工作

    【讨论】:

    • 我试过这个,但它返回Wrong type argument: keymapp, nil
    • @sawa: 你用的是什么版本的emacs?它在 Emacs 23.3.1 中对我来说很好。请注意 ^C 是文字 ^C(意思是类型 ^Q^C),或者你可以使用 Trey 描述的 (kbd "C-c") 东西。
    • 我在 23.2 上尝试过,我升级到 23.3。这一次,Trey 的解决方案奏效了,但你的却没有。无论如何感谢您的帮助。常说emacs的bug少,我感觉正好相反。
    • 原来是一个名为“tabbarl.el”的库在干扰。问题解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多