在寻找比找到"1 of n" result for Emacs search更简单的解决方案时,我想出了以下包
https://github.com/nordlow/elisp/blob/master/mine/indexed-isearch.el
但是所显示的信息被延迟了一个击键。如何解决这个问题?我的猜测是,我应该调用某个函数来更新isearch-cound-message末尾的微型缓冲区,或者在显示微型缓冲区中的信息的isearch逻辑之前将更新注入到isearch-message-suffix。
有人知道吗?
发布于 2014-08-24 05:22:21
(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-exit-mode的钩子中重置isearch-message-suffix-add的值来纠正。
更新:
这段代码是最好的。我今天看过了。编辑字符串与isearch-string不同,但它被延迟了1个字符。为了有一个正确的显示,需要键入C-s或C-r两次,以使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,以了解在每个时刻要期待什么。
https://stackoverflow.com/questions/25465944
复制相似问题