0

Emacs検索で「1 of n」の結果が見つかったというより簡単な解決策を見つけるための私の検索では、次のパッケージを思いつきました

https://github.com/nordlow/elisp/blob/master/mine/indexed-isearch.el

ただし、表示される情報はキーストローク 1 つ遅れます。これを修正するにはどうすればよいですか?私の推測では、ミニisearch-cound-messageバッファーに情報を表示する isearch ロジックの最後でミニバッファーを更新する関数を呼び出すか、更新を isearch-message-suffix に挿入する必要があります。

誰か知っていますか?

4

1 に答える 1

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-string1 文字遅れています。正しく表示するには、Cs または Cr を 2 回入力する必要があります。これにより、edit-string が isearch-string と同じになります。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)

そして、isearch-mode-end-hook私はそう挿入しました:

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

これは私にとってはうまく機能します。また、isearch-string を表示して、それぞれの瞬間に何を期待するかを知ることができます。

于 2014-08-23T21:22:21.297 に答える