From 6602d886ed6d7965e3181db8eb55e80722f300d8 Mon Sep 17 00:00:00 2001 From: noa Date: Wed, 18 Sep 2024 09:28:19 +0800 Subject: Convert isearch configuration to use-package --- emacs/init.el | 47 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) (limited to 'emacs') diff --git a/emacs/init.el b/emacs/init.el index 8e0db1d..792397a 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -563,35 +563,24 @@ The misspelled word is taken from OVERLAY. WORD is the corrected word." (global-set-key (kbd "") 'noa/insert-date-time) -;; Isearch is good, but it has some rough edges. The easiest way forward was just to use ctrlf, which fixes most of them. But i still had some gripes with ctrlf, like that it doesn't play well with a lot of other commands and packages and the general ecosystem built around isearch. So i've tried to fix as many of the issues as i can while keeping real isearch. - -;; It makes more sense to go to the start of the match, because i start searching where i want to be. -(defun isearch-exit-at-front () - "always exit isearch, at the front of search match." - (interactive) - (isearch-exit) - (when isearch-forward - (goto-char isearch-other-end))) -(defun isearch-exit-at-end () - "Always exit isearch, at the end of search match." - (interactive) - (isearch-exit) - (when (not isearch-forward) - (goto-char isearch-other-end))) - -;; My preferred behaviour is for the point to be at the start of the match. Because the search is incremental, usually i won't finish typing something useful before exiting the search, but i always start searching at a place i can reason about. However, i can't figure out how to get this to work along with isearch-mb - -;; (define-key isearch-mb-minibuffer-map (kbd "") #'isearch-exit-at-front) -;; (define-key isearch-mb-minibuffer-map (kbd "C-") #'isearch-exit-at-end) -;; Make isearch always quit on C-g -(define-key isearch-mode-map (kbd "C-g") #'isearch-cancel) -(define-key isearch-mode-map (kbd "C-o") #'isearch-occur) -(setopt search-whitespace-regexp ".*?") -(setopt isearch-lax-whitespace t) -(setopt isearch-lazy-count t) -(setopt isearch-allow-motion t) -(setopt isearch-repeat-on-direction-change t) -(setopt isearch-wrap-pause 'no) +;; Improve incremental search +(use-package isearch + :bind (:map isearch-mode-map + ("" . noa/isearch-done-goto-start) ; always put point at the beginning of the match + ("C-g" . isearch-cancel) ; always quit on C-g + ("C-o" . isearch-occur)) + :init (defun noa/isearch-done-goto-start (&optional nopush edit) + "End isearch at the start of the match." + (interactive) + (funcall #'isearch-done nopush edit) + (when isearch-forward (goto-char isearch-other-end))) + :custom + (search-whitespace-regexp ".*?") + (isearch-lax-whitespace t) + (isearch-lazy-count t) + (isearch-allow-motion t) + (isearch-repeat-on-direction-change t) + (isearch-wrap-pause 'no)) (global-set-key (kbd "M-o") 'other-window) (global-set-key (kbd "C-x k") 'kill-current-buffer) -- cgit 1.4.1-2-gfad0