Emacs 在isearch Update post钩子中更新微缓冲区

Emacs 在isearch Update post钩子中更新微缓冲区,emacs,elisp,minibuffer,isearch,Emacs,Elisp,Minibuffer,Isearch,在我寻找一个更简单的解决方案的过程中,我提出了以下程序包 但显示的信息延迟一次按键。你如何解决这个问题?我的猜测是,我应该调用一些函数来更新isearch cond message末尾的小缓冲区,或者将更新注入到isearch message后缀中,以更快地将信息显示在小缓冲区中的isearch逻辑 有人知道吗 (defun isearch-count-message () (when isearch-success (let* ((string isearch-string))

在我寻找一个更简单的解决方案的过程中,我提出了以下程序包

但显示的信息延迟一次按键。你如何解决这个问题?我的猜测是,我应该调用一些函数来更新
isearch cond message
末尾的小缓冲区,或者将更新注入到isearch message后缀中,以更快地将信息显示在小缓冲区中的isearch逻辑

有人知道吗

(defun isearch-count-message ()
  (when isearch-success
   (let* ((string isearch-string))
     (when (>= (length string) 1)
       (let ((before (count-matches string (point-min) (point)))
             (after (count-matches string (point) (point-max))))
         (setq isearch-message-suffix-add
               (propertize (format " (%d of %d)"
                                   before
                                   (+ before
                                      after))
                           'face 'shadow)))))))

(add-hook 'isearch-update-post-hook 'isearch-count-message)
初始消息由isearch字符串提供,在键入之前,它就是您上次使用的字符串。这就是为什么在重新输入之前你会看到一个错误的号码。这很容易纠正

通过重置名为
isearch exit mode
的钩子中的
isearch message suffix add
值,可以更正初始错误消息

更新:

这段代码是最好的。我今天看了。编辑字符串与isearch字符串不同,但延迟了1个字符。为了获得正确的显示,需要键入C-s或C-r两次,使编辑字符串与isearch字符串相同。Isearch不会在外部环境中导出值为“编辑字符串”的变量

(defun isearch-display-count-matches ()
  (if isearch-just-started
      (setq isearch-message-suffix-add "")
      (let ((before (count-matches isearch-string (point-min) (point)))
            (after (count-matches isearch-string (point) (point-max))))
        (setq isearch-message-suffix-add
              (propertize (format " -%s- (%d of %d)" isearch-string
                                  before (+ before after))
                          'face 'isearch-face)))))

(add-hook 'isearch-update-post-hook 'isearch-display-count-matches 'end t)

I搜索模式下,插入端钩
I,以便:

(setq isearch-message-suffix-add "")
(remove-hook 'isearch-update-post-hook 'isearch-display-count-matches t)

这对我来说很好——它显示isearch字符串,以了解在每个时刻都会发生什么。

我在有或没有
.el
扩展名的系统上找不到
isearch-exit-mode-conf.el
。您是拼错了符号还是指软件包文件?对不起,没有
.el
-conf
:)。这对我来说:)
i搜索模式结束钩子
也许
C-u M-x apropos变量
^isearch.*hook$
RET
(Emacs 24.3.1)是。可能是的。我没有仔细检查源代码,因为想法很清楚。在该钩子中将变量isearch message suffix设置为add to nil或空字符串“”。