From 6353387835f6cb34765ac525ac3e9edf3239e589 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Tue, 19 Jun 2018 02:18:43 +0100 Subject: [PATCH] Electric-pair-mode lets modes choose how to skip whitespace 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 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el index 97049a7d9d9..85c25f04692 100644 --- a/lisp/elec-pair.el +++ b/lisp/elec-pair.el @@ -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)) -- 2.39.5