在我的搜索中找到一个更简单的解决方案{@ 3}}我找到了以下包
"1 of n" result for Emacs search
但显示的信息延迟了一次击键。怎么解决这个问题?我的猜测是,我应该调用一些函数来更新isearch-cound-message
末尾的迷你缓冲区,或者将更新注入isearch-message-suffix,以便在迷你缓冲区中显示信息的isearch逻辑。
有人知道吗?
答案 0 :(得分:1)
(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-string提供,在输入之前是您上次使用的消息。这就是为什么在重新输入之前你会看到错误的数字。这可以很容易地纠正。
可以通过重置名为isearch-message-suffix-add
的挂钩中isearch-exit-mode
的值来更正初始错误消息。
更新:
这段代码是最好的代码。我今天看了看。编辑字符串与isearch-string
不同,但延迟了1个字符。为了获得正确的显示,需要键入C-s或C-r 2次,因为edit-string与isearch-string相同。 Isearch不会在外部环境中导出变量以具有edit-string的值。
(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)
在isearch-mode-end-hook
我插入了这样:
(setq isearch-message-suffix-add "")
(remove-hook 'isearch-update-post-hook 'isearch-display-count-matches t)
这对我很有用 - 它会显示isearch-string,以便在每个时刻知道会发生什么。