diff options
| author | João Távora | 2018-06-19 02:18:43 +0100 |
|---|---|---|
| committer | João Távora | 2018-06-19 02:19:24 +0100 |
| commit | 6353387835f6cb34765ac525ac3e9edf3239e589 (patch) | |
| tree | 22119b3a67890a65ef2f837cca1b242e2e11a5b8 | |
| parent | 5498acb5a2b4a19060d17c0e2ce0aec36ee684f9 (diff) | |
| download | emacs-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.el | 11 |
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. | ||
| 161 | Before attempting a skip, if `electric-pair-skip-whitespace' is | ||
| 162 | non-nil, this function is called. It move point to a new buffer | ||
| 163 | position, 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)) |