[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 99e8724 08/24: Handle replacements containing another matc
From: |
Michael Heerdegen |
Subject: |
[elpa] master 99e8724 08/24: Handle replacements containing another match |
Date: |
Thu, 19 May 2016 20:46:37 +0000 (UTC) |
branch: master
commit 99e8724cd9ce1a7e8f7596e15fc9bb76d7c3e365
Author: Michael Heerdegen <address@hidden>
Commit: Michael Heerdegen <address@hidden>
Handle replacements containing another match
---
packages/el-search/el-search.el | 37 ++++++++++++++++++++++++++++++++-----
1 file changed, 32 insertions(+), 5 deletions(-)
diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index f0d7416..1a4ca5a 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -196,9 +196,6 @@
;;
;; TODO:
;;
-;; - detect infloops when replacing automatically (e.g. for 1 -> '(1))
-;; Should we just fall back to interactive mode?
-;;
;; - implement backward searching
;;
;; - Make `el-search-pattern' accept an &optional limit, at least for
@@ -953,7 +950,8 @@ Hit any key to proceed."
(defun el-search-search-and-replace-pattern (pattern replacement &optional
splice to-input-string)
(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)))
+ (get-replacement (el-search--matcher pattern replacement))
+ (skip-matches-in-replacement 'ask))
(unwind-protect
(while (and (not done) (el-search--search-pattern pattern t))
(setq opoint (point))
@@ -969,6 +967,16 @@ Hit any key to proceed."
(get-replacement-string
(lambda () (el-search--format-replacement new-expr substring
to-input-string splice)))
(to-insert (funcall get-replacement-string))
+ (replacement-contains-another-match
+ (with-temp-buffer
+ (emacs-lisp-mode)
+ (insert to-insert)
+ (goto-char 1)
+ (el-search--skip-expression new-expr)
+ (condition-case nil
+ (progn (el-search--ensure-sexp-start)
+ (el-search--search-pattern pattern t))
+ (end-of-buffer nil))))
(do-replace (lambda ()
(atomic-change-group
(apply #'delete-region region)
@@ -1013,7 +1021,26 @@ Hit any key to proceed."
t)
(?? (ignore (read-char
el-search-search-and-replace-help-string))
nil)))))
- (unless (or done (eobp)) (el-search--skip-expression nil t)))))
+ (unless (or done (eobp))
+ (cond
+ ((not (and replaced-this replacement-contains-another-match))
+ (el-search--skip-expression nil t))
+ ((eq skip-matches-in-replacement 'ask)
+ (if (setq skip-matches-in-replacement
+ (yes-or-no-p "Match in replacement - always skip? "))
+ (forward-sexp)
+ (el-search--skip-expression nil t)
+ (when replace-all
+ (setq replace-all nil)
+ (message "Falling back to interactive mode")
+ (sit-for 3.))))
+ (skip-matches-in-replacement (forward-sexp))
+ (t
+ (el-search--skip-expression nil t)
+ (message "Replacement contains another match%s"
+ (if replace-all " - falling back to interactive mode"
""))
+ (setq replace-all nil)
+ (sit-for 3.)))))))
(el-search-hl-remove)
(goto-char opoint)
(message "Replaced %d matches%s"
- [elpa] master 3d0a12e 13/24: Fix el-search--ensure-sexp-start error at bob, (continued)
- [elpa] master 3d0a12e 13/24: Fix el-search--ensure-sexp-start error at bob, Michael Heerdegen, 2016/05/19
- [elpa] master 03dd4e7 06/24: Comment and whitespace changes only, Michael Heerdegen, 2016/05/19
- [elpa] master b885ef1 03/24: el-search--check-pattern-args: make arg TYPE a string, Michael Heerdegen, 2016/05/19
- [elpa] master 3d72d1d 11/24: Address compiler warnings, Michael Heerdegen, 2016/05/19
- [elpa] master 536fab6 15/24: Give el-search--s a more meaningful name, Michael Heerdegen, 2016/05/19
- [elpa] master 4b11cb8 09/24: Rename two functions, Michael Heerdegen, 2016/05/19
- [elpa] master 8d7b29c 21/24: Make sure not to lose the minibuffer-prompt face, Michael Heerdegen, 2016/05/19
- [elpa] master c356b2d 19/24: Rename a local variable, Michael Heerdegen, 2016/05/19
- [elpa] master bb98a1d 04/24: Rewrite replacement layout restoration, Michael Heerdegen, 2016/05/19
- [elpa] master 5f9accc 18/24: Make query-replace accept FROM -> TO style input, Michael Heerdegen, 2016/05/19
- [elpa] master 99e8724 08/24: Handle replacements containing another match,
Michael Heerdegen <=
- [elpa] master b09bb1b 16/24: Use `pp-to-string' to print replacement expression, Michael Heerdegen, 2016/05/19
- [elpa] master c835174 24/24: Improve history handling, Michael Heerdegen, 2016/05/19
- [elpa] master bace971 02/24: Rewrite `string' pattern definition, Michael Heerdegen, 2016/05/19