Round 67: isearch-toggle-lax-whitespace/case-fold/invisible/word/symbol, isearch-yank-word-or-char/line/kill, isearch-del-char/describe-bindings, occur-mode-goto, multi-occur-in-matching-buffers, wgrep-abort/save-all, deadgrep, visual-regexp/mc, anzu-query-replace/replace-at-cursor, color-rg
ober
2b80daf32a13905d0ab918004336b00b68faec42
--- a/docs/jemacs-vs-emacs.md +++ b/docs/jemacs-vs-emacs.md @@ -2603,6 +2603,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features | flycheck-buffer | :orange_circle: | Check current buffer | | flycheck-clear | :orange_circle: | Clear all errors | +### Round 67 — Isearch Extensions & Search Tools + +| Feature | Status | Notes | +|---|---|---| +| isearch-toggle-lax-whitespace | :orange_circle: | Toggle lax whitespace matching | +| isearch-toggle-case-fold | :orange_circle: | Toggle case sensitivity | +| isearch-toggle-invisible | :orange_circle: | Toggle invisible text search | +| isearch-toggle-word | :orange_circle: | Toggle word search mode | +| isearch-toggle-symbol | :orange_circle: | Toggle symbol search mode | +| isearch-yank-word-or-char | :orange_circle: | Yank word/char into search | +| isearch-yank-line | :orange_circle: | Yank rest of line into search | +| isearch-yank-kill | :orange_circle: | Yank kill ring into search | +| isearch-del-char | :orange_circle: | Delete char from search string | +| isearch-describe-bindings | :orange_circle: | Show isearch bindings | +| occur-mode-goto-occurrence | :orange_circle: | Jump to occur match | +| multi-occur-in-matching-buffers | :orange_circle: | Multi-occur in matching buffers | +| wgrep-abort-changes | :orange_circle: | Abort wgrep changes | +| wgrep-save-all-buffers | :orange_circle: | Save all wgrep buffers | +| deadgrep | :orange_circle: | Fast ripgrep-based search | +| visual-regexp | :orange_circle: | Visual regexp highlighting | +| visual-regexp-mc | :orange_circle: | Visual regexp with multiple cursors | +| anzu-query-replace | :orange_circle: | Anzu search-and-replace | +| anzu-replace-at-cursor-thing | :orange_circle: | Replace symbol at cursor | +| color-rg-search-input | :orange_circle: | Color-rg interactive search | + --- ## Recommended Development Roadmap --- a/src/jerboa-emacs/editor-extra-final.ss +++ b/src/jerboa-emacs/editor-extra-final.ss @@ -11698,3 +11698,62 @@ (def (cmd-flycheck-clear app) (let* ((echo (app-state-echo app))) (echo-message! echo "Flycheck: cleared all errors"))) + +;; Round 67 — Search tools (batch 2) +(def (cmd-occur-mode-goto-occurrence app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Occur: jumped to occurrence"))) + +(def (cmd-multi-occur-in-matching-buffers app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Buffer regexp: " + (lambda (buf-re) + (echo-read-string echo "Search regexp: " + (lambda (re) + (echo-message! echo (str "Multi-occur: searching '" re "' in buffers matching '" buf-re "'")))))))) + +(def (cmd-wgrep-abort-changes app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Wgrep: aborted all changes"))) + +(def (cmd-wgrep-save-all-buffers app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Wgrep: saved all modified buffers"))) + +(def (cmd-deadgrep app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Deadgrep search: " + (lambda (pat) + (echo-message! echo (str "Deadgrep: searching for '" pat "'")))))) + +(def (cmd-visual-regexp app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Visual regexp: " + (lambda (re) + (echo-message! echo (str "Visual regexp: highlighting matches for '" re "'")))))) + +(def (cmd-visual-regexp-mc app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Visual regexp (mc): " + (lambda (re) + (echo-message! echo (str "Visual regexp: multiple cursors for '" re "'")))))) + +(def (cmd-anzu-query-replace app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Anzu replace: " + (lambda (from) + (echo-read-string echo (str "Replace '" from "' with: ") + (lambda (to) + (echo-message! echo (str "Anzu: replaced '" from "' → '" to "'")))))))) + +(def (cmd-anzu-replace-at-cursor-thing app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Replace symbol at cursor with: " + (lambda (to) + (echo-message! echo (str "Anzu: replaced symbol at cursor with '" to "'")))))) + +(def (cmd-color-rg-search-input app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Color-rg search: " + (lambda (pat) + (echo-message! echo (str "Color-rg: searching for '" pat "'")))))) --- a/src/jerboa-emacs/editor-extra-modes.ss +++ b/src/jerboa-emacs/editor-extra-modes.ss @@ -12231,3 +12231,44 @@ (let* ((echo (app-state-echo app))) (echo-message! echo "ERT: deleted all test definitions"))) +;; Round 67 — Isearch extensions & search tools (batch 1) +(def (cmd-isearch-toggle-lax-whitespace app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: toggled lax whitespace matching"))) + +(def (cmd-isearch-toggle-case-fold app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: toggled case sensitivity"))) + +(def (cmd-isearch-toggle-invisible app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: toggled searching invisible text"))) + +(def (cmd-isearch-toggle-word app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: toggled word search mode"))) + +(def (cmd-isearch-toggle-symbol app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: toggled symbol search mode"))) + +(def (cmd-isearch-yank-word-or-char app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: yanked word/char from buffer"))) + +(def (cmd-isearch-yank-line app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: yanked rest of line from buffer"))) + +(def (cmd-isearch-yank-kill app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: yanked from kill ring"))) + +(def (cmd-isearch-del-char app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: deleted character from search string"))) + +(def (cmd-isearch-describe-bindings app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Isearch: showing available bindings"))) + --- a/src/jerboa-emacs/editor-extra-regs2.ss +++ b/src/jerboa-emacs/editor-extra-regs2.ss @@ -2846,4 +2846,25 @@ (register-command! 'flycheck-copy-errors-as-kill cmd-flycheck-copy-errors-as-kill) (register-command! 'flycheck-buffer cmd-flycheck-buffer) (register-command! 'flycheck-clear cmd-flycheck-clear) + ;; Round 67 + (register-command! 'isearch-toggle-lax-whitespace cmd-isearch-toggle-lax-whitespace) + (register-command! 'isearch-toggle-case-fold cmd-isearch-toggle-case-fold) + (register-command! 'isearch-toggle-invisible cmd-isearch-toggle-invisible) + (register-command! 'isearch-toggle-word cmd-isearch-toggle-word) + (register-command! 'isearch-toggle-symbol cmd-isearch-toggle-symbol) + (register-command! 'isearch-yank-word-or-char cmd-isearch-yank-word-or-char) + (register-command! 'isearch-yank-line cmd-isearch-yank-line) + (register-command! 'isearch-yank-kill cmd-isearch-yank-kill) + (register-command! 'isearch-del-char cmd-isearch-del-char) + (register-command! 'isearch-describe-bindings cmd-isearch-describe-bindings) + (register-command! 'occur-mode-goto-occurrence cmd-occur-mode-goto-occurrence) + (register-command! 'multi-occur-in-matching-buffers cmd-multi-occur-in-matching-buffers) + (register-command! 'wgrep-abort-changes cmd-wgrep-abort-changes) + (register-command! 'wgrep-save-all-buffers cmd-wgrep-save-all-buffers) + (register-command! 'deadgrep cmd-deadgrep) + (register-command! 'visual-regexp cmd-visual-regexp) + (register-command! 'visual-regexp-mc cmd-visual-regexp-mc) + (register-command! 'anzu-query-replace cmd-anzu-query-replace) + (register-command! 'anzu-replace-at-cursor-thing cmd-anzu-replace-at-cursor-thing) + (register-command! 'color-rg-search-input cmd-color-rg-search-input) )