diff options
| author | João Távora | 2014-04-07 00:37:17 +0100 |
|---|---|---|
| committer | João Távora | 2014-04-07 00:37:17 +0100 |
| commit | be411138140cdcdb4e1aec682c4e41354ab709e0 (patch) | |
| tree | e2274e0a8c32f8b03638cdef485ecf82547fc799 | |
| parent | 7aecc2f6ca3842395436f111449dbdcdce494ad5 (diff) | |
| download | emacs-be411138140cdcdb4e1aec682c4e41354ab709e0.tar.gz emacs-be411138140cdcdb4e1aec682c4e41354ab709e0.zip | |
Fix electric-pair-delete-adjacent-pairs in modes binding backspace.
* lisp/elec-pair.el (electric-pair-backward-delete-char): Delete.
(electric-pair-backward-delete-char-untabify): Delete.
(electric-pair-mode-map): Bind backspace to a menu item filtering
a new `electric-pair-delete-pair' command.
(electric-pair-delete-pair): New command.
Fixes: debbugs:16981
| -rw-r--r-- | lisp/ChangeLog | 10 | ||||
| -rw-r--r-- | lisp/elec-pair.el | 62 |
2 files changed, 36 insertions, 36 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c30c02dcef3..92a221999ce 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,5 +1,15 @@ | |||
| 1 | 2014-04-06 João Távora <joaotavora@gmail.com> | 1 | 2014-04-06 João Távora <joaotavora@gmail.com> |
| 2 | 2 | ||
| 3 | Fix `electric-pair-delete-adjacent-pairs' in modes binding | ||
| 4 | backspace. (bug#16981) | ||
| 5 | * elec-pair.el (electric-pair-backward-delete-char): Delete. | ||
| 6 | (electric-pair-backward-delete-char-untabify): Delete. | ||
| 7 | (electric-pair-mode-map): Bind backspace to a menu item filtering | ||
| 8 | a new `electric-pair-delete-pair' command. | ||
| 9 | (electric-pair-delete-pair): New command. | ||
| 10 | |||
| 11 | 2014-04-06 João Távora <joaotavora@gmail.com> | ||
| 12 | |||
| 3 | * progmodes/python.el (python-electric-pair-string-delimiter): Fix | 13 | * progmodes/python.el (python-electric-pair-string-delimiter): Fix |
| 4 | triple-quoting electricity. (Bug#17192) | 14 | triple-quoting electricity. (Bug#17192) |
| 5 | 15 | ||
diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el index 2c1ea7262d3..32afcd88380 100644 --- a/lisp/elec-pair.el +++ b/lisp/elec-pair.el | |||
| @@ -166,36 +166,6 @@ return value is considered instead." | |||
| 166 | quotes or comments. If lookup fails here, `electric-pair-text-pairs' will | 166 | quotes or comments. If lookup fails here, `electric-pair-text-pairs' will |
| 167 | be considered.") | 167 | be considered.") |
| 168 | 168 | ||
| 169 | (defun electric-pair-backward-delete-char (n &optional killflag untabify) | ||
| 170 | "Delete characters backward, and maybe also two adjacent paired delimiters. | ||
| 171 | |||
| 172 | Remaining behavior is given by `backward-delete-char' or, if UNTABIFY is | ||
| 173 | non-nil, `backward-delete-char-untabify'." | ||
| 174 | (interactive "*p\nP") | ||
| 175 | (let* ((prev (char-before)) | ||
| 176 | (next (char-after)) | ||
| 177 | (syntax-info (and prev | ||
| 178 | (electric-pair-syntax-info prev))) | ||
| 179 | (syntax (car syntax-info)) | ||
| 180 | (pair (cadr syntax-info))) | ||
| 181 | (when (and next pair | ||
| 182 | (if (functionp electric-pair-delete-adjacent-pairs) | ||
| 183 | (funcall electric-pair-delete-adjacent-pairs) | ||
| 184 | electric-pair-delete-adjacent-pairs) | ||
| 185 | (memq syntax '(?\( ?\" ?\$)) | ||
| 186 | (eq pair next)) | ||
| 187 | (delete-char 1 killflag)) | ||
| 188 | (if untabify | ||
| 189 | (backward-delete-char-untabify n killflag) | ||
| 190 | (backward-delete-char n killflag)))) | ||
| 191 | |||
| 192 | (defun electric-pair-backward-delete-char-untabify (n &optional killflag) | ||
| 193 | "Delete characters backward, and maybe also two adjacent paired delimiters. | ||
| 194 | |||
| 195 | Remaining behavior is given by `backward-delete-char-untabify'." | ||
| 196 | (interactive "*p\nP") | ||
| 197 | (electric-pair-backward-delete-char n killflag t)) | ||
| 198 | |||
| 199 | (defun electric-pair-conservative-inhibit (char) | 169 | (defun electric-pair-conservative-inhibit (char) |
| 200 | (or | 170 | (or |
| 201 | ;; I find it more often preferable not to pair when the | 171 | ;; I find it more often preferable not to pair when the |
| @@ -530,14 +500,34 @@ happened." | |||
| 530 | (memq (car (electric-pair-syntax-info last-command-event)) | 500 | (memq (car (electric-pair-syntax-info last-command-event)) |
| 531 | '(?\( ?\) ?\" ?\$)))) | 501 | '(?\( ?\) ?\" ?\$)))) |
| 532 | 502 | ||
| 503 | (defun electric-pair-delete-pair (arg &optional killp) | ||
| 504 | "When between adjacent paired delimiters, delete both of them. | ||
| 505 | ARG and KILLP are passed directly to | ||
| 506 | `backward-delete-char-untabify', which see." | ||
| 507 | (interactive "*p\nP") | ||
| 508 | (delete-char 1) | ||
| 509 | (backward-delete-char-untabify arg killp)) | ||
| 510 | |||
| 533 | (defvar electric-pair-mode-map | 511 | (defvar electric-pair-mode-map |
| 534 | (let ((map (make-sparse-keymap))) | 512 | (let ((map (make-sparse-keymap))) |
| 535 | (define-key map [remap backward-delete-char-untabify] | 513 | (define-key map "\177" |
| 536 | 'electric-pair-backward-delete-char-untabify) | 514 | `(menu-item |
| 537 | (define-key map [remap backward-delete-char] | 515 | "" electric-pair-delete-pair |
| 538 | 'electric-pair-backward-delete-char) | 516 | :filter |
| 539 | (define-key map [remap delete-backward-char] | 517 | ,(lambda (cmd) |
| 540 | 'electric-pair-backward-delete-char) | 518 | (let* ((prev (char-before)) |
| 519 | (next (char-after)) | ||
| 520 | (syntax-info (and prev | ||
| 521 | (electric-pair-syntax-info prev))) | ||
| 522 | (syntax (car syntax-info)) | ||
| 523 | (pair (cadr syntax-info))) | ||
| 524 | (and next pair | ||
| 525 | (memq syntax '(?\( ?\" ?\$)) | ||
| 526 | (eq pair next) | ||
| 527 | (if (functionp electric-pair-delete-adjacent-pairs) | ||
| 528 | (funcall electric-pair-delete-adjacent-pairs) | ||
| 529 | electric-pair-delete-adjacent-pairs) | ||
| 530 | cmd))))) | ||
| 541 | map) | 531 | map) |
| 542 | "Keymap used by `electric-pair-mode'.") | 532 | "Keymap used by `electric-pair-mode'.") |
| 543 | 533 | ||