* add `read-buffer-completion-ignore-case' ?
@ 2008-06-08 21:28 John Paul Wallington
2008-06-08 22:46 ` Drew Adams
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: John Paul Wallington @ 2008-06-08 21:28 UTC (permalink / raw)
To: emacs-devel
Is it okay to install the following change?
It adds a customizable variable, `read-buffer-completion-ignore-case',
that specifies the case-sensitivity of completion for `read-buffer'.
Its default value is nil, meaning that `read-buffer' is case-sensitive
when completing buffer names.
2008-06-08 John Paul Wallington <jpw@pobox.com>
* minibuf.c (read_buffer_completion_ignore_case): New variable.
(syms_of_minibuf): Declare and initialise it.
(Fread_buffer): Bind `completion-ignore-case' to respect it.
Mention it and `read-buffer-function' in docstring.
--- minibuf.c.~1.353.~ 2008-06-05 20:28:48.000000000 +0100
+++ minibuf.c 2008-06-08 22:10:01.000000000 +0100
@@ -109,6 +109,9 @@
/* Function to call to read a buffer name. */
Lisp_Object Vread_buffer_function;
+/* Nonzero means completion ignores case when reading buffer name. */
+int read_buffer_completion_ignore_case;
+
/* Nonzero means completion ignores case. */
int completion_ignore_case;
@@ -1178,7 +1181,9 @@
If DEF is a list of default values, return its first element.
If optional third arg REQUIRE-MATCH is non-nil,
only existing buffer names are allowed.
-The argument PROMPT should be a string ending with a colon and a space. */)
+The argument PROMPT should be a string ending with a colon and a space.
+
+See also `read-buffer-completion-ignore-case' and `read-buffer-function'. */)
(prompt, def, require_match)
Lisp_Object prompt, def, require_match;
{
@@ -1189,47 +1194,54 @@
if (BUFFERP (def))
def = XBUFFER (def)->name;
- if (NILP (Vread_buffer_function))
- {
- if (!NILP (def))
- {
- /* A default value was provided: we must change PROMPT,
- editing the default value in before the colon. To achieve
- this, we replace PROMPT with a substring that doesn't
- contain the terminal space and colon (if present). They
- are then added back using Fformat. */
+ {
+ int count = SPECPDL_INDEX ();
+
+ specbind (Qcompletion_ignore_case,
+ read_buffer_completion_ignore_case ? Qt : Qnil);
- if (STRINGP (prompt))
- {
- s = SDATA (prompt);
- len = strlen (s);
- if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
- len = len - 2;
- else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
- len--;
+ if (NILP (Vread_buffer_function))
+ {
+ if (!NILP (def))
+ {
+ /* A default value was provided: we must change PROMPT,
+ editing the default value in before the colon. To achieve
+ this, we replace PROMPT with a substring that doesn't
+ contain the terminal space and colon (if present). They
+ are then added back using Fformat. */
- prompt = make_specified_string (s, -1, len,
- STRING_MULTIBYTE (prompt));
- }
+ if (STRINGP (prompt))
+ {
+ s = SDATA (prompt);
+ len = strlen (s);
+ if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
+ len = len - 2;
+ else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
+ len--;
- args[0] = build_string ("%s (default %s): ");
- args[1] = prompt;
- args[2] = CONSP (def) ? XCAR (def) : def;
- prompt = Fformat (3, args);
- }
+ prompt = make_specified_string (s, -1, len,
+ STRING_MULTIBYTE (prompt));
+ }
- return Fcompleting_read (prompt, intern ("internal-complete-buffer"),
- Qnil, require_match, Qnil, Qbuffer_name_history,
- def, Qnil);
- }
- else
- {
- args[0] = Vread_buffer_function;
- args[1] = prompt;
- args[2] = def;
- args[3] = require_match;
- return Ffuncall(4, args);
- }
+ args[0] = build_string ("%s (default %s): ");
+ args[1] = prompt;
+ args[2] = CONSP (def) ? XCAR (def) : def;
+ prompt = Fformat (3, args);
+ }
+
+ return Fcompleting_read (prompt, intern ("internal-complete-buffer"),
+ Qnil, require_match, Qnil, Qbuffer_name_history,
+ def, Qnil);
+ }
+ else
+ {
+ args[0] = Vread_buffer_function;
+ args[1] = prompt;
+ args[2] = def;
+ args[3] = require_match;
+ return Ffuncall(4, args);
+ }
+ }
}
\f
static Lisp_Object
@@ -2117,6 +2129,10 @@
doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
Vread_buffer_function = Qnil;
+ DEFVAR_BOOL ("read-buffer-completion-ignore-case", &read_buffer_completion_ignore_case,
+ doc: /* *Non-nil means when reading a buffer name completion ignores case. */);
+ read_buffer_completion_ignore_case = 0;
+
DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
doc: /* Normal hook run just after entry to minibuffer. */);
Vminibuffer_setup_hook = Qnil;
2008-06-08 John Paul Wallington <jpw@pobox.com>
* cus-start.el (read-buffer-completion-ignore-case): Add.
--- cus-start.el.~1.123.~ 2008-06-05 20:28:43.000000000 +0100
+++ cus-start.el 2008-06-08 22:17:50.000000000 +0100
@@ -275,6 +275,7 @@
(choice (const nil)
(function-item iswitchb-read-buffer)
function))
+ (read-buffer-completion-ignore-case minibuffer boolean "23.1")
;; msdos.c
(dos-unsupported-char-glyph display integer)
;; process.c
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: add `read-buffer-completion-ignore-case' ?
2008-06-08 21:28 add `read-buffer-completion-ignore-case' ? John Paul Wallington
@ 2008-06-08 22:46 ` Drew Adams
2008-06-08 22:51 ` doc strings for read-*-completion-ignore-case [was: add `read-buffer-completion-ignore-case' ?] Drew Adams
` (2 subsequent siblings)
3 siblings, 0 replies; 13+ messages in thread
From: Drew Adams @ 2008-06-08 22:46 UTC (permalink / raw)
To: 'John Paul Wallington', emacs-devel
> Is it okay to install the following change?
I didn't try it, but if it does what you say then it's OK by me.
> It adds a customizable variable, `read-buffer-completion-ignore-case',
> that specifies the case-sensitivity of completion for `read-buffer'.
> Its default value is nil, meaning that `read-buffer' is case-sensitive
> when completing buffer names.
t might be a better default value, as some others explained. t would also be my
preference, but I'm OK with either t or nil.
Thx.
^ permalink raw reply [flat|nested] 13+ messages in thread
* doc strings for read-*-completion-ignore-case [was: add `read-buffer-completion-ignore-case' ?]
2008-06-08 21:28 add `read-buffer-completion-ignore-case' ? John Paul Wallington
2008-06-08 22:46 ` Drew Adams
@ 2008-06-08 22:51 ` Drew Adams
2008-06-09 1:53 ` add `read-buffer-completion-ignore-case' ? Stefan Monnier
2008-06-09 12:10 ` John Paul Wallington
3 siblings, 0 replies; 13+ messages in thread
From: Drew Adams @ 2008-06-08 22:51 UTC (permalink / raw)
To: 'John Paul Wallington', emacs-devel
> It adds a customizable variable, `read-buffer-completion-ignore-case',
> that specifies the case-sensitivity of completion for `read-buffer'.
> Its default value is nil, meaning that `read-buffer' is case-sensitive
> when completing buffer names.
Actually, the doc strings for both variables (file and buffer) seem incomplete
(and even not quite correct) to me: "Non-nil means when reading a buffer name
completion ignores case."
I would like to see a little more, saying explicitly that this means only when
using `read-buffer' or an `interactive' spec with spec "B..." or "b...".
Similarly for file names and `read-file-name'.
The reason:
1. It's not obvious that if you read a file name using, say, `completing-read'
with file-name candidates as the TABLE arg, this variable has no effect. You
must use `read-file-name'. Similarly for reading a buffer name using
`completing-read' with a list of buffer names as TABLE arg - the variable has no
effect.
2. It's not obvious that (interactive "B...") uses `read-buffer', and so on.
At least the latter was not obvious to me. I had to study the C code just now to
see how it is that a change to `read-buffer' also affects (interactive "B...").
Both #1 and #2 are important to know for those programming in Emacs Lisp. #1 is
presumably the reason for the name `read-buffer-...' instead of
`read-buffer-name-...'.
And #1 is presumably the reason for both names instead of, say, just
`file-name-completion-ignore-case' and `buffer-name-completion-ignore-case'.
These variables do not, _in general_, affect completion when reading a buffer
name or a file name - they are limited to `read-buffer' and `read-file-name'
(and `interactive').
The doc strings should help dispel the idea that this is about completion of
buffer/file names - it is about `read-buffer' and `read-file-name',
specifically.
---
Also, the doc strings are not great grammatically. It would be clearer to say:
"Non-nil means that file-name completion ignores case."
Or, if you really want to keep the current order (which is less clear, IMO),
then: "Non-nil means that, when reading a file name, completion ignores case."
The "that" here helps understanding, especially for those whose mother tongue is
not English.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-08 21:28 add `read-buffer-completion-ignore-case' ? John Paul Wallington
2008-06-08 22:46 ` Drew Adams
2008-06-08 22:51 ` doc strings for read-*-completion-ignore-case [was: add `read-buffer-completion-ignore-case' ?] Drew Adams
@ 2008-06-09 1:53 ` Stefan Monnier
2008-06-09 2:59 ` Miles Bader
2008-06-09 12:10 ` John Paul Wallington
3 siblings, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2008-06-09 1:53 UTC (permalink / raw)
To: John Paul Wallington; +Cc: emacs-devel
> Is it okay to install the following change?
I don't think we need yet-another configuration variable for that.
We should just reuse read-file-name-completion-ignore-case.
Stefan
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-09 1:53 ` add `read-buffer-completion-ignore-case' ? Stefan Monnier
@ 2008-06-09 2:59 ` Miles Bader
2008-06-09 6:45 ` Drew Adams
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Miles Bader @ 2008-06-09 2:59 UTC (permalink / raw)
To: Stefan Monnier; +Cc: emacs-devel, John Paul Wallington
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> I don't think we need yet-another configuration variable for that.
> We should just reuse read-file-name-completion-ignore-case.
Regardless of what some newbies think, buffer names and filenames are
not the same. It is quite reasonable for someone to want to have one be
case-insensitive but not the other.
-Miles
--
Kilt, n. A costume sometimes worn by Scotchmen [sic] in America and Americans
in Scotland.
^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: add `read-buffer-completion-ignore-case' ?
2008-06-09 2:59 ` Miles Bader
@ 2008-06-09 6:45 ` Drew Adams
2008-06-09 8:45 ` Eli Zaretskii
2008-06-10 1:15 ` Stefan Monnier
2 siblings, 0 replies; 13+ messages in thread
From: Drew Adams @ 2008-06-09 6:45 UTC (permalink / raw)
To: 'Miles Bader', 'Stefan Monnier'
Cc: 'John Paul Wallington', emacs-devel
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
> > I don't think we need yet-another configuration variable for that.
> > We should just reuse read-file-name-completion-ignore-case.
>
> Regardless of what some newbies think, buffer names and filenames are
> not the same. It is quite reasonable for someone to want to
> have one be case-insensitive but not the other.
1+
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-09 2:59 ` Miles Bader
2008-06-09 6:45 ` Drew Adams
@ 2008-06-09 8:45 ` Eli Zaretskii
2008-06-09 9:09 ` David Kastrup
2008-06-09 9:10 ` Juanma Barranquero
2008-06-10 1:15 ` Stefan Monnier
2 siblings, 2 replies; 13+ messages in thread
From: Eli Zaretskii @ 2008-06-09 8:45 UTC (permalink / raw)
To: Miles Bader; +Cc: jpw, monnier, emacs-devel
> From: Miles Bader <miles.bader@necel.com>
> Date: Mon, 09 Jun 2008 11:59:21 +0900
> Cc: emacs-devel@gnu.org, John Paul Wallington <jpw@pobox.com>
>
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
> > I don't think we need yet-another configuration variable for that.
> > We should just reuse read-file-name-completion-ignore-case.
>
> Regardless of what some newbies think, buffer names and filenames are
> not the same. It is quite reasonable for someone to want to have one be
> case-insensitive but not the other.
I don't necessarily disagree, but we do know which buffers are
associated with a file and which aren't. So we could DWIM in each
case as appropriate. If we want that, of course.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-09 8:45 ` Eli Zaretskii
@ 2008-06-09 9:09 ` David Kastrup
2008-06-09 9:10 ` Juanma Barranquero
1 sibling, 0 replies; 13+ messages in thread
From: David Kastrup @ 2008-06-09 9:09 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: jpw, emacs-devel, monnier, Miles Bader
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Miles Bader <miles.bader@necel.com>
>> Date: Mon, 09 Jun 2008 11:59:21 +0900
>> Cc: emacs-devel@gnu.org, John Paul Wallington <jpw@pobox.com>
>>
>> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> > I don't think we need yet-another configuration variable for that.
>> > We should just reuse read-file-name-completion-ignore-case.
>>
>> Regardless of what some newbies think, buffer names and filenames are
>> not the same. It is quite reasonable for someone to want to have one be
>> case-insensitive but not the other.
>
> I don't necessarily disagree, but we do know which buffers are
> associated with a file and which aren't. So we could DWIM in each
> case as appropriate. If we want that, of course.
I don't think we do. For non-file buffers, I don't really see that
having different completion realms for "*Messages*" and "*mail*" is
really an essential part of people's workflow. So it is not that
important to differentiate here as well.
What about buffers associated with a file, but with a file name not
matching the buffer name?
There is so much potential for messiness that I would not want to go
there.
--
David Kastrup
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-09 8:45 ` Eli Zaretskii
2008-06-09 9:09 ` David Kastrup
@ 2008-06-09 9:10 ` Juanma Barranquero
1 sibling, 0 replies; 13+ messages in thread
From: Juanma Barranquero @ 2008-06-09 9:10 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: jpw, emacs-devel, monnier, Miles Bader
On Mon, Jun 9, 2008 at 10:45, Eli Zaretskii <eliz@gnu.org> wrote:
> I don't necessarily disagree, but we do know which buffers are
> associated with a file and which aren't. So we could DWIM in each
> case as appropriate. If we want that, of course.
I like switching buffers in a case-insensitive way, even when the
buffer is not visiting a file. It's not that often that I have
*Messages* and *messages* and *Scratch* and *scratch*, etc... Like,
never, really.
So it's better IMO not to tie buffer-selection casefolding with
filename casefolding (I'd set both to case-insensitivity at once, but
it's clear some people would prefer otherwise).
Juanma
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-08 21:28 add `read-buffer-completion-ignore-case' ? John Paul Wallington
` (2 preceding siblings ...)
2008-06-09 1:53 ` add `read-buffer-completion-ignore-case' ? Stefan Monnier
@ 2008-06-09 12:10 ` John Paul Wallington
3 siblings, 0 replies; 13+ messages in thread
From: John Paul Wallington @ 2008-06-09 12:10 UTC (permalink / raw)
To: emacs-devel
I wrote:
> Is it okay to install the following change?
>
> It adds a customizable variable, `read-buffer-completion-ignore-case',
> that specifies the case-sensitivity of completion for `read-buffer'.
> Its default value is nil, meaning that `read-buffer' is case-sensitive
> when completing buffer names.
>
> 2008-06-08 John Paul Wallington <jpw@pobox.com>
>
> * minibuf.c (read_buffer_completion_ignore_case): New variable.
> (syms_of_minibuf): Declare and initialise it.
> (Fread_buffer): Bind `completion-ignore-case' to respect it.
> Mention it and `read-buffer-function' in docstring.
>
> --- minibuf.c.~1.353.~ 2008-06-05 20:28:48.000000000 +0100
> +++ minibuf.c 2008-06-08 22:10:01.000000000 +0100
[...]
Doh. That patch didn't work, 'cos I forgot to unbind_to at the end.
Here's a revised one:
--- minibuf.c.~1.353.~ 2008-06-05 20:28:48.000000000 +0100
+++ minibuf.c 2008-06-09 12:57:35.000000000 +0100
@@ -109,6 +109,9 @@
/* Function to call to read a buffer name. */
Lisp_Object Vread_buffer_function;
+/* Nonzero means completion ignores case when reading buffer name. */
+int read_buffer_completion_ignore_case;
+
/* Nonzero means completion ignores case. */
int completion_ignore_case;
@@ -1178,17 +1181,25 @@
If DEF is a list of default values, return its first element.
If optional third arg REQUIRE-MATCH is non-nil,
only existing buffer names are allowed.
-The argument PROMPT should be a string ending with a colon and a space. */)
+The argument PROMPT should be a string ending with a colon and a space.
+
+See also `read-buffer-completion-ignore-case' and `read-buffer-function'. */)
(prompt, def, require_match)
Lisp_Object prompt, def, require_match;
{
Lisp_Object args[4];
+ Lisp_Object tem;
unsigned char *s;
int len;
+ int count = SPECPDL_INDEX ();
+
if (BUFFERP (def))
def = XBUFFER (def)->name;
-
+
+ specbind (Qcompletion_ignore_case,
+ read_buffer_completion_ignore_case ? Qt : Qnil);
+
if (NILP (Vread_buffer_function))
{
if (!NILP (def))
@@ -1218,9 +1229,9 @@
prompt = Fformat (3, args);
}
- return Fcompleting_read (prompt, intern ("internal-complete-buffer"),
- Qnil, require_match, Qnil, Qbuffer_name_history,
- def, Qnil);
+ tem = Fcompleting_read (prompt, intern ("internal-complete-buffer"),
+ Qnil, require_match, Qnil, Qbuffer_name_history,
+ def, Qnil);
}
else
{
@@ -1228,8 +1239,9 @@
args[1] = prompt;
args[2] = def;
args[3] = require_match;
- return Ffuncall(4, args);
+ tem = Ffuncall(4, args);
}
+ return unbind_to (count, tem);
}
\f
static Lisp_Object
@@ -2117,6 +2129,10 @@
doc: /* If this is non-nil, `read-buffer' does its work by calling this function. */);
Vread_buffer_function = Qnil;
+ DEFVAR_BOOL ("read-buffer-completion-ignore-case", &read_buffer_completion_ignore_case,
+ doc: /* *Non-nil means when reading a buffer name completion ignores case. */);
+ read_buffer_completion_ignore_case = 0;
+
DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
doc: /* Normal hook run just after entry to minibuffer. */);
Vminibuffer_setup_hook = Qnil;
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-09 2:59 ` Miles Bader
2008-06-09 6:45 ` Drew Adams
2008-06-09 8:45 ` Eli Zaretskii
@ 2008-06-10 1:15 ` Stefan Monnier
2008-06-10 1:26 ` Miles Bader
2 siblings, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2008-06-10 1:15 UTC (permalink / raw)
To: Miles Bader; +Cc: emacs-devel, John Paul Wallington
>> I don't think we need yet-another configuration variable for that.
>> We should just reuse read-file-name-completion-ignore-case.
> Regardless of what some newbies think, buffer names and filenames are
> not the same. It is quite reasonable for someone to want to have one be
> case-insensitive but not the other.
Maybe it's reasonable, but I don't think it matters.
So this is irrelevant without a more concrete reason.
Stefan
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-10 1:15 ` Stefan Monnier
@ 2008-06-10 1:26 ` Miles Bader
2008-06-10 2:41 ` Stefan Monnier
0 siblings, 1 reply; 13+ messages in thread
From: Miles Bader @ 2008-06-10 1:26 UTC (permalink / raw)
To: Stefan Monnier; +Cc: John Paul Wallington, emacs-devel
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Regardless of what some newbies think, buffer names and filenames are
>> not the same. It is quite reasonable for someone to want to have one be
>> case-insensitive but not the other.
>
> Maybe it's reasonable, but I don't think it matters.
> So this is irrelevant without a more concrete reason.
I've found case-insensitivity in buffer-name matching generated a lot of
annoying "conflicts" due to non-file buffers (e.g. *Group* and *grep*).
[I currently use case-insensitive at work, and case-sensitive at home :-]
Since there wasn't much choice in the past, I've not experimented with
other combinations, but I'd like to.
-Miles
--
A zen-buddhist walked into a pizza shop and
said, "Make me one with everything."
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: add `read-buffer-completion-ignore-case' ?
2008-06-10 1:26 ` Miles Bader
@ 2008-06-10 2:41 ` Stefan Monnier
0 siblings, 0 replies; 13+ messages in thread
From: Stefan Monnier @ 2008-06-10 2:41 UTC (permalink / raw)
To: Miles Bader; +Cc: John Paul Wallington, emacs-devel
>>> Regardless of what some newbies think, buffer names and filenames are
>>> not the same. It is quite reasonable for someone to want to have one be
>>> case-insensitive but not the other.
>>
>> Maybe it's reasonable, but I don't think it matters.
>> So this is irrelevant without a more concrete reason.
> I've found case-insensitivity in buffer-name matching generated a lot of
> annoying "conflicts" due to non-file buffers (e.g. *Group* and *grep*).
> [I currently use case-insensitive at work, and case-sensitive at home :-]
> Since there wasn't much choice in the past, I've not experimented with
> other combinations, but I'd like to.
But that'll only affect people who've always used case-insensitive
matching everywhere until now.
Stefan
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-06-10 2:41 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-08 21:28 add `read-buffer-completion-ignore-case' ? John Paul Wallington
2008-06-08 22:46 ` Drew Adams
2008-06-08 22:51 ` doc strings for read-*-completion-ignore-case [was: add `read-buffer-completion-ignore-case' ?] Drew Adams
2008-06-09 1:53 ` add `read-buffer-completion-ignore-case' ? Stefan Monnier
2008-06-09 2:59 ` Miles Bader
2008-06-09 6:45 ` Drew Adams
2008-06-09 8:45 ` Eli Zaretskii
2008-06-09 9:09 ` David Kastrup
2008-06-09 9:10 ` Juanma Barranquero
2008-06-10 1:15 ` Stefan Monnier
2008-06-10 1:26 ` Miles Bader
2008-06-10 2:41 ` Stefan Monnier
2008-06-09 12:10 ` John Paul Wallington
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).