]> code.delx.au - gnu-emacs/blobdiff - lisp/electric.el
Do not prompt twice to save a buffer
[gnu-emacs] / lisp / electric.el
index bef5bb9fec79acefae170eef2076638a6342efad..e2896010405e1665d50084ab369ef7cd4068111b 100644 (file)
@@ -1,6 +1,6 @@
 ;;; electric.el --- window maker and Command loop for `electric' modes
 
-;; Copyright (C) 1985-1986, 1995, 2001-2015 Free Software Foundation,
+;; Copyright (C) 1985-1986, 1995, 2001-2016 Free Software Foundation,
 ;; Inc.
 
 ;; Author: K. Shane Hartman
@@ -417,14 +417,17 @@ The variable `electric-layout-rules' says when and how to insert newlines."
 
 (defcustom electric-quote-comment t
   "Non-nil means to use electric quoting in program comments."
+  :version "25.1"
   :type 'boolean :safe 'booleanp :group 'electricity)
 
 (defcustom electric-quote-string nil
   "Non-nil means to use electric quoting in program strings."
+  :version "25.1"
   :type 'boolean :safe 'booleanp :group 'electricity)
 
 (defcustom electric-quote-paragraph t
   "Non-nil means to use electric quoting in text paragraphs."
+  :version "25.1"
   :type 'boolean :safe 'booleanp :group 'electricity)
 
 (defun electric--insertable-p (string)
@@ -434,17 +437,22 @@ The variable `electric-layout-rules' says when and how to insert newlines."
                                       nil string))))
 
 (defun electric-quote-post-self-insert-function ()
-  "Function that ‘electric-quote-mode’ adds to ‘post-self-insert-hook’.
+  "Function that `electric-quote-mode' adds to `post-self-insert-hook'.
 This requotes when a quoting key is typed."
   (when (and electric-quote-mode
              (memq last-command-event '(?\' ?\`)))
     (let ((start
-           (if comment-start
+           (if (and comment-start comment-use-syntax)
                (when (or electric-quote-comment electric-quote-string)
-                 (let ((syntax (syntax-ppss)))
-                   (and (or (and electric-quote-comment (nth 4 syntax))
+                 (let* ((syntax (syntax-ppss))
+                        (beg (nth 8 syntax)))
+                   (and beg
+                        (or (and electric-quote-comment (nth 4 syntax))
                             (and electric-quote-string (nth 3 syntax)))
-                        (nth 8 syntax))))
+                        ;; Do not requote a quote that starts or ends
+                        ;; a comment or string.
+                        (eq beg (nth 8 (save-excursion
+                                         (syntax-ppss (1- (point)))))))))
              (and electric-quote-paragraph
                   (derived-mode-p 'text-mode)
                   (or (eq last-command-event ?\`)
@@ -486,11 +494,11 @@ enable the mode if ARG is omitted or nil.
 When enabled, as you type this replaces \\=` with \\=‘, \\=' with \\=’,
 \\=`\\=` with “, and \\='\\=' with ”.  This occurs only in comments, strings,
 and text paragraphs, and these are selectively controlled with
-‘electric-quote-comment’, ‘electric-quote-string’, and
-‘electric-quote-paragraph’.
+`electric-quote-comment', `electric-quote-string', and
+`electric-quote-paragraph'.
 
 This is a global minor mode.  To toggle the mode in a single buffer,
-use ‘electric-quote-local-mode’."
+use `electric-quote-local-mode'."
   :global t :group 'electricity
   :initialize 'custom-initialize-delay
   :init-value nil
@@ -507,7 +515,7 @@ use ‘electric-quote-local-mode’."
 
 ;;;###autoload
 (define-minor-mode electric-quote-local-mode
-  "Toggle ‘electric-quote-mode’ only in this buffer."
+  "Toggle `electric-quote-mode' only in this buffer."
   :variable (buffer-local-value 'electric-quote-mode (current-buffer))
   (cond
    ((eq electric-quote-mode (default-value 'electric-quote-mode))