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或空字符串“”。