Commit e66d5a1c authored by Stefan Monnier's avatar Stefan Monnier

* lisp/elec-pair.el: Do modify+undo more carefully

(electric-pair-inhibit-if-helps-balance): Use the undo system
instead of undoing by hand.
parent a812ed21
Pipeline #810 passed with stage
in 51 minutes and 20 seconds
......@@ -429,20 +429,25 @@ some list calculations, finally restoring the situation as if nothing
happened."
(pcase (electric-pair-syntax-info char)
(`(,syntax ,pair ,_ ,s-or-c)
(unwind-protect
(progn
(delete-char -1)
(cond ((eq ?\( syntax)
(let* ((pair-data
(electric-pair--balance-info 1 s-or-c))
(outermost (cdr pair-data)))
(cond ((car outermost)
nil)
(t
(eq (cdr outermost) pair)))))
((eq syntax ?\")
(electric-pair--unbalanced-strings-p char))))
(insert char)))))
(catch 'done
;; FIXME: modify+undo is *very* tricky business. We used to
;; use `delete-char' followed by `insert', but this changed the
;; position some markers. The real fix would be to compute the
;; result without having to modify the buffer at all.
(atomic-change-group
(delete-char -1)
(throw
'done
(cond ((eq ?\( syntax)
(let* ((pair-data
(electric-pair--balance-info 1 s-or-c))
(outermost (cdr pair-data)))
(cond ((car outermost)
nil)
(t
(eq (cdr outermost) pair)))))
((eq syntax ?\")
(electric-pair--unbalanced-strings-p char)))))))))
(defun electric-pair-skip-if-helps-balance (char)
"Return non-nil if skipping CHAR would benefit parentheses' balance.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment