[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode
From: |
Stefan Monnier |
Subject: |
bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others |
Date: |
Sat, 05 Apr 2014 11:45:09 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (gnu/linux) |
>> There's something funny going on here. A minor mode's keymap should
>> normally take precedence over the major mode's keymap. (See the page
>> "Searching Keymaps" in the Elisp manual.) So why is electric-pair-mode's
>> keymap being overridden by CC Mode's here?
> You're right, but I can't figure out what.
That's because it's how remapping is works: first we lookup the key
(minor-maps, local-map, global-map), then we lookup the command to see
if it's remapped (minor-maps, local-map, global-map).
So the local-map and global-map's normal bindings take precedence over the
minor-map's remapping.
>>> Perhaps a hook in `backward-delete-char' is in order. Or the other major
>>> modes can find other ways to overload the backspace key.
>> I would say it's legitimate for a major mode to bind the backspace key, but
>> it's more questionable for a minor mode to do the same. Perhaps the minor
>> mode really ought to use defadvice rather than rebinding the key.
How 'bout
(define-key electric-pair-mode-map "\177"
`(menu-item "" electric-pair-delete-pair
:filter
,(lambda (cmd)
(let* ((prev (char-before))
(next (char-after))
(syntax-info (and prev
(electric-pair-syntax-info prev)))
(syntax (car syntax-info))
(pair (cadr syntax-info)))
(and next pair
(memq syntax '(?\( ?\" ?\$))
(eq pair next)
(if (functionp electric-pair-delete-adjacent-pairs)
(funcall electric-pair-delete-adjacent-pairs)
electric-pair-delete-adjacent-pairs)
cmd))))))
-- Stefan
- bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others, João Távora, 2014/04/05
- bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others,
Stefan Monnier <=
- bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others, João Távora, 2014/04/05
- bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others, Stefan Monnier, 2014/04/06
- bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others, João Távora, 2014/04/06
- bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others, João Távora, 2014/04/06