mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-30 04:10:54 -08:00
Make electric-pair-mode, delete-selection-mode and CC Mode cooperate.
Fixes debbugs#21275. In Emacs >= 25, let electric-pair-mode take precedence over delete-selection-mode. delsel.el (delete-selection-uses-region-p): New function, previously a lambda expression in a property value for `self-insert-command'. (top-level) Set the `delete-selection' property of `self-insert-command' to `delete-selection-uses-region-p'. progmodes/cc-cmds.el (top-level): Give the `delete-selection' property for c-electric-\(brace\|paren\) the value `delete-selection-uses-region-p' when the latter function exists.
This commit is contained in:
parent
ec07cfbee1
commit
82a3da21ff
2 changed files with 23 additions and 7 deletions
|
|
@ -231,10 +231,17 @@ See `delete-selection-helper'."
|
|||
(delete-selection-helper (and (symbolp this-command)
|
||||
(get this-command 'delete-selection)))))
|
||||
|
||||
(put 'self-insert-command 'delete-selection
|
||||
(lambda ()
|
||||
(not (run-hook-with-args-until-success
|
||||
'self-insert-uses-region-functions))))
|
||||
(defun delete-selection-uses-region-p ()
|
||||
"Return t when the current command will be using the region
|
||||
rather than having `delete-selection' delete it, nil otherwise.
|
||||
|
||||
This function is intended for use as the value of the
|
||||
`delete-selection' property of a command, and shouldn't be used
|
||||
for anything else."
|
||||
(not (run-hook-with-args-until-success
|
||||
'self-insert-uses-region-functions)))
|
||||
|
||||
(put 'self-insert-command 'delete-selection 'delete-selection-uses-region-p)
|
||||
|
||||
(put 'insert-char 'delete-selection t)
|
||||
(put 'quoted-insert 'delete-selection t)
|
||||
|
|
|
|||
|
|
@ -2853,19 +2853,28 @@ sentence motion in or near comments and multiline strings."
|
|||
|
||||
;; set up electric character functions to work with pending-del,
|
||||
;; (a.k.a. delsel) mode. All symbols get the t value except
|
||||
;; the functions which delete, which gets 'supersede.
|
||||
;; the functions which delete, which gets 'supersede, and (from Emacs
|
||||
;; 25) `c-electric-brace' and `c-electric-paren' get special handling
|
||||
;; so as to work gracefully with `electric-pair-mode'.
|
||||
(mapc
|
||||
(function
|
||||
(lambda (sym)
|
||||
(put sym 'delete-selection t) ; for delsel (Emacs)
|
||||
(put sym 'pending-delete t))) ; for pending-del (XEmacs)
|
||||
'(c-electric-pound
|
||||
c-electric-brace
|
||||
c-electric-slash
|
||||
c-electric-star
|
||||
c-electric-semi&comma
|
||||
c-electric-lt-gt
|
||||
c-electric-colon
|
||||
c-electric-colon))
|
||||
(mapc
|
||||
(function
|
||||
(lambda (sym)
|
||||
(put sym 'delete-selection (if (fboundp 'delete-selection-uses-region-p)
|
||||
'delete-selection-uses-region-p
|
||||
t))
|
||||
(put sym 'pending-delete t)))
|
||||
'(c-electric-brace
|
||||
c-electric-paren))
|
||||
(put 'c-electric-delete 'delete-selection 'supersede) ; delsel
|
||||
(put 'c-electric-delete 'pending-delete 'supersede) ; pending-del
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue