aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Távora2018-06-19 02:18:43 +0100
committerJoão Távora2018-06-19 02:19:24 +0100
commit6353387835f6cb34765ac525ac3e9edf3239e589 (patch)
tree22119b3a67890a65ef2f837cca1b242e2e11a5b8
parent5498acb5a2b4a19060d17c0e2ce0aec36ee684f9 (diff)
downloademacs-6353387835f6cb34765ac525ac3e9edf3239e589.tar.gz
emacs-6353387835f6cb34765ac525ac3e9edf3239e589.zip
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.
-rw-r--r--lisp/elec-pair.el11
1 files 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."
155 (const :tag "Newline" ?\n)) 155 (const :tag "Newline" ?\n))
156 (list character))) 156 (list character)))
157 157
158(defvar-local electric-pair-skip-whitespace-function
159 #'electric-pair--skip-whitespace
160 "Function to use to skip whitespace forward.
161Before attempting a skip, if `electric-pair-skip-whitespace' is
162non-nil, this function is called. It move point to a new buffer
163position, presumably skipping only whitespace in between.")
164
158(defun electric-pair--skip-whitespace () 165(defun electric-pair--skip-whitespace ()
159 "Skip whitespace forward, not crossing comment or string boundaries." 166 "Skip whitespace forward, not crossing comment or string boundaries."
160 (let ((saved (point)) 167 (let ((saved (point))
@@ -501,7 +508,7 @@ happened."
501 (functionp electric-pair-skip-whitespace)) 508 (functionp electric-pair-skip-whitespace))
502 (funcall electric-pair-skip-whitespace) 509 (funcall electric-pair-skip-whitespace)
503 electric-pair-skip-whitespace))) 510 electric-pair-skip-whitespace)))
504 (electric-pair--skip-whitespace)) 511 (funcall electric-pair-skip-whitespace-function))
505 (eq (char-after) last-command-event)))) 512 (eq (char-after) last-command-event))))
506 ;; This is too late: rather than insert&delete we'd want to only 513 ;; This is too late: rather than insert&delete we'd want to only
507 ;; skip (or insert in overwrite mode). The difference is in what 514 ;; skip (or insert in overwrite mode). The difference is in what
@@ -509,7 +516,7 @@ happened."
509 ;; be visible to other post-self-insert-hook. We'll just have to 516 ;; be visible to other post-self-insert-hook. We'll just have to
510 ;; live with it for now. 517 ;; live with it for now.
511 (when skip-whitespace-info 518 (when skip-whitespace-info
512 (electric-pair--skip-whitespace)) 519 (funcall electric-pair-skip-whitespace-function))
513 (delete-region (1- pos) (if (eq skip-whitespace-info 'chomp) 520 (delete-region (1- pos) (if (eq skip-whitespace-info 'chomp)
514 (point) 521 (point)
515 pos)) 522 pos))