【问题标题】:Run a command after every input to minibuffer每次输入到 minibuffer 后运行一个命令
【发布时间】:2015-03-11 13:21:08
【问题描述】:

我想在 Emacs 中设置一种 ISearch 模式替换,我可以在每次输入到 minibuffer 后运行一个命令。有可能吗?

编辑 1:

这个想法是用我自己的模式完全替换 ISearch。理想情况下,我希望它具有 ISearch 的大部分功能(例如在您键入时突出显示结果)。要实现一些,我需要在输入每个键后运行一个命令。有没有办法在 minibuffer 更改时触发函数,或者我应该使用不是 minibuffer 的东西?

编辑 2:

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

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

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

    例如

    (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 ...) ...)
    

    【讨论】:

    • 这似乎是我正在寻找的。你会建议我使用post-command-hookpost-self-insert-hook 吗?
    • 糟糕,我需要的是after-change-functions
    【解决方案2】:

    查看变量minibuffer-exit-hook

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

    但是,您的问题有点不清楚。你真的会使用 Isearch,还是要用使用 minibuffer 的东西来替换 Isearch? 请更准确地说明你在做什么。

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


    编辑 1 后更新:

    现在恐怕您的问题过于宽泛,因此可能会被关闭。您本质上是在模糊地询问如何实现 Isearch 的某种替代。

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


    编辑 2 后更新:

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

    但您可能希望指定与此类库已有的功能不同的功能。对我来说,您的问题似乎仍然过于宽泛。

    一般来说,诸如 Isearch 之类的东西会进行增量更新读取按键并做出相应的响应。他们可以 minibuffer 或在顶层执行此操作,但关键是他们通常不要求用户使用RET 在minibuffer 中输入某些内容。他们在每次按键(或每次命令调用,例如通过post-command-hook)后做出响应。

    【讨论】:

    • 我将编辑问题以使其更清晰,一秒钟
    猜你喜欢
    • 2010-09-16
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2012-01-18
    • 2014-08-21
    • 2018-03-21
    • 2012-03-12
    相关资源
    最近更新 更多