From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Philipp Stephani <phst@google.com>
Cc: emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] master 34d4720: Electric quotes: Improve support for Markdown mode (Bug#24709)
Date: Mon, 03 Jul 2017 14:36:11 -0400 [thread overview]
Message-ID: <jwvfued4be0.fsf-monnier+emacsdiffs@gnu.org> (raw)
In-Reply-To: <CAP-RRPuWc6ACk3DMKV49dNLSje1rh7udpFQRv3wj4_0zZgYs2w@mail.gmail.com> (Philipp Stephani's message of "Mon, 03 Jul 2017 16:48:39 +0000")
> Good point, here's another patch.
Looks good, thanks.
Stefan
> Google Germany GmbH
> Erika-Mann-Straße 33
> 80636 München
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
> Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle
> Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind,
> leiten Sie diese bitte nicht weiter, informieren Sie den Absender und
> löschen Sie die E-Mail und alle Anhänge. Vielen Dank.
> This e-mail is confidential. If you are not the right addressee please do
> not forward it, please inform the sender, and please erase this e-mail
> including any attachments. Thanks.
> From 287a333286f5441128a1169be75e89461823e3af Mon Sep 17 00:00:00 2001
> From: Philipp Stephani <phst@google.com>
> Date: Mon, 3 Jul 2017 18:46:10 +0200
> Subject: [PATCH] Use hook instead of face list to inhibit electric quoting
> This is more flexible and doesn't couple electric quoting to font
> locking.
> Give that 'electric-quote-code-faces' was just introduced, remove it
> without formal deprecation.
> * lisp/electric.el (electric-quote-inhibit-functions): New abnormal
> hook variable.
> (electric-quote-post-self-insert-function): Run the hook. Remove
> use of old 'electric-quote-code-faces' variable.
> * test/lisp/electric-tests.el (electric-quote-markdown-in-text)
> (electric-quote-markdown-in-code): Adapt unit tests.
> ---
> etc/NEWS | 12 ++++++------
> lisp/electric.el | 19 ++++++++++++-------
> test/lisp/electric-tests.el | 16 ++++++++++++----
> 3 files changed, 30 insertions(+), 17 deletions(-)
> diff --git a/etc/NEWS b/etc/NEWS
> index 2afed2d253..d21d9cd5ee 100644
> --- a/etc/NEWS
> +++ b/etc/NEWS
> @@ -138,12 +138,12 @@ line, after a whitespace character, and after an opening parenthesis;
> and it will replace the apostrophe by a closing quote character in all
> other cases.
> -** The new variable 'electric-quote-code-faces' controls when to
> -disable electric quoting in text modes. Major modes can add faces to
> -this list; Emacs will temporarily disable 'electric-quote-mode'
> -whenever point is before a character having such a face. This is
> -intended for major modes that derive from 'text-mode' but allow inline
> -code segments, such as 'markdown-mode'.
> +** The new variable 'electric-quote-inhibit-functions' controls when
> +to disable electric quoting based on context. Major modes can add
> +functions to this list; Emacs will temporarily disable
> +'electric-quote-mode' whenever any of the functions returns non-nil.
> +This can be used by major modes that derive from 'text-mode' but allow
> +inline code segments, such as 'markdown-mode'.
> +++
> ** The new user variable 'dired-omit-case-fold' allows the user to
> diff --git a/lisp/electric.el b/lisp/electric.el
> index 1564df5949..4c1d9039d9 100644
> --- a/lisp/electric.el
> +++ b/lisp/electric.el
> @@ -451,8 +451,15 @@ electric-quote-context-sensitive
> :version "26.1"
> :type 'boolean :safe #'booleanp :group 'electricity)
> -(defvar electric-quote-code-faces ()
> - "List of faces to treat as inline code in `text-mode'.")
> +(defvar electric-quote-inhibit-functions ()
> + "List of functions that should inhibit electric quoting.
> +When the variable `electric-quote-mode' is non-nil, Emacs will
> +call these functions in order after the user has typed an \\=` or
> +\\=' character. If one of them returns non-nil, electric quote
> +substitution is inhibited. The functions are called after the
> +\\=` or \\=' character has been inserted with point directly
> +after the inserted character. The functions in this hook should
> +not move point or change the current buffer.")
> (defun electric-quote-post-self-insert-function ()
> "Function that `electric-quote-mode' adds to `post-self-insert-hook'.
> @@ -460,7 +467,9 @@ electric-quote-post-self-insert-function
> (when (and electric-quote-mode
> (or (eq last-command-event ?\')
> (and (not electric-quote-context-sensitive)
> - (eq last-command-event ?\`))))
> + (eq last-command-event ?\`)))
> + (not (run-hook-with-args-until-success
> + 'electric-quote-inhibit-functions)))
> (let ((start
> (if (and comment-start comment-use-syntax)
> (when (or electric-quote-comment electric-quote-string)
> @@ -475,10 +484,6 @@ electric-quote-post-self-insert-function
> (syntax-ppss (1- (point)))))))))
> (and electric-quote-paragraph
> (derived-mode-p 'text-mode)
> - ;; FIXME: There should be a ‘cl-disjoint’ function.
> - (null (cl-intersection (face-at-point nil 'multiple)
> - electric-quote-code-faces
> - :test #'eq))
> ;; FIXME: Why is the next form there? It’s never
> ;; nil.
> (or (eq last-command-event ?\`)
> diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el
> index 6f63d30e75..9dd27661d4 100644
> --- a/test/lisp/electric-tests.el
> +++ b/test/lisp/electric-tests.el
> @@ -697,16 +697,24 @@ electric-quote-context-sensitive-after-paren-double
> (define-electric-pair-test electric-quote-markdown-in-text
> "" "'" :expected-string "’" :expected-point 2
> :modes '(text-mode)
> - :fixture-fn #'electric-quote-local-mode
> - :bindings '((electric-quote-code-faces font-lock-constant-face))
> + :fixture-fn (lambda ()
> + (electric-quote-local-mode)
> + (add-hook 'electric-quote-inhibit-functions
> + (lambda ()
> + (save-excursion (search-backward "`" nil t)))
> + nil :local))
> :test-in-comments nil :test-in-strings nil)
> (define-electric-pair-test electric-quote-markdown-in-code
> #("`a`" 1 2 (face font-lock-constant-face)) "-'"
> :expected-string "`'a`" :expected-point 3
> :modes '(text-mode)
> - :fixture-fn #'electric-quote-local-mode
> - :bindings '((electric-quote-code-faces font-lock-constant-face))
> + :fixture-fn (lambda ()
> + (electric-quote-local-mode)
> + (add-hook 'electric-quote-inhibit-functions
> + (lambda ()
> + (save-excursion (search-backward "`" nil t)))
> + nil :local))
> :test-in-comments nil :test-in-strings nil)
> (provide 'electric-tests)
> --
> 2.13.2.725.g09c95d1e9-goog
next prev parent reply other threads:[~2017-07-03 18:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20170702154850.22058.98643@vcs0.savannah.gnu.org>
[not found] ` <20170702154852.1796522E35@vcs0.savannah.gnu.org>
2017-07-02 17:48 ` [Emacs-diffs] master 34d4720: Electric quotes: Improve support for Markdown mode (Bug#24709) Stefan Monnier
2017-07-03 16:48 ` Philipp Stephani
2017-07-03 18:36 ` Stefan Monnier [this message]
2017-07-03 19:00 ` Philipp Stephani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvfued4be0.fsf-monnier+emacsdiffs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=emacs-devel@gnu.org \
--cc=phst@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.