From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: joaotavora@gmail.com (=?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?=) Newsgroups: gmane.emacs.bugs Subject: bug#16981: 24.3.50; electric-pair-delete-adjacent-pairs broken in c-mode, python-mode, maybe-others Date: Sat, 05 Apr 2014 12:58:36 +0100 Message-ID: <87fvlsq977.fsf@kitaj.lan> References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1396699176 5557 80.91.229.3 (5 Apr 2014 11:59:36 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 5 Apr 2014 11:59:36 +0000 (UTC) Cc: 16981@debbugs.gnu.org To: Alan Mackenzie Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Apr 05 13:59:28 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1WWPFw-0006AX-1b for geb-bug-gnu-emacs@m.gmane.org; Sat, 05 Apr 2014 13:59:28 +0200 Original-Received: from localhost ([::1]:54219 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WWPFv-0004TF-P8 for geb-bug-gnu-emacs@m.gmane.org; Sat, 05 Apr 2014 07:59:27 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58829) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WWPFe-0003pe-KY for bug-gnu-emacs@gnu.org; Sat, 05 Apr 2014 07:59:18 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WWPFX-0004tt-2K for bug-gnu-emacs@gnu.org; Sat, 05 Apr 2014 07:59:10 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:34847) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WWPFW-0004tp-VI for bug-gnu-emacs@gnu.org; Sat, 05 Apr 2014 07:59:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1WWPFW-00075T-Dd for bug-gnu-emacs@gnu.org; Sat, 05 Apr 2014 07:59:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: joaotavora@gmail.com (=?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?=) Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 05 Apr 2014 11:59:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 16981 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 16981-submit@debbugs.gnu.org id=B16981.139669912527216 (code B ref 16981); Sat, 05 Apr 2014 11:59:02 +0000 Original-Received: (at 16981) by debbugs.gnu.org; 5 Apr 2014 11:58:45 +0000 Original-Received: from localhost ([127.0.0.1]:36029 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WWPFE-00074s-Cl for submit@debbugs.gnu.org; Sat, 05 Apr 2014 07:58:45 -0400 Original-Received: from mail-we0-f174.google.com ([74.125.82.174]:35357) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WWPFB-00074i-90 for 16981@debbugs.gnu.org; Sat, 05 Apr 2014 07:58:42 -0400 Original-Received: by mail-we0-f174.google.com with SMTP id t60so4505097wes.5 for <16981@debbugs.gnu.org>; Sat, 05 Apr 2014 04:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version:content-type; bh=rgHLfe7GrWFPThBtW/y1Il4CY+uVPWGpTZ0ZE6jMweU=; b=qlGRWyDhk2Uc4sVTmCwpxOLGJxiowfGNbW+eapOmd7vOYXKalfYvZ6nZNlug7YaGQk O2dCSHqYq+6XeS92iHnFQ2L9Bn0oMEtTsA3H1JDFQFinGV2o2Q5TIkxI3fQJMzHAgOdV AXzi6OjGMkxGlL4+1ATLsojSh6mER1IAgr0yWiPKEFZrl0BuMXCpdYz6P46GfTAAmt9O jYQL1o9lCHZ95UsJc4ykHbNVJpU/u1UgP9h/mwJFWc+Iq8o5mUObNElTnuRSZNCWvP8B +uV7VENdm914vnDGbxCpZAX3IeRcB1fh97/GvOU0I2Zhw6WgnBQGVxEfSPJHybIlIkFP TUJA== X-Received: by 10.180.184.167 with SMTP id ev7mr11545608wic.55.1396699120285; Sat, 05 Apr 2014 04:58:40 -0700 (PDT) Original-Received: from kitaj.lan.yourcompany.com (66.207.108.93.rev.vodafone.pt. [93.108.207.66]) by mx.google.com with ESMTPSA id bx16sm6678714wib.13.2014.04.05.04.58.38 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 05 Apr 2014 04:58:39 -0700 (PDT) In-Reply-To: (Alan Mackenzie's message of "Thu, 13 Mar 2014 22:04:33 +0000 (UTC)") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:87765 Archived-At: Hi Alan, Sorry for the delay, I only check emacs-devel regularly, do cc me next time please if you remember. > 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. Probably has to do with remapping and translation. But if it were the other way around, you'd probably be reporting the bug :-) so it doesn't matter. >> 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. Yes, I think so too. Or both can use a (possibly excessively complicated) system of backspace-related hooks. Advice would probably work too, but do we want that in emacs? Stefan, when you suggested the rebinding originally, was it with any particular concern in mind? Why not this, just the single `delete-backward-char-before-hook'. Seems to work. Maybe also add a "don't use this in programs" to `delete-backward-char'... === modified file 'lisp/elec-pair.el' *** lisp/elec-pair.el 2014-04-04 23:31:02 +0000 --- lisp/elec-pair.el 2014-04-05 11:28:42 +0000 *************** *** 166,176 **** quotes or comments. If lookup fails here, `electric-pair-text-pairs' will be considered.") ! (defun electric-pair-backward-delete-char (n &optional killflag untabify) ! "Delete characters backward, and maybe also two adjacent paired delimiters. ! ! Remaining behavior is given by `backward-delete-char' or, if UNTABIFY is ! non-nil, `backward-delete-char-untabify'." (interactive "*p\nP") (let* ((prev (char-before)) (next (char-after)) --- 166,173 ---- quotes or comments. If lookup fails here, `electric-pair-text-pairs' will be considered.") ! (defun electric-pair-delete-pair-maybe (killflag) ! "Forward-delete pair of soon-to-be-deleted char before point." (interactive "*p\nP") (let* ((prev (char-before)) (next (char-after)) *************** *** 184,200 **** electric-pair-delete-adjacent-pairs) (memq syntax '(?\( ?\" ?\$)) (eq pair next)) ! (delete-char 1 killflag)) ! (if untabify ! (backward-delete-char-untabify n killflag) ! (backward-delete-char n killflag)))) ! ! (defun electric-pair-backward-delete-char-untabify (n &optional killflag) ! "Delete characters backward, and maybe also two adjacent paired delimiters. ! Remaining behavior is given by `backward-delete-char-untabify'." ! (interactive "*p\nP") ! (electric-pair-backward-delete-char n killflag t)) (defun electric-pair-conservative-inhibit (char) (or --- 181,189 ---- electric-pair-delete-adjacent-pairs) (memq syntax '(?\( ?\" ?\$)) (eq pair next)) ! (delete-char 1 killflag)))) ! (add-hook 'delete-backward-char-before-hook 'electric-pair-delete-pair-maybe) (defun electric-pair-conservative-inhibit (char) (or *************** *** 546,562 **** (memq (car (electric-pair-syntax-info last-command-event)) '(?\( ?\) ?\" ?\$)))) - (defvar electric-pair-mode-map - (let ((map (make-sparse-keymap))) - (define-key map [remap backward-delete-char-untabify] - 'electric-pair-backward-delete-char-untabify) - (define-key map [remap backward-delete-char] - 'electric-pair-backward-delete-char) - (define-key map [remap delete-backward-char] - 'electric-pair-backward-delete-char) - map) - "Keymap used by `electric-pair-mode'.") - ;;;###autoload (define-minor-mode electric-pair-mode "Toggle automatic parens pairing (Electric Pair mode). --- 535,540 ---- === modified file 'lisp/simple.el' *** lisp/simple.el 2014-04-02 15:14:50 +0000 --- lisp/simple.el 2014-04-05 11:27:17 +0000 *************** *** 949,954 **** --- 949,959 ---- is undefined. If DELETE is nil, just return the content as a string. If anything else, delete the region and return its content as a string.") + (defvar delete-backward-char-before-hook nil + "Hook run just before `delete-backward-char' actually deletes. + Each function in this list is passed the KILLFLAG arg to + `delete-backward-char' call.") + (defun delete-backward-char (n &optional killflag) "Delete the previous N characters (following if N is negative). If Transient Mark mode is enabled, the mark is active, and N is 1, *************** *** 984,990 **** (save-excursion (insert-char ?\s (- ocol (current-column)) nil)))) ;; Otherwise, do simple deletion. ! (t (delete-char (- n) killflag)))) (defun delete-forward-char (n &optional killflag) "Delete the following N characters (previous if N is negative). --- 989,997 ---- (save-excursion (insert-char ?\s (- ocol (current-column)) nil)))) ;; Otherwise, do simple deletion. ! (t ! (run-hook-with-args 'delete-backward-char-before-hook killflag) ! (delete-char (- n) killflag)))) (defun delete-forward-char (n &optional killflag) "Delete the following N characters (previous if N is negative).