From bb2ea81bc569bdc51e1c9af1c503a22fb95e4384 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Sun, 2 Jul 2017 18:14:21 +0200 Subject: [PATCH] Further improve electric quote support for Markdown (Bug#24709) Markdown sets both 'comment-start' and 'comment-use-syntax' to non-nil values. Therefore 'electric-quote-mode' recognized it as a programming mode. Fix this by first checking whether the current major mode is derived from 'text-mode'. * lisp/electric.el (electric-quote-post-self-insert-function): Treat 'text-mode' as stronger signal than comment syntax. * test/lisp/electric-tests.el (electric-quote-markdown-in-text) (electric-quote-markdown-in-code): Adapt unit tests. --- lisp/electric.el | 28 ++++++++++++++-------------- test/lisp/electric-tests.el | 4 ++++ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lisp/electric.el b/lisp/electric.el index 96c805bb5fb..a71e79ff78a 100644 --- a/lisp/electric.el +++ b/lisp/electric.el @@ -469,20 +469,20 @@ This requotes when a quoting key is typed." (and (not electric-quote-context-sensitive) (eq last-command-event ?\`))) (not (run-hook-with-args-until-success - 'electric-quote-inhibit-functions))) - (if (and comment-start comment-use-syntax) - (when (or electric-quote-comment electric-quote-string) - (let* ((syntax (syntax-ppss)) - (beg (nth 8 syntax))) - (and beg - (or (and electric-quote-comment (nth 4 syntax)) - (and electric-quote-string (nth 3 syntax))) - ;; Do not requote a quote that starts or ends - ;; a comment or string. - (eq beg (nth 8 (save-excursion - (syntax-ppss (1- (point))))))))) - (and electric-quote-paragraph - (derived-mode-p 'text-mode)))) + 'electric-quote-inhibit-functions)) + (if (derived-mode-p 'text-mode) + electric-quote-paragraph + (and comment-start comment-use-syntax + (or electric-quote-comment electric-quote-string) + (let* ((syntax (syntax-ppss)) + (beg (nth 8 syntax))) + (and beg + (or (and electric-quote-comment (nth 4 syntax)) + (and electric-quote-string (nth 3 syntax))) + ;; Do not requote a quote that starts or ends + ;; a comment or string. + (eq beg (nth 8 (save-excursion + (syntax-ppss (1- (point))))))))))) (pcase electric-quote-chars (`(,q< ,q> ,q<< ,q>>) (save-excursion diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el index c4ccec7a0d8..c6ffccc0794 100644 --- a/test/lisp/electric-tests.el +++ b/test/lisp/electric-tests.el @@ -694,6 +694,8 @@ baz\"\"" :bindings '((electric-quote-context-sensitive . t)) :test-in-comments nil :test-in-strings 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 "" "'" :expected-string "’" :expected-point 2 :modes '(text-mode) @@ -703,6 +705,7 @@ baz\"\"" (lambda () (save-excursion (search-backward "`" nil t))) nil :local)) + :bindings '((comment-start . "