Subject: bug#17192: closed (Re: bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 07 Apr 2014 00:05:07 +0000

Your bug report

#17192: 24.4.50; python-mode's python-electric-pair-string-delimiter inserts an extra quote

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
17192: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17192
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others
From: [email-masked] (João Távora)
To: Stefan Monnier <[email-masked]>
Cc: [email-masked], [email-masked], [email-masked], Alan Mackenzie <[email-masked]>
Date: Mon, 07 Apr 2014 01:04:35 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Stefan Monnier <[email-masked]> writes:

> Just take the corresponding diffs (IIRC you can use
> "bzr merge -r116925..r116926 .../trunk" for that) and commit them into
> emacs-24.
>
> Bzr doesn't really know about cherry picking, but if you put
> "backported" into your commit message, our bzrmerge.el script
> will know that this commit is already in the trunk and will know how to
> avoid the corresponding conflicts when merging emacs-24 back into trunk.
>
>> - Three different fixes (bugs 16981,17192 and 17183) not yet pushed that
>> I think you want me to only push to emacs-24, since that will be merged
>> back to trunk later.
>
> Right.

These three I did successfully, but failed miserably in the
backporting. Oh git where art thou... Now I'm downloading a new repo
(with sharing properly setup hopefully), since I must have done
something that messed up my bzr conf, apparently I shouldn't have moved
my repo dir.

Should be done tomorrow morning, so I'll backport r116926 and r116940
then.

Subject: 24.4.50; python-mode's python-electric-pair-string-delimiter inserts an extra quote
From: [email-masked] (João Távora)
To: [email-masked]
Date: Sat, 05 Apr 2014 13:22:06 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi maintainers,

    emacs -Q
    M-x electric-pair-mode RET
    M-x python-mode RET
    M-x erase-buffer RET !
    Press double quotes (") twice

Buffer contents are 7 double quotes instead of 6, with point correctly
at 4.

This is fixed by the patch attached.
João

Using changes with id "2".
Message: python-triple-quote-fixes
 M  lisp/ChangeLog
 M  lisp/progmodes/python.el
 M  test/ChangeLog
 M  test/automated/python-tests.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog	2014-04-05 11:15:07 +0000
+++ b/lisp/ChangeLog	2014-04-05 12:15:08 +0000
@@ -1,3 +1,8 @@
+2014-04-05  João Távora  <[email-masked]>
+
+	* progmodes/python.el (python-electric-pair-string-delimiter): Fix
+	triple-quoting electricity.
+
 2014-04-04  João Távora  <[email-masked]>
 
 	* elec-pair.el:

=== modified file 'lisp/progmodes/python.el'
--- a/lisp/progmodes/python.el	2014-04-05 11:15:07 +0000
+++ b/lisp/progmodes/python.el	2014-04-05 12:15:08 +0000
@@ -3651,8 +3651,9 @@
              (let ((count 0))
                (while (eq (char-before (- (point) count)) last-command-event)
                  (cl-incf count))
-               (= count 3)))
-    (save-excursion (insert (make-string 3 last-command-event)))))
+               (= count 3))
+             (eq (char-after) last-command-event))
+    (save-excursion (insert (make-string 2 last-command-event)))))
 
 (defvar electric-indent-inhibit)

=== modified file 'test/ChangeLog'
--- a/test/ChangeLog	2014-04-05 11:15:07 +0000
+++ b/test/ChangeLog	2014-04-05 12:15:08 +0000
@@ -1,3 +1,8 @@
+2014-04-05  João Távora  <[email-masked]>
+
+	* automated/python-tests.el (python-triple-quote-pairing): New test.
+	(python-syntax-after-python-backspace): New test.
+
 2014-04-04  João Távora  <[email-masked]>
 
 	* automated/electric-tests.el (define-electric-pair-test): Don't

=== modified file 'test/automated/python-tests.el'
--- a/test/automated/python-tests.el	2014-04-05 11:15:07 +0000
+++ b/test/automated/python-tests.el	2014-04-05 12:15:08 +0000
@@ -134,6 +134,16 @@
 
 ;;; Font-lock and syntax
 
+(ert-deftest python-syntax-after-python-backspace ()
+  ;; `python-indent-dedent-line-backspace' garbles syntax
+  :expected-result :failed
+  (python-tests-with-temp-buffer
+      "\"\"\""
+    (goto-char (point-max))
+    (python-indent-dedent-line-backspace 1)
+    (should (string= (buffer-string) "\"\""))
+    (should (null (nth 3 (syntax-ppss))))))
+
 
 ;;; Indentation
 
@@ -2696,6 +2706,9 @@
         (equal (symbol-value (car ccons)) (cdr ccons)))))
     (kill-buffer buffer)))
 
+
+;;; Electricity
+
 (ert-deftest python-util-forward-comment-1 ()
   (python-tests-with-temp-buffer
    (concat
@@ -2708,6 +2721,32 @@
    (python-util-forward-comment -1)
    (should (= (point) (point-min)))))
 
+(ert-deftest python-triple-quote-pairing ()
+  (python-tests-with-temp-buffer
+      "\"\"\n"
+    (goto-char (1- (point-max)))
+    (let ((last-command-event ?\"))
+      (call-interactively 'self-insert-command))
+    (should (string= (buffer-string)
+                     "\"\"\"\"\"\"\n"))
+    (should (= (point) 4)))
+  (python-tests-with-temp-buffer
+      "\n"
+    (let ((last-command-event ?\"))
+      (dotimes (i 3)
+        (call-interactively 'self-insert-command)))
+    (should (string= (buffer-string)
+                     "\"\"\"\"\"\"\n"))
+    (should (= (point) 4)))
+  (python-tests-with-temp-buffer
+      "\"\n\"\"\n"
+    (goto-char (1- (point-max)))
+    (let ((last-command-event ?\"))
+      (call-interactively 'self-insert-command))
+    (should (= (point) (1- (point-max))))
+    (should (string= (buffer-string)
+                     "\"\n\"\"\"\n"))))
+
 
 (provide 'python-tests)