From: Paul Eggert <eggert@cs.ucla.edu>
To: Oleh Krehel <ohwoeowho@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: Emacs rewrite in a maintainable language
Date: Mon, 12 Oct 2015 15:39:11 -0700 [thread overview]
Message-ID: <561C368F.6010306@cs.ucla.edu> (raw)
In-Reply-To: <87h9lwyv33.fsf@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1013 bytes --]
On 10/12/2015 08:17 AM, Oleh Krehel wrote:
> Quoting the Emacs sources:
>
> # define MIN(a,b) ((a) < (b) ? (a) : (b))
> #define streq(X, Y) (*(X) == *(Y) && strcmp ((X) + 1, (Y) + 1) == 0)
> #define SET_FLAG(F, FLAG) ((F) |= (FLAG))
> #define HAS_FLAG(F, FLAG) (((F) & (FLAG)) != 0)
> #define xnew(n, Type) ((Type *) xmalloc ((n) * sizeof (Type)))
> #define xrnew(op, n, Type) ((op) = (Type *) xrealloc (op, (n) * sizeof (Type)))
> #define switch_line_buffers() (curndx = 1 - curndx)
> #define curlinepos (lbs[curndx].linepos)
> #define BVAR(buf, field) ((buf)->field ## _)
>
> Some of these can be replaced with plain type checked C++
Only BVAR belongs to the Emacs core. The other macros belong to
auxiliary executables that presumably would be unaffected by any rewrite
of the core. Anyway, for fun I just now replaced streq, SET_FLAG, and
HAS_FLAG with functions, in the attached patch. More work needs to be
done in this area but one step at a time....
[-- Attachment #2: 0001-Unmacroize-ebrowse.c-and-etags.c-a-bit.patch --]
[-- Type: text/x-patch, Size: 8095 bytes --]
From ddeec8ae168382bc16658f6836489ad26d7cf755 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Mon, 12 Oct 2015 15:30:18 -0700
Subject: [PATCH] Unmacroize ebrowse.c and etags.c a bit
* lib-src/ebrowse.c (READ_CHUNK_SIZE): Now an enum constant.
(streq, filename_eq, set_flag, has_flag): Now inline functions.
(set_flag): First arg is now an address, not an lvalue.
All callers changed.
(filename_eq, set_flag, has_flag):
Rename from FILENAME_EQ, SET_FLAG, HAS_FLAG.
All callers changed.
* lib-src/etags.c (streq, strcaseeq, strneq, strncaseeq):
Now inline functions. Remove asserts that are unnecessary these
days (and in some cases were too-generous anyway).
---
lib-src/ebrowse.c | 84 ++++++++++++++++++++++++++++++++-----------------------
lib-src/etags.c | 27 +++++++++++++++---
2 files changed, 72 insertions(+), 39 deletions(-)
diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c
index 09edc7d..f2093ae 100644
--- a/lib-src/ebrowse.c
+++ b/lib-src/ebrowse.c
@@ -32,27 +32,32 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define SEEK_END 2
#endif
-/* Conditionalize function prototypes. */
-
-/* Value is non-zero if strings X and Y compare equal. */
-
-#define streq(X, Y) (*(X) == *(Y) && strcmp ((X) + 1, (Y) + 1) == 0)
-
#include <min-max.h>
/* Files are read in chunks of this number of bytes. */
-#define READ_CHUNK_SIZE (100 * 1024)
+enum { READ_CHUNK_SIZE = 100 * 1024 };
-#if defined (__MSDOS__)
-#define FILENAME_EQ(X,Y) (strcasecmp (X,Y) == 0)
-#else
-#if defined (WINDOWSNT)
-#define FILENAME_EQ(X,Y) (stricmp (X,Y) == 0)
+/* Value is true if strings X and Y compare equal. */
+
+static bool
+streq (char const *x, char const *y)
+{
+ return strcmp (x, y) == 0;
+}
+
+static bool
+filename_eq (char const *x, char const *y)
+{
+#ifdef __MSDOS__
+ return strcasecmp (x, y) == 0;
+#elif defined WINDOWSNT
+ return stricmp (x, y) == 0;
#else
-#define FILENAME_EQ(X,Y) (streq (X,Y))
-#endif
+ return streq (x, y);
#endif
+}
+
/* The default output file name. */
#define DEFAULT_OUTFILE "BROWSE"
@@ -217,10 +222,19 @@ enum visibility
#define F_EXTERNC 256 /* Is declared extern "C". */
#define F_DEFINE 512 /* Is a #define. */
-/* Two macros to set and test a bit in an int. */
+/* Set and test a bit in an int. */
-#define SET_FLAG(F, FLAG) ((F) |= (FLAG))
-#define HAS_FLAG(F, FLAG) (((F) & (FLAG)) != 0)
+static void
+set_flag (int *f, int flag)
+{
+ *f |= flag;
+}
+
+static bool
+has_flag (int f, int flag)
+{
+ return (f & flag) != 0;
+}
/* Structure describing a class member. */
@@ -682,7 +696,7 @@ add_member_decl (struct sym *cls, char *name, char *regexp, int pos, unsigned in
m = add_member (cls, name, var, sc, hash);
/* Have we seen a new filename? If so record that. */
- if (!cls->filename || !FILENAME_EQ (cls->filename, filename))
+ if (!cls->filename || !filename_eq (cls->filename, filename))
m->filename = filename;
m->regexp = regexp;
@@ -745,7 +759,7 @@ add_member_defn (struct sym *cls, char *name, char *regexp, int pos, unsigned in
if (!cls->sfilename)
cls->sfilename = filename;
- if (!FILENAME_EQ (cls->sfilename, filename))
+ if (!filename_eq (cls->sfilename, filename))
m->def_filename = filename;
m->def_regexp = regexp;
@@ -830,7 +844,7 @@ add_global_decl (char *name, char *regexp, int pos, unsigned int hash, int var,
if (!found)
{
if (!global_symbols->filename
- || !FILENAME_EQ (global_symbols->filename, filename))
+ || !filename_eq (global_symbols->filename, filename))
m->filename = filename;
m->regexp = regexp;
@@ -931,11 +945,11 @@ mark_virtual (struct sym *r)
for (p = r->subs; p; p = p->next)
{
for (m = r->fns; m; m = m->next)
- if (HAS_FLAG (m->flags, F_VIRTUAL))
+ if (has_flag (m->flags, F_VIRTUAL))
{
for (m2 = p->sym->fns; m2; m2 = m2->next)
if (m->param_hash == m2->param_hash && streq (m->name, m2->name))
- SET_FLAG (m2->flags, F_VIRTUAL);
+ set_flag (&m2->flags, F_VIRTUAL);
}
mark_virtual (p->sym);
@@ -1159,7 +1173,7 @@ sym_scope_1 (struct sym *p)
strcpy (scope_buffer + scope_buffer_len, p->name);
scope_buffer_len += len;
- if (HAS_FLAG (p->flags, F_TEMPLATE))
+ if (has_flag (p->flags, F_TEMPLATE))
{
ensure_scope_buffer_room (3);
strcpy (scope_buffer + scope_buffer_len, "<>");
@@ -2435,7 +2449,7 @@ parm_list (int *flags)
{
/* We can overload the same function on `const' */
hash = (hash << 1) ^ CONST;
- SET_FLAG (*flags, F_CONST);
+ set_flag (flags, F_CONST);
MATCH ();
}
@@ -2443,7 +2457,7 @@ parm_list (int *flags)
{
MATCH ();
SKIP_MATCHING_IF ('(');
- SET_FLAG (*flags, F_THROW);
+ set_flag (flags, F_THROW);
}
if (LOOKING_AT ('='))
@@ -2452,7 +2466,7 @@ parm_list (int *flags)
if (LOOKING_AT (CINT) && yyival == 0)
{
MATCH ();
- SET_FLAG (*flags, F_PURE);
+ set_flag (flags, F_PURE);
}
}
}
@@ -2505,25 +2519,25 @@ member (struct sym *cls, int vis)
/* A function or class may follow. */
case TEMPLATE:
MATCH ();
- SET_FLAG (flags, F_TEMPLATE);
+ set_flag (&flags, F_TEMPLATE);
/* Skip over template argument list */
SKIP_MATCHING_IF ('<');
break;
case EXPLICIT:
- SET_FLAG (flags, F_EXPLICIT);
+ set_flag (&flags, F_EXPLICIT);
goto typeseen;
case MUTABLE:
- SET_FLAG (flags, F_MUTABLE);
+ set_flag (&flags, F_MUTABLE);
goto typeseen;
case T_INLINE:
- SET_FLAG (flags, F_INLINE);
+ set_flag (&flags, F_INLINE);
goto typeseen;
case VIRTUAL:
- SET_FLAG (flags, F_VIRTUAL);
+ set_flag (&flags, F_VIRTUAL);
goto typeseen;
case '[':
@@ -2761,7 +2775,7 @@ parse_classname (void)
if (LOOKING_AT ('<'))
{
skip_matching ();
- SET_FLAG (last_class->flags, F_TEMPLATE);
+ set_flag (&last_class->flags, F_TEMPLATE);
}
if (!LOOKING_AT (DCOLON))
@@ -3189,7 +3203,7 @@ declaration (int flags)
break;
case T_INLINE:
- SET_FLAG (flags, F_INLINE);
+ set_flag (&flags, F_INLINE);
MATCH ();
break;
@@ -3335,14 +3349,14 @@ globals (int start_flags)
MATCH_IF ('}');
}
else
- SET_FLAG (flags, F_EXTERNC);
+ set_flag (&flags, F_EXTERNC);
}
break;
case TEMPLATE:
MATCH ();
SKIP_MATCHING_IF ('<');
- SET_FLAG (flags, F_TEMPLATE);
+ set_flag (&flags, F_TEMPLATE);
break;
case CLASS: case STRUCT: case UNION:
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 791722d..8b980d3 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -150,10 +150,29 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
# define CTAGS false
#endif
-#define streq(s,t) (assert ((s)!=NULL || (t)!=NULL), !strcmp (s, t))
-#define strcaseeq(s,t) (assert ((s)!=NULL && (t)!=NULL), !c_strcasecmp (s, t))
-#define strneq(s,t,n) (assert ((s)!=NULL || (t)!=NULL), !strncmp (s, t, n))
-#define strncaseeq(s,t,n) (assert ((s)!=NULL && (t)!=NULL), !c_strncasecmp (s, t, n))
+static bool
+streq (char const *s, char const *t)
+{
+ return strcmp (s, t) == 0;
+}
+
+static bool
+strcaseeq (char const *s, char const *t)
+{
+ return c_strcasecmp (s, t) == 0;
+}
+
+static bool
+strneq (char const *s, char const *t, size_t n)
+{
+ return strncmp (s, t, n) == 0;
+}
+
+static bool
+strncaseeq (char const *s, char const *t, size_t n)
+{
+ return c_strncasecmp (s, t, n) == 0;
+}
/* C is not in a name. */
static bool
--
2.1.0
next prev parent reply other threads:[~2015-10-12 22:39 UTC|newest]
Thread overview: 250+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-11 8:11 Emacs rewrite in a maintainable language Przemysław Wojnowski
2015-10-11 8:17 ` David Kastrup
2015-10-11 22:02 ` Marcin Borkowski
2015-10-11 22:14 ` John Wiegley
2015-10-11 22:37 ` Óscar Fuentes
2015-10-11 22:37 ` Marcin Borkowski
2015-10-11 22:49 ` John Wiegley
2015-10-11 22:51 ` Óscar Fuentes
2015-10-11 23:12 ` Drew Adams
2015-10-12 2:43 ` Eli Zaretskii
2015-10-12 15:35 ` Eli Zaretskii
2015-10-12 21:30 ` Daniel Colascione
2015-10-12 20:01 ` Richard Stallman
2015-10-11 8:54 ` Alexis
2015-10-11 10:53 ` Przemysław Wojnowski
2015-10-11 11:23 ` Thomas Koch
2015-10-11 13:11 ` Dmitry Gutov
2015-10-11 13:36 ` David Kastrup
2015-10-11 13:39 ` Dmitry Gutov
2015-10-11 13:55 ` David Kastrup
2015-10-11 14:03 ` Dmitry Gutov
2015-10-11 12:52 ` Daniel Colascione
2015-10-11 12:59 ` Fabrice Popineau
2015-10-11 17:25 ` John Wiegley
2015-10-11 18:32 ` Óscar Fuentes
2015-10-11 19:14 ` Eli Zaretskii
2015-10-11 19:43 ` Óscar Fuentes
2015-10-11 19:53 ` Eli Zaretskii
2015-10-11 20:13 ` Óscar Fuentes
2015-10-12 2:33 ` Eli Zaretskii
2015-10-12 3:59 ` Paul Eggert
2015-10-12 8:12 ` Steinar Bang
2015-10-12 9:36 ` Marcin Borkowski
2015-10-12 10:20 ` David Kastrup
2015-10-12 12:23 ` Óscar Fuentes
2015-10-12 16:08 ` Eli Zaretskii
2015-10-12 20:00 ` Richard Stallman
2015-10-13 2:36 ` Rustom Mody
2015-10-12 10:56 ` Michael Heerdegen
2015-10-11 21:52 ` John Wiegley
2015-10-12 7:14 ` David Kastrup
2015-10-12 12:48 ` Oleh Krehel
2015-10-12 13:22 ` Óscar Fuentes
2015-10-12 14:18 ` Oleh Krehel
2015-10-12 15:04 ` David Kastrup
2015-10-12 18:24 ` John Wiegley
2015-10-12 19:21 ` Óscar Fuentes
2015-10-12 19:39 ` John Wiegley
2015-10-12 19:46 ` Eli Zaretskii
2015-10-12 19:58 ` Eli Zaretskii
2015-10-12 20:11 ` John Wiegley
2015-10-12 20:42 ` Marcin Borkowski
2015-10-12 20:46 ` Óscar Fuentes
2015-10-13 14:57 ` Eli Zaretskii
2015-10-13 16:22 ` John Wiegley
2015-10-13 16:40 ` Drew Adams
2015-10-13 16:49 ` John Wiegley
2015-10-12 20:40 ` Drew Adams
2015-10-13 4:18 ` John Wiegley
2015-10-13 6:00 ` immerrr again
2015-10-13 14:59 ` Eli Zaretskii
2015-10-13 1:12 ` Óscar Fuentes
2015-10-13 10:01 ` David Kastrup
2015-10-13 15:12 ` Eli Zaretskii
2015-10-13 15:20 ` David Kastrup
2015-10-14 15:04 ` Chris Patti
2015-10-14 15:34 ` Jay Belanger
2015-10-16 12:25 ` Guile-Emacs Ludovic Courtès
2015-10-16 12:03 ` Emacs rewrite in a maintainable language Ludovic Courtès
2015-10-16 13:30 ` Eli Zaretskii
2015-10-16 14:55 ` Wolfgang Jenkner
2015-10-16 15:14 ` Eli Zaretskii
2015-10-16 15:25 ` Ludovic Courtès
2015-10-16 15:51 ` David Kastrup
2015-10-16 14:29 ` David Kastrup
2015-10-16 15:08 ` Eli Zaretskii
2015-10-16 15:28 ` David Kastrup
2015-10-16 16:05 ` Eli Zaretskii
2015-10-16 15:31 ` Ludovic Courtès
2015-10-16 16:11 ` Eli Zaretskii
2015-10-16 19:34 ` Przemysław Wojnowski
2015-10-16 19:51 ` David Kastrup
2015-10-16 19:52 ` Eli Zaretskii
2015-10-16 20:51 ` Ludovic Courtès
2015-10-17 5:27 ` David Kastrup
2015-10-17 7:20 ` Eli Zaretskii
2015-10-17 9:44 ` Ludovic Courtès
2015-10-17 10:24 ` Eli Zaretskii
2015-10-18 10:22 ` Ludovic Courtès
2015-10-18 11:33 ` David Kastrup
2015-10-18 12:54 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 13:17 ` David Kastrup
2015-10-18 14:40 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 15:31 ` David Kastrup
2015-10-18 16:19 ` Eli Zaretskii
2015-10-18 16:37 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 16:44 ` Eli Zaretskii
2015-10-18 17:06 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 17:11 ` David Kastrup
2015-10-18 17:36 ` Eli Zaretskii
2015-10-18 17:52 ` John Wiegley
2015-10-18 18:23 ` Daniel Colascione
2015-10-18 18:35 ` David Kastrup
2015-10-18 18:53 ` Daniel Colascione
2015-10-18 19:03 ` David Kastrup
2015-10-18 19:13 ` Paul Eggert
2015-10-18 19:35 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 19:49 ` Daniel Colascione
2015-10-19 7:59 ` Taylan Ulrich Bayırlı/Kammer
2015-10-19 10:50 ` Stephen J. Turnbull
2015-10-19 10:59 ` Eli Zaretskii
2015-10-19 11:31 ` David Kastrup
2015-10-19 12:04 ` David Kastrup
2015-10-19 11:24 ` David Kastrup
2015-10-20 4:18 ` Stephen J. Turnbull
2015-10-20 7:36 ` David Kastrup
2015-10-20 10:17 ` Stephen J. Turnbull
2015-10-19 12:26 ` Taylan Ulrich Bayırlı/Kammer
2015-10-19 12:53 ` David Kastrup
2015-10-19 17:43 ` Tom Tromey
2015-10-19 18:06 ` David Kastrup
2015-10-20 2:46 ` Tom Tromey
2015-10-19 8:46 ` David Kastrup
2015-10-19 9:39 ` Przemysław Wojnowski
2015-10-19 5:33 ` Richard Stallman
2015-10-26 11:01 ` Alexis
2015-10-18 19:16 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 22:38 ` Nicolas Petton
2015-10-20 7:34 ` John Wiegley
2015-10-18 16:40 ` John Wiegley
2015-10-18 16:56 ` David Kastrup
2015-10-18 17:46 ` Stephen J. Turnbull
2015-10-19 7:45 ` Gian Uberto Lauri
2015-10-17 15:38 ` David Kastrup
2015-10-17 16:25 ` Taylan Ulrich Bayırlı/Kammer
2015-10-17 16:43 ` David Kastrup
2015-10-17 17:00 ` Taylan Ulrich Bayırlı/Kammer
2015-10-17 16:48 ` Eli Zaretskii
2015-10-17 17:03 ` Taylan Ulrich Bayırlı/Kammer
2015-10-17 17:08 ` David Kastrup
2015-10-17 17:10 ` Eli Zaretskii
2015-10-17 18:31 ` Stephen J. Turnbull
2015-10-17 17:04 ` David Kastrup
2015-10-17 17:32 ` Taylan Ulrich Bayırlı/Kammer
2015-10-17 17:42 ` David Kastrup
2015-10-17 18:34 ` Taylan Ulrich Bayırlı/Kammer
2015-10-17 19:15 ` Eli Zaretskii
2015-10-17 21:22 ` Taylan Ulrich Bayırlı/Kammer
2015-10-18 0:23 ` John Wiegley
2015-10-18 15:53 ` Richard Stallman
2015-10-18 16:58 ` Tom Tromey
2015-10-18 17:40 ` John Wiegley
2015-10-18 19:40 ` Eli Zaretskii
2015-10-18 20:47 ` David Kastrup
2015-10-19 3:55 ` Tom Tromey
2015-10-20 7:33 ` John Wiegley
2015-10-12 19:43 ` Eli Zaretskii
2015-10-13 8:27 ` Przemysław Wojnowski
2015-10-13 8:52 ` Gian Uberto Lauri
2015-10-13 10:19 ` Tassilo Horn
2015-10-13 15:14 ` Eli Zaretskii
2015-10-13 19:45 ` Tassilo Horn
2015-10-13 15:05 ` Eli Zaretskii
2015-10-13 16:09 ` John Wiegley
2015-10-13 20:43 ` Przemysław Wojnowski
2015-10-13 16:06 ` John Wiegley
2015-10-13 20:20 ` Przemysław Wojnowski
2015-10-13 21:22 ` emacs IDE features (was: Emacs rewrite in a maintainable language) Andrés Ramírez
2015-10-13 22:13 ` emacs IDE features John Wiegley
2015-10-14 11:11 ` Phillip Lord
2015-10-16 23:13 ` John Wiegley
2015-10-17 7:40 ` Eli Zaretskii
2015-10-17 23:51 ` John Wiegley
2015-10-18 0:48 ` Sacha Chua
2015-10-18 2:34 ` Xue Fuqiao
2015-10-18 17:05 ` Sacha Chua
2015-10-18 17:31 ` John Wiegley
2015-10-18 16:21 ` John Wiegley
2015-10-19 16:37 ` Christopher Allan Webber
2015-10-18 16:47 ` Eli Zaretskii
2015-10-18 17:30 ` John Wiegley
2015-10-19 10:30 ` Phillip Lord
2015-10-20 6:56 ` John Wiegley
2015-10-13 22:10 ` Emacs rewrite in a maintainable language John Wiegley
2015-10-12 23:00 ` Camm Maguire
2015-10-13 1:38 ` Alexis
2015-10-13 1:40 ` Daniel Colascione
2015-10-13 23:34 ` Richard Stallman
2015-10-13 23:55 ` John Wiegley
2015-10-13 5:28 ` Ken Raeburn
2015-10-13 5:39 ` John Wiegley
2015-10-13 10:13 ` David Kastrup
2015-10-14 1:43 ` Daniel Colascione
2015-10-13 6:49 ` Stephen J. Turnbull
2015-10-12 13:50 ` David Kastrup
2015-10-12 15:17 ` Oleh Krehel
2015-10-12 15:35 ` David Kastrup
2015-10-12 16:29 ` Eli Zaretskii
2015-10-12 22:39 ` Paul Eggert [this message]
2015-10-13 11:27 ` Oleh Krehel
2015-10-13 11:46 ` Alan Mackenzie
2015-10-13 12:02 ` Oleh Krehel
2015-10-13 12:21 ` Alan Mackenzie
2015-10-13 12:22 ` Mathieu Lirzin
2015-10-13 13:52 ` John Yates
2015-10-13 14:30 ` David Kastrup
2015-10-13 16:26 ` Andreas Schwab
2015-10-13 16:40 ` John Wiegley
2015-10-13 14:38 ` Oleh Krehel
2015-10-13 13:06 ` Sergey Organov
2015-10-13 14:19 ` Artur Malabarba
2015-10-13 14:39 ` David Kastrup
2015-10-13 15:21 ` Artur Malabarba
2015-10-13 15:53 ` David Kastrup
2015-10-13 16:09 ` Oleh Krehel
2015-10-13 16:23 ` David Kastrup
2015-10-13 16:31 ` Eli Zaretskii
2015-10-13 16:38 ` David Kastrup
2015-10-13 15:21 ` Eli Zaretskii
2015-10-13 15:42 ` David Kastrup
2015-10-13 15:32 ` Paul Eggert
2015-10-13 16:13 ` Oleh Krehel
2015-10-13 21:02 ` Andy Moreton
2015-10-14 8:15 ` Oleh Krehel
2015-10-14 13:28 ` Andy Moreton
2015-10-14 16:18 ` Eli Zaretskii
2015-10-14 10:22 ` Przemysław Wojnowski
2015-10-14 10:56 ` Tassilo Horn
2015-10-14 11:14 ` Przemysław Wojnowski
2015-10-14 11:33 ` Oleh Krehel
2015-10-14 12:12 ` Tassilo Horn
2015-10-14 11:46 ` David Kastrup
2015-10-14 12:29 ` Tassilo Horn
2015-10-14 11:21 ` Mathieu Lirzin
2015-10-14 16:05 ` John Wiegley
2015-10-13 16:13 ` John Wiegley
2015-10-12 15:09 ` Paul Eggert
2015-10-12 15:24 ` David Kastrup
2015-10-12 15:24 ` Oleh Krehel
2015-10-12 16:31 ` Eli Zaretskii
2015-10-12 17:20 ` Stephen J. Turnbull
2015-10-13 12:02 ` Marcus Harnisch
2015-10-13 23:38 ` Richard Stallman
2015-10-14 1:46 ` Daniel Colascione
2015-10-14 13:08 ` Marcus Harnisch
2015-10-12 16:18 ` Eli Zaretskii
2015-10-12 17:47 ` Steinar Bang
2015-10-12 17:59 ` David Kastrup
2015-10-12 21:28 ` Daniel Colascione
2015-10-11 18:36 ` Przemysław Wojnowski
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=561C368F.6010306@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=emacs-devel@gnu.org \
--cc=ohwoeowho@gmail.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.