[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search 1222012 046/332: prerequisites to allow repla
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search 1222012 046/332: prerequisites to allow replace with multiple expressions |
Date: |
Tue, 1 Dec 2020 15:48:08 -0500 (EST) |
branch: externals/el-search
commit 1222012d45a6c1a2abb11977aefec7639c541448
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
prerequisites to allow replace with multiple expressions
---
el-search.el | 37 ++++++++++++++++++++++++++-----------
1 file changed, 26 insertions(+), 11 deletions(-)
diff --git a/el-search.el b/el-search.el
index 3a6d519..05cbc74 100644
--- a/el-search.el
+++ b/el-search.el
@@ -207,6 +207,8 @@
;;
;; TODO:
;;
+;; - change replace interface to include toggle(s)
+;;
;; - detect infloops when replacing automatically (e.g. for 1 -> '(1))
;;
;; - highlight matches around point in a timer
@@ -562,8 +564,9 @@ return nil (no error)."
(defvar el-search-keep-hl nil)
-(defun el-search-hl-sexp-at-point ()
- (let ((bounds (list (point) (el-search--end-of-sexp))))
+(defun el-search-hl-sexp (&optional bounds)
+ (let ((bounds (or bounds
+ (list (point) (el-search--end-of-sexp)))))
(if (overlayp el-search-hl-overlay)
(apply #'move-overlay el-search-hl-overlay bounds)
(overlay-put (setq el-search-hl-overlay (apply #'make-overlay bounds))
@@ -632,24 +635,31 @@ The following additional pattern types are currently
defined:\n"
(ding)
nil))
(setq el-search-success t)
- (el-search-hl-sexp-at-point))))
+ (el-search-hl-sexp))))
-(defun el-search-search-and-replace-pattern (pattern replacement &optional
mapping)
+(defun el-search-search-and-replace-pattern (pattern replacement &optional
mapping splice)
(let ((replace-all nil) (nbr-replaced 0) (nbr-skipped 0) (done nil)
(el-search-keep-hl t) (opoint (point))
(get-replacement (el-search--matcher pattern replacement)))
(unwind-protect
(while (and (not done) (el-search--search-pattern pattern t))
(setq opoint (point))
- (unless replace-all (el-search-hl-sexp-at-point))
+ (unless replace-all (el-search-hl-sexp))
(let* ((read-mapping (el-search--create-read-map))
(region (list (point) (el-search--end-of-sexp)))
(substring (apply #'buffer-substring-no-properties region))
(expr (read substring))
(replaced-this nil)
(new-expr (funcall get-replacement expr))
- (to-insert (el-search--repair-replacement-layout
- (el-search--print new-expr) (append mapping
read-mapping)))
+ (get-replacement-string
+ (lambda () (if (and splice (not (listp new-expr)))
+ (error "Expression to splice in is an atom")
+ (el-search--repair-replacement-layout
+ (if splice
+ (mapconcat #'el-search--print new-expr " ")
+ (el-search--print new-expr))
+ (append mapping read-mapping)))))
+ (to-insert (funcall get-replacement-string))
(do-replace (lambda ()
(atomic-change-group
(apply #'delete-region region)
@@ -657,8 +667,8 @@ The following additional pattern types are currently
defined:\n"
(opoint (point)))
(insert to-insert)
(indent-region opoint (point))
- (goto-char opoint)
- (el-search-hl-sexp-at-point)))
+ (el-search-hl-sexp (list opoint (point)))
+ (goto-char opoint)))
(cl-incf nbr-replaced)
(setq replaced-this t))))
(if replace-all
@@ -670,8 +680,10 @@ The following additional pattern types are currently
defined:\n"
(if (or (string-match-p "\n"
to-insert)
(< 40 (length to-insert)))
"" (format " with `%s'"
to-insert))
- "? [y SPC r ! q]" )
- '(?y ?n ?r ?\ ?! ?q)))
+ "? "
+ (if splice "{splice} " "")
+ "[y SPC r ! q]" )
+ '(?y ?n ?r ?\ ?! ?q ?s)))
(?r (funcall do-replace)
nil)
(?y (funcall do-replace)
@@ -683,6 +695,9 @@ The following additional pattern types are currently
defined:\n"
(funcall do-replace))
(setq replace-all t)
t)
+ (?s (cl-callf not splice)
+ (setq to-insert (funcall
get-replacement-string))
+ nil)
(?q (setq done t)
t)))))
(unless (or done (eobp)) (el-search--skip-expression nil t)))))
- [elpa] externals/el-search 7886e33 031/332: fix el-search--repair-replacement-layout: don't move when replacing, (continued)
- [elpa] externals/el-search 7886e33 031/332: fix el-search--repair-replacement-layout: don't move when replacing, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 672def6 034/332: fix whitespace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search daa7f92 039/332: improve docs; new: el-search-defpattern; add some pattern types, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search e14236a 038/332: fix whitespace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 00d6af1 040/332: remove search wrapping functionality, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 3b5cce3 043/332: fix compiler errors and warnings, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 06af085 044/332: edit TODO list, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search ec0c3e8 053/332: el-search: new pattern type `not', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 0809f99 072/332: New user option: el-search-use-sloppy-strings, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search ba82854 022/332: rename a local variable, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1222012 046/332: prerequisites to allow replace with multiple expressions,
Stefan Monnier <=
- [elpa] externals/el-search 0af261a 050/332: el-search: some cleanup, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 3370594 060/332: el-search: New pattern type `l', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search b936a28 062/332: Go to isearch left end when starting replace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 59c6139 064/332: Complete and document what a SYMBOL in `l' matches, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 2c1cdeb 066/332: factor out minibuffer setup hook fun; treat empty input, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 02168e0 068/332: Tweak docstring of el-search--ensure-sexp-start, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d6ae854 070/332: Minor change in `string' pattern, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search a0b44dd 078/332: Improve documentation and argument names of el-search-query-replace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1864f4a 077/332: Comment and whitespace changes only, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search b5b6d83 089/332: Make query-replace accept FROM -> TO style input, Stefan Monnier, 2020/12/01