From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.devel Subject: [PATCH] Ignore escape characters for context-sensitive quotes (Bug#29812) Date: Sun, 31 Dec 2017 17:51:04 +0100 Message-ID: <20171231165104.68136-1-phst@google.com> References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1514739015 27297 195.159.176.226 (31 Dec 2017 16:50:15 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 31 Dec 2017 16:50:15 +0000 (UTC) Cc: Philipp Stephani To: emacs-devel@gnu.org, 29812@debbugs.gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Dec 31 17:50:11 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eVgoK-0006df-Us for ged-emacs-devel@m.gmane.org; Sun, 31 Dec 2017 17:50:09 +0100 Original-Received: from localhost ([::1]:44964 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eVgqJ-0000gx-Vr for ged-emacs-devel@m.gmane.org; Sun, 31 Dec 2017 11:52:12 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48777) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eVgpX-0000fO-Jp for emacs-devel@gnu.org; Sun, 31 Dec 2017 11:51:24 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eVgpS-000179-KH for emacs-devel@gnu.org; Sun, 31 Dec 2017 11:51:23 -0500 Original-Received: from mail-wm0-x22e.google.com ([2a00:1450:400c:c09::22e]:42631) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eVgpS-00015s-Dl for emacs-devel@gnu.org; Sun, 31 Dec 2017 11:51:18 -0500 Original-Received: by mail-wm0-x22e.google.com with SMTP id b141so8625496wme.1 for ; Sun, 31 Dec 2017 08:51:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LD2PFd6hIdb+aUao2hLk6kKsbceC6nILivwqsvImQHo=; b=hvm+YturBfWX2iYDvq1RwQNtjixLpWtZINBhVQlU/uZ9w8HMy5MS3CSsDKdmX3gcP0 GFO2q08BL4wv1XUfNL0Q3LKWKmEcdS9K8JIg31hgYqXW3SPtHVHCqLq8rH8zspI2jpaD +Sn0le9yK8foh2O0ao2vqb0D/sXkmCdQIXIngGu6y1dWP9r4u6cB7Hf/WuKwS9Wg4CvP EIGl5UGYGgefOUf7S9GS3T/bAvGWYKk7RCpsyL9qZFLaSMgtRun5RBahtiE14EgtK5UW 9lDXhhhD1Mztjab7xDx6da1ta9LWFEknnBXfSVnicMlJQ+v8K1jEvzkzW5w8oQDYKe5Y h7dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LD2PFd6hIdb+aUao2hLk6kKsbceC6nILivwqsvImQHo=; b=kYloXh2XeRwx7KP3dxVido8hRMm/rw6aoWLEkGDAVDD7PRItdIrpO3NSkfVQUtl7Rr ic7VoQ6MsAvWWoTivXJDwx6RSBtlg8vblo0rtP3CH0rJkq2i+nXNUAbtOiXj7nGMSZZC tMjLyWQZRHBMMoAfhsdB1TtHHMdjDDBwSJvhT+n9pt8aDdrNZON6QrqdMW+mklVI3jRY eUJ87a/MhAyzPAoeq8wg6gPbfNsevoeBH5/lyJN13x3QY6G6RMhjn9NHKSAmsJgK3dPK Ye6usxqgUF7ZMcEOam8YY2eVxRGzcmwN0l8h241TlkX58MmJX6TV9p5LRH8hYDpijKmm 9K9Q== X-Gm-Message-State: AKGB3mJR6VdssBa74x4rxSuH5bhDoEEqxW5afrzzirAiYvTOwpwnxTQS 0NIHkc/EPND9va0jR2j9/XuVTHzK X-Google-Smtp-Source: ACJfBot+VpZhmJSNe25tPzrS4slGfW2TLJ2+vT1a8twUrDAnKyEC3j4m2jZFE5dwzY+Sze48X5ELYQ== X-Received: by 10.28.5.198 with SMTP id 189mr32333278wmf.29.1514739076895; Sun, 31 Dec 2017 08:51:16 -0800 (PST) Original-Received: from p.fritz.box (p57AAFA54.dip0.t-ipconnect.de. [87.170.250.84]) by smtp.gmail.com with ESMTPSA id x88sm13216383wrb.4.2017.12.31.08.51.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 31 Dec 2017 08:51:16 -0800 (PST) X-Google-Original-From: Philipp Stephani X-Mailer: git-send-email 2.15.1 In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::22e X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:221487 Archived-At: * lisp/electric.el (electric-quote-post-self-insert-function): Skip over escape characters when determining whether a context-sensitive quote should be opening or closing. * test/lisp/electric-tests.el (electric-quote-replace-double-escaped-open) (electric-quote-replace-double-escaped-close): New unit tests. --- lisp/electric.el | 1 + test/lisp/electric-tests.el | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lisp/electric.el b/lisp/electric.el index cee3562139..9473ef374d 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -504,6 +504,7 @@ electric-quote-post-self-insert-function electric-quote-replace-double) (save-excursion (backward-char) + (skip-syntax-backward "\\") (or (bobp) (bolp) (memq (char-before) (list q< q<<)) (memq (char-syntax (char-before)) diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el index 7df2449b9e..793cd7c5d3 100644 --- a/test/lisp/electric-tests.el +++ b/test/lisp/electric-tests.el @@ -735,6 +735,24 @@ electric-quote-replace-double-after-paren :bindings '((electric-quote-replace-double . t)) :test-in-comments nil :test-in-strings nil) +(define-electric-pair-test electric-quote-replace-double-escaped-open + "foo \\" "-----\"" :expected-string "foo \\“" + :expected-point 7 :modes '(emacs-lisp-mode c-mode) + :fixture-fn #'electric-quote-local-mode + :bindings '((electric-quote-replace-double . t) + (electric-quote-comment . t) + (electric-quote-string . t)) + :test-in-comments t :test-in-strings t :test-in-code nil) + +(define-electric-pair-test electric-quote-replace-double-escaped-close + "foo \\“foo\\" "----------\"" :expected-string "foo \\“foo\\”" + :expected-point 12 :modes '(emacs-lisp-mode c-mode) + :fixture-fn #'electric-quote-local-mode + :bindings '((electric-quote-replace-double . t) + (electric-quote-comment . t) + (electric-quote-string . t)) + :test-in-comments t :test-in-strings t :test-in-code nil) + ;; Simulate ‘markdown-mode’: it sets both ‘comment-start’ and ;; ‘comment-use-syntax’, but derives from ‘text-mode’. (define-electric-pair-test electric-quote-markdown-in-text -- 2.15.1