【问题标题】:How to unset a keybinding in a map locally to a mode?如何在本地将地图中的键绑定取消设置为模式?
【发布时间】:2014-05-15 02:19:48
【问题描述】:

我已经为修改 Emacs auto-complete 行为的函数设置了键绑定:

;; ISSUE: when I type the whole candidate string and then press [SPC], 
;; Emacs will insert two spaces.
(define-key ac-menu-map (kbd "SPC")
  (defun ac-complete-with-space ()
    "Select the candidate and append a space. Save your time for typing space."
    (interactive)
    (ac-complete)
    ;; FIXME: this auto-inserts two spaces.
    (insert " ")
    ))

...我想在ac-menu-map in org-mode only 中禁用此键绑定。

我尝试了以下方法:

;; Avoid always selecting unwanted first candidate with auto-complete 
;; when writing in org-mode.
(add-hook 'org-mode-hook
          (lambda ()
            ;; (define-key ac-menu-map (kbd "SPC") nil)
            ;; (define-key ac-menu-map (kbd "SPC") 'self-insert-command)
            ;; (setq-local ac-menu-map (delq (kbd "SPC") ac-menu-map))
            ))

不幸的是,这不会取消设置键绑定本地(即,仅在org-mode 中)。相反,它会从任何地方的ac-menu-map 中删除键绑定。

【问题讨论】:

  • 键盘映射(默认)是全局变量。如果您(define-key ac-menu-map ...) anywhere 它会影响该键盘映射 everywhere。您可以执行 juanleon 建议的操作并将密钥(无处不在)绑定到检查当前主要模式然后采取相应措施的功能;或者您可以使用 org-mode-hook 为 org-mode 缓冲区创建 ac-menu-map buffer-local,并以这种方式进行修改。

标签: emacs autocomplete elisp key-bindings


【解决方案1】:
(defun ac-complete-with-space ()
  “选择候选人并附加一个空格。节省您输入空格的时间。”
  (交互的)
  (交流完成)
  (插入 ” ”)
  )

;;注意:ac-completing-map 是 ac-menu-map 的父映射。
(define-key ac-completing-map (kbd "SPC") 'ac-complete-with-space)
(add-hook 'org-mode-hook
          (拉姆达()
            (define-key ac-menu-map (kbd "SPC") 'self-insert-command)))

【讨论】:

    【解决方案2】:

    解决问题的另一种方法是签入ac-complete-with-space 模式。如果org-mode,则调用self-insert-command,否则按照您当前的逻辑。

    【讨论】:

    • 我使用这样的代码: (add-hook 'org-mode-hook (lambda () (eval-after-load 'auto-complete (define-key ac-menu-map (kbd " SPC") 'self-insert-command)) )) 但这不起作用。
    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多