From 58c35e677e11f5c04a702b42ac753c80c8955089 Mon Sep 17 00:00:00 2001 From: Vasilij Schneidermann Date: Fri, 21 Apr 2023 17:47:46 +0200 Subject: Add multi-isearch interop This implements the much requested feature of C-s behaving similarly to how it does in info buffers. Many thanks to Madhu for discovering multi-isearch.el (AKA misearch). --- nov.el | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'nov.el') diff --git a/nov.el b/nov.el index 73521b3..d814727 100644 --- a/nov.el +++ b/nov.el @@ -991,5 +991,29 @@ See also `nov-bookmark-make-record'." (setq imenu-create-index-function 'nov-imenu-create-index)) (add-hook 'nov-mode-hook 'nov-imenu-setup) + +;;; multi-isearch interop + +(defun nov-misearch-next-buffer (buffer wrap) + (if isearch-forward + (cond + ((< nov-documents-index (1- (length nov-documents))) + (nov-goto-document (1+ nov-documents-index)) + (current-buffer)) + (wrap + (nov-goto-document 0) + nil)) + (cond + ((> nov-documents-index 0) + (nov-goto-document (1- nov-documents-index)) + (current-buffer)) + (wrap + (nov-goto-document (1- (length nov-documents))) + nil)))) + +(defun nov-misearch-setup () + (setq-local multi-isearch-next-buffer-function #'nov-misearch-next-buffer)) +(add-hook 'nov-mode-hook #'nov-misearch-setup) + (provide 'nov) ;;; nov.el ends here -- cgit v1.2.3