]> git.eshelyaron.com Git - emacs.git/commitdiff
Electric-pair-mode lets modes choose how to skip whitespace
authorJoão Távora <joaotavora@gmail.com>
Tue, 19 Jun 2018 01:18:43 +0000 (02:18 +0100)
committerJoão Távora <joaotavora@gmail.com>
Tue, 19 Jun 2018 01:19:24 +0000 (02:19 +0100)
cc-mode.el-based major-modes with stricter syntax for invalid
NL-terminated strings might choose to have electric-pair-mode skip
some of whitespace into non-string-syntax regions, for the sake of
letting electric-pair-mode chomp that whitespace and make the string
valid again.

* lisp/elec-pair.el (electric-pair-post-self-insert-function): Call it.
(electric-pair-skip-whitespace-function): New buffer-local variable.

lisp/elec-pair.el

index 97049a7d9d964a3a935c0f8ca0556e6b63610097..85c25f04692a9f7932f64eabcd639283a43f459e 100644 (file)
@@ -155,6 +155,13 @@ return value is considered instead."
                       (const :tag "Newline" ?\n))
                  (list character)))
 
+(defvar-local electric-pair-skip-whitespace-function
+  #'electric-pair--skip-whitespace
+  "Function to use to skip whitespace forward.
+Before attempting a skip, if `electric-pair-skip-whitespace' is
+non-nil, this function is called. It move point to a new buffer
+position, presumably skipping only whitespace in between.")
+
 (defun electric-pair--skip-whitespace ()
   "Skip whitespace forward, not crossing comment or string boundaries."
   (let ((saved (point))
@@ -501,7 +508,7 @@ happened."
                                                (functionp electric-pair-skip-whitespace))
                                           (funcall electric-pair-skip-whitespace)
                                         electric-pair-skip-whitespace)))
-                       (electric-pair--skip-whitespace))
+                       (funcall electric-pair-skip-whitespace-function))
                      (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
@@ -509,7 +516,7 @@ happened."
          ;; 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))
+           (funcall electric-pair-skip-whitespace-function))
          (delete-region (1- pos) (if (eq skip-whitespace-info 'chomp)
                                      (point)
                                    pos))