GNU bug report logs -
#17183
can't insert a quote pair before another
Previous Next
Reported by: Stefan Monnier <monnier <at> iro.umontreal.ca>
Date: Fri, 4 Apr 2014 15:05:01 UTC
Severity: normal
Found in version 24.3.50
Done: joaotavora <at> gmail.com (João Távora)
Bug is archived. No further changes may be made.
Full log
Message #8 received at 17183 <at> debbugs.gnu.org (full text, mbox):
Stefan Monnier <monnier <at> iro.umontreal.ca> writes:
> Package: Emacs
> Version: 24.3.50
> but instead I had to use C-q " twice, which was rather unpleasant.
Yes seen it. Rather unpleasant indeed. How does this look?
=== modified file 'lisp/ChangeLog'
*** lisp/ChangeLog 2014-04-04 23:31:02 +0000
--- lisp/ChangeLog 2014-04-06 01:23:51 +0000
***************
*** 1,3 ****
--- 1,11 ----
+ 2014-04-06 João Távora <joaotavora <at> gmail.com>
+
+ * elec-pair.el (electric-pair--skip-whitespace): With quote
+ syntax, ensure not outside string before insertion started. .
+ (electric-pair-post-self-insert-function): Pass char and syntax to
+ electric-pair--skip-whitespace. Save point instead of
+ `save-excursion'. (Bug#17183)
+
2014-04-04 João Távora <joaotavora <at> gmail.com>
* elec-pair.el:
=== modified file 'lisp/elec-pair.el'
*** lisp/elec-pair.el 2014-04-04 23:31:02 +0000
--- lisp/elec-pair.el 2014-04-06 01:19:47 +0000
***************
*** 151,163 ****
(const :tag "Newline" ?\n))
(list character)))
! (defun electric-pair--skip-whitespace ()
"Skip whitespace forward, not crossing comment or string boundaries."
! (let ((saved (point))
! (string-or-comment (nth 8 (syntax-ppss))))
! (skip-chars-forward (apply #'string electric-pair-skip-whitespace-chars))
! (unless (eq string-or-comment (nth 8 (syntax-ppss)))
! (goto-char saved))))
(defvar electric-pair-text-syntax-table prog-mode-syntax-table
"Syntax table used when pairing inside comments and strings.
--- 151,171 ----
(const :tag "Newline" ?\n))
(list character)))
! (defun electric-pair--skip-whitespace (char syntax)
"Skip whitespace forward, not crossing comment or string boundaries."
! (let* ((saved (point))
! (ppss (syntax-ppss))
! (string-or-comment (nth 8 ppss)))
! (unless (and
! (eq syntax ?\")
! (unwind-protect
! (progn
! (delete-char -1)
! (not (nth 3 (syntax-ppss))))
! (insert-char char)))
! (skip-chars-forward (apply #'string electric-pair-skip-whitespace-chars))
! (unless (eq string-or-comment (nth 8 (syntax-ppss)))
! (goto-char saved)))))
(defvar electric-pair-text-syntax-table prog-mode-syntax-table
"Syntax table used when pairing inside comments and strings.
***************
*** 502,521 ****
(if (functionp electric-pair-skip-self)
(funcall electric-pair-skip-self last-command-event)
electric-pair-skip-self))
! (save-excursion
(when (setq skip-whitespace-info
(if (functionp electric-pair-skip-whitespace)
(funcall electric-pair-skip-whitespace)
electric-pair-skip-whitespace))
! (electric-pair--skip-whitespace))
! (eq (char-after) last-command-event))))
;; This is too late: rather than insert&delete we'd want to only
;; skip (or insert in overwrite mode). The difference is in what
;; goes in the undo-log and in the intermediate state which might
;; be visible to other post-self-insert-hook. We'll just have to
;; live with it for now.
(when skip-whitespace-info
! (electric-pair--skip-whitespace))
(delete-region (1- pos) (if (eq skip-whitespace-info 'chomp)
(point)
pos))
--- 510,531 ----
(if (functionp electric-pair-skip-self)
(funcall electric-pair-skip-self last-command-event)
electric-pair-skip-self))
! (let ((saved (point)))
(when (setq skip-whitespace-info
(if (functionp electric-pair-skip-whitespace)
(funcall electric-pair-skip-whitespace)
electric-pair-skip-whitespace))
! (electric-pair--skip-whitespace last-command-event syntax))
! (prog1
! (eq (char-after) last-command-event)
! (goto-char saved)))))
;; This is too late: rather than insert&delete we'd want to only
;; skip (or insert in overwrite mode). The difference is in what
;; goes in the undo-log and in the intermediate state which might
;; be visible to other post-self-insert-hook. We'll just have to
;; live with it for now.
(when skip-whitespace-info
! (electric-pair--skip-whitespace last-command-event syntax))
(delete-region (1- pos) (if (eq skip-whitespace-info 'chomp)
(point)
pos))
This bug report was last modified 11 years and 74 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.