如何在isearch中绑定文本插入

时间:2012-12-27 08:49:48

标签: emacs elisp

当我在isearch(isearch-regexp以及反向变体)时,我希望M-u插入下划线。

无论

(define-key isearch-mode-map (kbd "M-u") 'insert-underscore)

,也不

(add-hook 'isearch-mode-hook
      (lambda ()
       (local-set-key (kbd "M-u") 'insert-underscore)
      ))

insert-underscore是我的函数,只需插入“_”。它可以在主框架和迷你缓冲器中工作,但我无法在isearch中工作......

谢谢!

1 个答案:

答案 0 :(得分:4)

Isearch不使用常规命令。 (kbd "_")以及其他所有人 可打印字符绑定到isearch-mode-map中的特殊命令。它的 不明显,但是当你按下a时,很多事情都发生在“isearch-mode”中 键。用新结果刷新显示,包装是可能的等等,

您必须操纵原始键盘事件才能使其正常工作。

(defun underscore ()
  (interactive)
  (isearch-unread-key-sequence (list ?_)))

(define-key isearch-mode-map (kbd "M-u") 'underscore)

请注意,此代码不健全;例如,数字前缀不起作用。

编辑:在我脑海中渗透了一段时间之后,我发现这是translation keymaps的确切用例

(define-key key-translation-map (kbd "M-u") (kbd "_"))

Emacs不是很盛大吗?