[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/iedit a75c44645a 031/301: fix bug with autopair and iedit-
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/iedit a75c44645a 031/301: fix bug with autopair and iedit-rect |
Date: |
Mon, 10 Jan 2022 22:58:47 -0500 (EST) |
branch: elpa/iedit
commit a75c44645ac5b27b03d8476b69595116328432e7
Author: Le Wang <le.wang@agworld.com.au>
Commit: Le Wang <le.wang@agworld.com.au>
fix bug with autopair and iedit-rect
Autopair adds a post-command hook which completes the pair. That hook runs
before our `iedit-reset-last-overlay', which means the paired delimiter
inserted will not be mirrored.
The fix is an alternative approaches, which does not rely a a post-command
hook.
fix bug with autopair and rectangle mode
Autopair adds a post-command hook which completes the pair. That hook runs
before our `iedit-reset-last-overlay', which means the paired delimiter
inserted will not be mirrored.
The fix is an alternative approaches, which does not rely a a post-command
hook.
---
iedit.el | 72 +++++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 40 insertions(+), 32 deletions(-)
diff --git a/iedit.el b/iedit.el
index 501d62ddb1..3fc474dedb 100644
--- a/iedit.el
+++ b/iedit.el
@@ -160,10 +160,10 @@ before a change is made.")
"This is buffer local variable which is the buffer substring that is going
to be changed.")
;; `iedit-occurrence-update' gets called twice when change==0 and occurrence
-;; is zero-width
+;; is zero-width (beg==end)
;; -- for front and back insertion.
-(defvar iedit-last-overlay nil
- "This is buffer local variable which records processed overlay so they don't
get processed multiple times. See code.")
+(defvar iedit-skipped-modification-once nil
+ "Variable used to skip first modification hook run when insertion against a
zero-width occurrence.")
(defvar iedit-aborting nil
"This is buffer local variable which indicates iedit-mode is aborting.")
@@ -355,11 +355,6 @@ Commands:
(concat (substring occurrence-exp 0 50) "...")
occurrence-exp)))))
-(defun iedit-reset-last-overlay ()
- "`post-command-hook' function to reset iedit-last-overlay and also remove
itself from post-command-hook."
- (remove-hook 'post-command-hook 'iedit-reset-last-overlay t)
- (setq iedit-last-overlay nil))
-
(defun iedit-reset-aborting ()
"Turning iedit-mode off and reset iedit-aborting. `iedit-done'
is postponed after the command is executed for avoiding
@@ -478,31 +473,44 @@ exit iedti mode."
(setq iedit-before-modification-string
(buffer-substring-no-properties beg end)))))
;; after modification ;; todo more ellaborate on these conditions
- (when (and (or (eq 0 change) ;; insertion
- (eq beg end) ;; deletion
- (not (string= iedit-before-modification-string
- (buffer-substring-no-properties beg end))))
- (not (eq occurrence iedit-last-overlay)))
- (setq iedit-last-overlay occurrence)
- (add-hook 'post-command-hook 'iedit-reset-last-overlay nil t)
- (let ((inhibit-modification-hooks t)
- (offset (- beg (overlay-start occurrence)))
- (value (buffer-substring beg end)))
- (save-excursion
- ;; insertion or yank
- (if (eq 0 change)
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Check if we are inserting into zero-width occurrence. ;;
+ ;; ;;
+ ;; If so, then TWO modificaiton hooks will be called -- ;;
+ ;; "insert-in-front-hooks" and "insert-behind-hooks". ;;
+ ;; ;;
+ ;; We need to run just once. ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+ (if (and (= beg (overlay-start occurrence))
+ (= end (overlay-end occurrence))
+ (= change 0)
+ (not iedit-skipped-modification-once))
+ (setq iedit-skipped-modification-once t)
+ (setq iedit-skipped-modification-once nil)
+ (when (and (or (eq 0 change) ;; insertion
+ (eq beg end) ;; deletion
+ (not (string= iedit-before-modification-string
+ (buffer-substring-no-properties beg
end)))))
+ (let ((inhibit-modification-hooks t)
+ (offset (- beg (overlay-start occurrence)))
+ (value (buffer-substring beg end)))
+ (save-excursion
+ ;; insertion or yank
+ (if (eq 0 change)
+ (dolist (like-occurrence (remove occurrence
iedit-occurrences-overlays))
+ (progn
+ (goto-char (+ (overlay-start like-occurrence) offset))
+ (insert-and-inherit value)))
+ ;; deletion
(dolist (like-occurrence (remove occurrence
iedit-occurrences-overlays))
- (progn
- (goto-char (+ (overlay-start like-occurrence) offset))
- (insert-and-inherit value)))
- ;; deletion
- (dolist (like-occurrence (remove occurrence
iedit-occurrences-overlays))
- (let* ((beginning (+ (overlay-start like-occurrence) offset))
- (ending (+ beginning change)))
- (delete-region beginning ending)
- (unless (eq beg end) ;; replacement
- (goto-char beginning)
- (insert-and-inherit value)))))))))))
+ (let* ((beginning (+ (overlay-start like-occurrence) offset))
+ (ending (+ beginning change)))
+ (delete-region beginning ending)
+ (unless (eq beg end) ;; replacement
+ (goto-char beginning)
+ (insert-and-inherit value))))))))))))
;; (elp-instrument-list '(insert delete-region goto-char
iedit-occurrence-update buffer-substring-no-properties string=
re-search-forward replace-match))
;; slowest verion:
- [nongnu] elpa/iedit 76eeb87b95 102/301: Add feekback message for iedit-restrict-function, (continued)
- [nongnu] elpa/iedit 76eeb87b95 102/301: Add feekback message for iedit-restrict-function, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 29869ebed0 118/301: Add buffer local variable iedit-occurrence-keymap, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit ec765ee0c4 018/301: implement interactive string-rectangle mode with universal argument and region selected, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit d4b9fd53ce 019/301: don't call hooks when there is only text properites change, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 7ed8e04557 021/301: Optmize iedit-hide-unmatched-lines, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit e6f558539e 025/301: fix org-mode text-property compatibility (use insert-and-inherit), ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 039c0e23ab 023/301: Postpone iedit-done after commands are excuted., ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit c5a0d4de84 028/301: fix zero-width rectangle insertion, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 13ecba138a 026/301: Merge branch 'upstream-master', ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 1d070b7d36 029/301: move init code for iedit-mode-map inside defvar, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit a75c44645a 031/301: fix bug with autopair and iedit-rect,
ELPA Syncer <=
- [nongnu] elpa/iedit 20c1075948 032/301: remove conditions on setting `iedit-before-modification-string'., ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit c4091203ea 033/301: Merge pull request #3 from lewang/master, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit b81b9d6025 034/301: Clean code., ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 17ce97381b 035/301: Clean up code, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 9b3aaa8f21 037/301: Fix occurrence from history does not exist problem, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit b9ebb768b7 190/301: Merge pull request #60 from danrharms/issue-59-hotfix, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit f7b2d60989 167/301: Make occurrence string the latest kill in the kill ring, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit c25992ef7f 199/301: Fix doc strings, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 19f35aa1a0 172/301: Change the default key binding for `iedit-rectangle-mode' to c-x-r-ret, ELPA Syncer, 2022/01/10
- [nongnu] elpa/iedit 4864e17126 010/301: Merge remote-tracking branch 'tsdh/master', ELPA Syncer, 2022/01/10