From: Paul Eggert <eggert@cs.ucla.edu>
To: "Göktuğ Kayaalp" <self@gkayaalp.com>
Cc: emacs-devel@gnu.org
Subject: Re: [PATCH] Enable customisation for electric-quote-mode chars
Date: Sun, 23 Oct 2016 03:25:00 -0700 [thread overview]
Message-ID: <d09a8097-4e13-5d6a-4352-dff785a922bb@cs.ucla.edu> (raw)
In-Reply-To: <87pomsv5z4.fsf@xi.bootis>
[-- Attachment #1: Type: text/plain, Size: 437 bytes --]
Göktuğ Kayaalp wrote:
> I'm messaging just to ping about the status of this patch. Will be
> applied or not? Need improvements?
The intent is to apply it, yes. I had been waiting for Bug#24759 to settle down
first; see
http://bugs.gnu.org/24759
That bug was closed recently. To help move things along I merged emacs-25 to
master and rebased the patch, arriving at the attached patches. Do these look
good to you?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-New-user-variable-electric-quote-chars.patch --]
[-- Type: text/x-diff; name="0001-New-user-variable-electric-quote-chars.patch", Size: 6644 bytes --]
From 96c18709151a422c7dbad6bcfdebe06dc50c4f3b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=B6ktu=C4=9F=20Kayaalp?= <self@gkayaalp.com>
Date: Sun, 23 Oct 2016 03:14:52 -0700
Subject: [PATCH 1/2] New user variable 'electric-quote-chars'
* doc/emacs/text.texi (Quotation Marks), etc/NEWS: Document this.
* lisp/electric.el (electric-quote-chars): New defcustom.
(electric-quote-post-self-insert-function): Use it.
(electric--insertable-p): Arg can now be a char, too.
---
doc/emacs/text.texi | 14 ++++++++++++--
etc/NEWS | 4 ++++
lisp/electric.el | 53 +++++++++++++++++++++++++++++++++--------------------
3 files changed, 49 insertions(+), 22 deletions(-)
diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi
index 7fa0804..4c6a1ff 100644
--- a/doc/emacs/text.texi
+++ b/doc/emacs/text.texi
@@ -412,6 +412,7 @@ Quotation Marks
@cindex mode, Electric Quote
@cindex curly quotes
@cindex curved quotes
+@cindex guillemets
@findex electric-quote-mode
One common way to quote is the typewriter convention, which quotes
using straight apostrophes @t{'like this'} or double-quotes @t{"like
@@ -420,9 +421,15 @@ Quotation Marks
@t{“like this”}. In text files, typewriter quotes are simple and
portable; curved quotes are less ambiguous and typically look nicer.
+@vindex electric-quote-chars
Electric Quote mode makes it easier to type curved quotes. As you
type characters it optionally converts @t{`} to @t{‘}, @t{'} to @t{’},
-@t{``} to @t{“}, and @t{''} to @t{”}.
+@t{``} to @t{“}, and @t{''} to @t{”}. It's possible to change the
+default quotes listed above, by customizing the variable
+@code{electric-quote-chars}, a list of four characters, where the
+items correspond to the left single quote, the right single quote, the
+left double quote and the right double quote, respectively, whose
+default value is @code{'(?‘ ?’ ?“ ?”)}.
@vindex electric-quote-paragraph
@vindex electric-quote-comment
@@ -443,7 +450,10 @@ Quotation Marks
insert a curved quote even when Electric Quote is disabled or
inactive, you can type @kbd{C-x 8 [} for @t{‘}, @kbd{C-x 8 ]} for
@t{’}, @kbd{C-x 8 @{} for @t{“}, and @kbd{C-x 8 @}} for @t{”}.
-@xref{Inserting Text}.
+@xref{Inserting Text}. Note that the value of
+@code{electric-quote-chars} does not affect these keybindings, they
+are not keybindings of @code{electric-quote-mode} but bound in
+@code{global-map}.
@node Filling
@section Filling Text
diff --git a/etc/NEWS b/etc/NEWS
index d9973c0..1271466 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -60,6 +60,10 @@ affected by this, as SGI stopped supporting IRIX in December 2013.
\f
* Changes in Emacs 26.1
++++
+** The new user variable 'electric-quote-chars' provides a list
+of curved quotes for 'electric-quote-mode', allowing user to choose
+the types of quotes to be used.
---
The group 'wp', whose label was "text", is now deprecated.
diff --git a/lisp/electric.el b/lisp/electric.el
index f35f8b9..19cded2 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -425,6 +425,13 @@ electric-quote-string
:version "25.1"
:type 'boolean :safe 'booleanp :group 'electricity)
+(defcustom electric-quote-chars '(?‘ ?’ ?“ ?”)
+ "Curved quote characters for `electric-quote-mode'.
+The items correspond to the left single quote, the right single
+quote, the left double quote, and the right double quote, respectively."
+ :version "25.1"
+ :type 'list :safe 'listp :group 'electricity)
+
(defcustom electric-quote-paragraph t
"Non-nil means to use electric quoting in text paragraphs."
:version "25.1"
@@ -451,26 +458,29 @@ electric-quote-post-self-insert-function
(derived-mode-p 'text-mode)
(or (eq last-command-event ?\`)
(save-excursion (backward-paragraph) (point)))))))
- (when start
- (save-excursion
- (if (eq last-command-event ?\`)
- (cond ((search-backward "‘`" (- (point) 2) t)
- (replace-match "“")
- (when (and electric-pair-mode
- (eq (cdr-safe
- (assq ?‘ electric-pair-text-pairs))
- (char-after)))
- (delete-char 1))
- (setq last-command-event ?“))
- ((search-backward "`" (1- (point)) t)
- (replace-match "‘")
- (setq last-command-event ?‘)))
- (cond ((search-backward "’'" (- (point) 2) t)
- (replace-match "”")
- (setq last-command-event ?”))
- ((search-backward "'" (1- (point)) t)
- (replace-match "’")
- (setq last-command-event ?’)))))))))
+ (pcase electric-quote-chars
+ (`(,q1 ,q2 ,q3 ,q4)
+ (when start
+ (save-excursion
+ (if (eq last-command-event ?\`)
+ (cond ((search-backward (string q1 ?`) (- (point) 2) t)
+ (replace-match (string q3))
+ (when (and electric-pair-mode
+ (eq (cdr-safe
+ (assq q1 electric-pair-text-pairs))
+ (char-after)))
+ (delete-char 1))
+ (setq last-command-event q3))
+ ((search-backward "`" (1- (point)) t)
+ (replace-match (string q1))
+ (setq last-command-event q1)))
+ (cond ((search-backward (string q2 ?') (- (point) 2) t)
+ (replace-match (string q4))
+ (setq last-command-event q4))
+ ((search-backward "'" (1- (point)) t)
+ (replace-match (string q2))
+ (setq last-command-event q2)))))))
+ (_ (error "‘electric-quote-chars’ must contain exactly 4 characters."))))))
(put 'electric-quote-post-self-insert-function 'priority 10)
@@ -487,6 +497,9 @@ electric-quote-mode
`electric-quote-comment', `electric-quote-string', and
`electric-quote-paragraph'.
+Customize `electric-quote-chars' in order to use quote chars
+other than the ones listed here.
+
This is a global minor mode. To toggle the mode in a single buffer,
use `electric-quote-local-mode'."
:global t :group 'electricity
--
2.7.4
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-electric-quote-chars-fixups.patch --]
[-- Type: text/x-diff; name="0002-electric-quote-chars-fixups.patch", Size: 4188 bytes --]
From 7ba2590f3753157ca078250c09598dce48aaa3cd Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sun, 23 Oct 2016 03:22:06 -0700
Subject: [PATCH 2/2] electric-quote-chars fixups
* lisp/electric.el (electric-quote-chars): Check types and safety
more carefully.
(electric-quote-post-self-insert-function): Use more-mnemonic locals.
Omit no-longer-necessary runtime error diagnostic.
---
lisp/electric.el | 43 ++++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/lisp/electric.el b/lisp/electric.el
index 19cded2..3e48737 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -427,10 +427,16 @@ electric-quote-string
(defcustom electric-quote-chars '(?‘ ?’ ?“ ?”)
"Curved quote characters for `electric-quote-mode'.
-The items correspond to the left single quote, the right single
-quote, the left double quote, and the right double quote, respectively."
- :version "25.1"
- :type 'list :safe 'listp :group 'electricity)
+This list's members correspond to left single quote, right single
+quote, left double quote, and right double quote, respectively."
+ :version "26.1"
+ :type '(list character character character character)
+ :safe #'(lambda (x)
+ (pcase x
+ (`(,(pred characterp) ,(pred characterp)
+ ,(pred characterp) ,(pred characterp))
+ t)))
+ :group 'electricity)
(defcustom electric-quote-paragraph t
"Non-nil means to use electric quoting in text paragraphs."
@@ -459,28 +465,27 @@ electric-quote-post-self-insert-function
(or (eq last-command-event ?\`)
(save-excursion (backward-paragraph) (point)))))))
(pcase electric-quote-chars
- (`(,q1 ,q2 ,q3 ,q4)
+ (`(,q< ,q> ,q<< ,q>>)
(when start
(save-excursion
(if (eq last-command-event ?\`)
- (cond ((search-backward (string q1 ?`) (- (point) 2) t)
- (replace-match (string q3))
+ (cond ((search-backward (string q< ?`) (- (point) 2) t)
+ (replace-match (string q<<))
(when (and electric-pair-mode
(eq (cdr-safe
- (assq q1 electric-pair-text-pairs))
+ (assq q< electric-pair-text-pairs))
(char-after)))
(delete-char 1))
- (setq last-command-event q3))
+ (setq last-command-event q<<))
((search-backward "`" (1- (point)) t)
- (replace-match (string q1))
- (setq last-command-event q1)))
- (cond ((search-backward (string q2 ?') (- (point) 2) t)
- (replace-match (string q4))
- (setq last-command-event q4))
+ (replace-match (string q<))
+ (setq last-command-event q<)))
+ (cond ((search-backward (string q> ?') (- (point) 2) t)
+ (replace-match (string q>>))
+ (setq last-command-event q>>))
((search-backward "'" (1- (point)) t)
- (replace-match (string q2))
- (setq last-command-event q2)))))))
- (_ (error "‘electric-quote-chars’ must contain exactly 4 characters."))))))
+ (replace-match (string q>))
+ (setq last-command-event q>)))))))))))
(put 'electric-quote-post-self-insert-function 'priority 10)
@@ -497,8 +502,8 @@ electric-quote-mode
`electric-quote-comment', `electric-quote-string', and
`electric-quote-paragraph'.
-Customize `electric-quote-chars' in order to use quote chars
-other than the ones listed here.
+Customize `electric-quote-chars' to use characters other than the
+ones listed here.
This is a global minor mode. To toggle the mode in a single buffer,
use `electric-quote-local-mode'."
--
2.7.4
next prev parent reply other threads:[~2016-10-23 10:25 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-27 14:22 [PATCH] Enable customisation for electric-quote-mode chars Göktuğ Kayaalp
2016-08-27 14:38 ` Eli Zaretskii
2016-08-27 15:23 ` Göktuğ Kayaalp
2016-08-27 19:16 ` Paul Eggert
2016-08-28 1:00 ` Göktuğ Kayaalp
2016-08-29 1:55 ` Paul Eggert
2016-08-29 5:28 ` Göktuğ Kayaalp
2016-08-29 6:14 ` Paul Eggert
2016-10-05 18:53 ` Göktuğ Kayaalp
2016-10-05 19:06 ` Paul Eggert
2016-10-06 6:40 ` Eli Zaretskii
2016-10-06 21:31 ` Paul Eggert
2016-10-07 18:33 ` Göktuğ Kayaalp
2016-10-10 3:57 ` Paul Eggert
2016-10-13 18:28 ` Göktuğ Kayaalp
2016-10-13 18:35 ` Paul Eggert
2016-10-22 14:00 ` Göktuğ Kayaalp
2016-10-23 10:25 ` Paul Eggert [this message]
2016-10-23 15:09 ` Göktuğ Kayaalp
2016-10-27 15:12 ` Paul Eggert
2016-10-27 17:21 ` Göktuğ Kayaalp
2016-08-29 15:08 ` Eli Zaretskii
2016-08-29 15:54 ` Yuri Khan
2016-08-29 16:23 ` Eli Zaretskii
2016-08-29 16:27 ` Göktuğ Kayaalp
2016-08-29 16:39 ` Eli Zaretskii
2016-08-29 17:19 ` Göktuğ Kayaalp
2016-08-29 17:30 ` Paul Eggert
2016-08-29 17:44 ` Eli Zaretskii
2016-08-29 18:43 ` Paul Eggert
2016-08-29 19:30 ` Eli Zaretskii
2016-08-30 17:38 ` Paul Eggert
2016-08-30 17:49 ` Eli Zaretskii
2016-08-31 11:08 ` Richard Stallman
2016-09-01 18:56 ` Göktuğ Kayaalp
2016-09-01 19:15 ` Paul Eggert
2016-09-01 21:13 ` Göktuğ Kayaalp
2016-09-01 21:30 ` Paul Eggert
2016-09-02 5:06 ` Yuri Khan
2016-09-02 7:30 ` Eli Zaretskii
2016-09-02 10:37 ` Yuri Khan
2016-09-02 13:24 ` Göktuğ Kayaalp
2016-08-29 16:15 ` tarball builds (was: [PATCH] Enable customisation for electric-quote-mode chars) Stefan Monnier
2016-08-30 15:14 ` Eli Zaretskii
2016-08-30 15:53 ` tarball builds Stefan Monnier
2016-08-30 15:59 ` Paul Eggert
2016-08-30 17:00 ` Stefan Monnier
2016-08-30 17:58 ` Paul Eggert
2016-08-29 2:33 ` [PATCH] Enable customisation for electric-quote-mode chars Eli Zaretskii
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d09a8097-4e13-5d6a-4352-dff785a922bb@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=emacs-devel@gnu.org \
--cc=self@gkayaalp.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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).