每次输入迷你缓冲区后运行命令

时间:2015-03-11 13:21:09

标签: emacs elisp

我想在Emacs中设置一种ISearch模式替换,我可以在每次输入迷你缓冲区后运行命令。有可能吗?

编辑1:

这个想法是用我自己的模式完全取代ISearch。理想情况下,我希望它具有ISearch具有的大部分功能(如在键入时突出显示结果)。要实现一些,我需要在输入每个键后运行一个命令。有没有办法在迷你缓冲区改变时触发一个功能,还是应该使用不是迷你缓冲区的东西?

编辑2:

更具体地说,基本上我希望从迷你缓冲区获取一个字符串并突出显示缓冲区中的所有匹配项,就像在ISearch模式下一样。基本上,在输入迷你缓冲区的每个字母,符号或数字之后,我希望能够识别出这种变化并运行一些任意的elisp。类似于helm识别输入和更新搜索结果的方式。

2 个答案:

答案 0 :(得分:2)

您想使用minibuffer-with-setup-hook并在设置摘要中,您想要使用post-command-hookafter-change-functions

E.g。

(defun my-update-function (beg end len)
  (let ((str (minibuffer-contents)))
    <update-search-result>))

..(minibuffer-with-setup-hook
      (lambda ()
        (add-hook 'after-change-functions #'my-update-function))
    ...(read-string ...) ...)

答案 1 :(得分:0)

请参阅变量minibuffer-exit-hook

通常,对于此类问题,请查找名称以hook(或functionfunctions)结尾的变量。使用apropos等命令查找名称中包含各种子字符串的变量(或函数)(例如-hookminibuf)。

然而,你的问题有点不清楚。你真的会使用Isearch吗,或者你打算用使用迷你缓冲器的东西取代Isearch? 请更准确地说明您在做什么。

仅供参考 - Isearch 使用迷你缓冲区(使用M-e编辑搜索字符串时除外)。


编辑1后更新:

现在我害怕你的问题过于宽泛,并因此而面临被关闭的风险。你基本上含糊地询问如何实现某种Isearch的替代品。

如果您想在每个命令后执行某些操作,请参阅post-command-hook。但请注意,几乎每次按键都是命令调用。


编辑2后更新:

在这种情况下,请考虑查看其他图书馆在这方面的工作。例如,highlight.el(例如hlt-highlight-symbol),highlight-symbol.elcolor-moccur.elIcicles(例如icicle-occur)和Helm(例如{{1} }})。其中一些(如Icicles和Helm)会在您描述时提供增量突出显示更新。其他人突出显示在迷你缓冲区中输入的给定名称(即使用helm-swoop,而不仅仅是在迷你缓冲区中输入的字符。)

但是你可能想要指定你想要的东西与这些库已经做的不同。对我来说,你的问题似乎过于宽泛。

一般情况下,Isearch等执行增量更新的内容 读取按键并相应地做出响应 。他们可以从迷你缓冲区或顶层执行此操作,但重点是他们通常不需要用户在迷你缓冲区中输入内容,使用{{1} }。他们在每次按键(或每次命令调用,例如通过RET)后响应。