unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Paul Eggert <eggert@cs.ucla.edu>
To: Keith David Bershatsky <esq@lawlist.com>
Cc: Alan Mackenzie <acm@muc.de>,
	Daniel Colascione <dancol@dancol.org>,
	Andreas Schwab <schwab@linux-m68k.org>,
	Stefan Monnier <monnier@iro.umontreal.ca>,
	emacs-devel@gnu.org
Subject: Re: buffer.c/buffer.h: How to add new buffer-local variables?
Date: Sun, 7 Apr 2019 22:23:07 -0700	[thread overview]
Message-ID: <ebb6558b-99f8-7c2c-8e5b-6588163f0733@cs.ucla.edu> (raw)
In-Reply-To: <m2v9zqy1eh.wl%esq@lawlist.com>

[-- Attachment #1: Type: text/plain, Size: 865 bytes --]

Keith David Bershatsky wrote:
> Perhaps there is something that may stand out (to a trained programmer) in the 01/31/2019 commit ....

It did change the buffer struct layout, so it's a good candidate for a culprit.

For what it's worth, I cannot reproduce the problem in a 32-bit build under 
Fedora 29 x86-64 (GCC 8.3.1). I configured this way:

./configure CC=gcc -m32 -march=native --enable-gcc-warnings 
--without-imagemagick --without-gif --with-modules --enable-checking=yes,glyphs 
--enable-check-lisp-object-type --with-gnutls=no

and built Emacs master with the attached patch x.diff.

My guess is that the problem has something to do with the unportable assumptions 
we've long made about struct buffer layout. I am attaching ptype.txt, the output 
of the GDB command "ptype /o current_buffer" that Eli suggested; please compare 
it to your ptype output.

[-- Attachment #2: x.diff --]
[-- Type: text/x-patch, Size: 11218 bytes --]

diff --git a/src/buffer.c b/src/buffer.c
index ab47748191..2f8cb1d7c5 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -133,6 +133,69 @@ CHECK_OVERLAY (Lisp_Object x)
 
 /* These setters are used only in this file, so they can be private.
    The public setters are inline functions defined in buffer.h.  */
+
+
+/* *************************************************************************** */
+/* begin MULTIPLE-CURSORS */
+
+static void
+bset_mc_real_fake_cursor (struct buffer *b, Lisp_Object val)
+{
+  b->mc_real_fake_cursor_ = val;
+}
+
+static void
+bset_mc_conf (struct buffer *b, Lisp_Object val)
+{
+  b->mc_conf_ = val;
+}
+
+static void
+bset_mc_inactive_windows (struct buffer *b, Lisp_Object val)
+{
+  b->mc_inactive_windows_ = val;
+}
+
+static void
+bset_crosshairs (struct buffer *b, Lisp_Object val)
+{
+  b->crosshairs_ = val;
+}
+
+static void
+bset_ch_horizontal_ruler (struct buffer *b, Lisp_Object val)
+{
+  b->ch_horizontal_ruler_ = val;
+}
+
+static void
+bset_ch_vertical_ruler (struct buffer *b, Lisp_Object val)
+{
+  b->ch_vertical_ruler_ = val;
+}
+
+static void
+bset_ch_inactive_windows (struct buffer *b, Lisp_Object val)
+{
+  b->ch_inactive_windows_ = val;
+}
+
+static void
+bset_fc_visible (struct buffer *b, Lisp_Object val)
+{
+  b->fc_visible_ = val;
+}
+
+static void
+bset_fc_inactive_windows (struct buffer *b, Lisp_Object val)
+{
+  b->fc_inactive_windows_ = val;
+}
+
+/* end MULTIPLE-CURSORS */
+/* *************************************************************************** */
+
+
 static void
 bset_abbrev_mode (struct buffer *b, Lisp_Object val)
 {
@@ -5142,6 +5205,24 @@ init_buffer_once (void)
   bset_last_selected_window (&buffer_local_flags, make_fixnum (0));
 
   idx = 1;
+
+
+/* *************************************************************************** */
+/* MULTIPLE-CURSORS */
+
+  XSETFASTINT (BVAR (&buffer_local_flags, mc_real_fake_cursor), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, mc_conf), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, mc_inactive_windows), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, crosshairs), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, ch_horizontal_ruler), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, ch_vertical_ruler), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, ch_inactive_windows), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, fc_visible), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, fc_inactive_windows), idx); ++idx;
+
+/* *************************************************************************** */
+
+
   XSETFASTINT (BVAR (&buffer_local_flags, mode_line_format), idx); ++idx;
   XSETFASTINT (BVAR (&buffer_local_flags, abbrev_mode), idx); ++idx;
   XSETFASTINT (BVAR (&buffer_local_flags, overwrite_mode), idx); ++idx;
@@ -5228,6 +5309,24 @@ init_buffer_once (void)
   /* Must do these before making the first buffer! */
 
   /* real setup is done in bindings.el */
+
+
+/* *************************************************************************** */
+/* MULTIPLE-CURSORS */
+
+  bset_mc_real_fake_cursor (&buffer_defaults, Qt);
+  bset_mc_conf (&buffer_defaults, Qnil);
+  bset_mc_inactive_windows (&buffer_defaults, Qt);
+  bset_crosshairs (&buffer_defaults, Qnil);
+  bset_ch_horizontal_ruler (&buffer_defaults, Qt);
+  bset_ch_vertical_ruler (&buffer_defaults, Qt);
+  bset_ch_inactive_windows (&buffer_defaults, Qt);
+  bset_fc_visible (&buffer_defaults, Qnil);
+  bset_fc_inactive_windows (&buffer_defaults, Qt);
+
+/* *************************************************************************** */
+
+
   bset_mode_line_format (&buffer_defaults, build_pure_c_string ("%-"));
   bset_header_line_format (&buffer_defaults, Qnil);
   bset_abbrev_mode (&buffer_defaults, Qnil);
@@ -5464,6 +5563,23 @@ syms_of_buffer (void)
   staticpro (&QSFundamental);
   staticpro (&Vbuffer_alist);
 
+
+/* *************************************************************************** */
+/* MULTIPLE-CURSORS */
+
+  DEFSYM (Qmc_real_fake_cursor, "mc-real-fake-cursor");
+  DEFSYM (Qmc_conf, "mc-conf");
+  DEFSYM (Qmc_inactive_windows, "mc-inactive-windows");
+  DEFSYM (Qcrosshairs, "crosshairs");
+  DEFSYM (Qch_horizontal_ruler, "ch-horizontal-ruler");
+  DEFSYM (Qch_vertical_ruler, "ch-vertical-ruler");
+  DEFSYM (Qch_inactive_windows, "ch-inactive-windows");
+  DEFSYM (Qfc_visible, "fc-visible");
+  DEFSYM (Qfc_visible_inactive_window, "fc-inactive-window");
+
+/* *************************************************************************** */
+
+
   DEFSYM (Qchoice, "choice");
   DEFSYM (Qleft, "left");
   DEFSYM (Qright, "right");
@@ -5501,6 +5617,41 @@ syms_of_buffer (void)
   Fput (Qprotected_field, Qerror_message,
 	build_pure_c_string ("Attempt to modify a protected field"));
 
+
+/* *************************************************************************** */
+/* MULTIPLE-CURSORS */
+
+  DEFVAR_PER_BUFFER ("mc-real-fake-cursor", &BVAR (current_buffer, mc_real_fake_cursor), Qnil,
+    doc: /* A bufer-local variable to set the cursor type of the real fake cursor. */);
+
+  DEFVAR_PER_BUFFER ("mc-conf", &BVAR (current_buffer, mc_conf), Qnil,
+    doc: /* A bufer-local variable to store the value of the multiple cursors to be displayed
+during the next redisplay. */);
+
+  DEFVAR_PER_BUFFER ("mc-inactive-windows", &BVAR (current_buffer, mc_inactive_windows), Qnil,
+    doc: /* When non-nil, draw multiple cursors in inactive windows. */);
+
+  DEFVAR_PER_BUFFER ("crosshairs", &BVAR (current_buffer, crosshairs), Qnil,
+    doc: /* A bufer-local variable to activate/deactivate crosshairs. */);
+
+  DEFVAR_PER_BUFFER ("ch-horizontal-ruler", &BVAR (current_buffer, ch_horizontal_ruler), Qnil,
+    doc: /* A bufer-local variable to activate/deactivate the crosshairs horizontal ruler. */);
+
+  DEFVAR_PER_BUFFER ("ch-vertical-ruler", &BVAR (current_buffer, ch_vertical_ruler), Qnil,
+    doc: /* A bufer-local variable to activate/deactivate the crosshairs vertical ruler. */);
+
+  DEFVAR_PER_BUFFER ("ch-inactive-windows", &BVAR (current_buffer, ch_inactive_windows), Qnil,
+    doc: /* When non-nil, draw crosshairs in inactive windows. */);
+
+  DEFVAR_PER_BUFFER ("fc-visible", &BVAR (current_buffer, fc_visible), Qnil,
+    doc: /* A bufer-local variable to turn on/off the multiple cursors fill column. */);
+
+  DEFVAR_PER_BUFFER ("fc-inactive-windows", &BVAR (current_buffer, fc_inactive_windows), Qnil,
+    doc: /* When non-nil, draw multiple cursors fill column in inactive windows. */);
+
+/* *************************************************************************** */
+
+
   DEFVAR_PER_BUFFER ("header-line-format",
 		     &BVAR (current_buffer, header_line_format),
 		     Qnil,
diff --git a/src/buffer.h b/src/buffer.h
index 63b162161c..4dd91911da 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -636,6 +636,40 @@ struct buffer
      cache are enabled.  See search.c, indent.c and bidi.c for details.  */
   Lisp_Object cache_long_scans_;
 
+
+/* *************************************************************************** */
+/* MULTIPLE-CURSORS */
+
+  /* The cursor type of the real fake cursor. */
+  Lisp_Object mc_real_fake_cursor_;
+
+  /* The name of list used by multiple cursors for next redisplay. */
+  Lisp_Object mc_conf_;
+
+  /* Whether to draw multiple cursors in inactive windows. */
+  Lisp_Object mc_inactive_windows_;
+
+  /* The name of the buffer-local variable. */
+  Lisp_Object crosshairs_;
+
+  /* The name of the crosshairs horizontal ruler. */
+  Lisp_Object ch_horizontal_ruler_;
+
+  /* The name of the crosshairs vertical ruler. */
+  Lisp_Object ch_vertical_ruler_;
+
+  /* Whether to draw crosshairs in inactive windows. */
+  Lisp_Object ch_inactive_windows_;
+
+  /* The name of the buffer-local variable. */
+  Lisp_Object fc_visible_;
+
+  /* Whether to draw multiple cursors fill column in inactive windows. */
+  Lisp_Object fc_inactive_windows_;
+
+/* *************************************************************************** */
+
+
   /* If the width run cache is enabled, this table contains the
      character widths width_run_cache (see above) assumes.  When we
      do a thorough redisplay, we compare this against the buffer's
@@ -787,14 +821,21 @@ struct buffer
      an indirect buffer since it counts as its base buffer.  */
   int window_count;
 
+
+/* *************************************************************************** */
+/* MULTIPLE-CURSORS */
+
   /* A non-zero value in slot IDX means that per-buffer variable
      with index IDX has a local value in this buffer.  The index IDX
      for a buffer-local variable is stored in that variable's slot
      in buffer_local_flags as a Lisp integer.  If the index is -1,
      this means the variable is always local in all buffers.  */
-#define MAX_PER_BUFFER_VARS 50
+#define MAX_PER_BUFFER_VARS 60
   char local_flags[MAX_PER_BUFFER_VARS];
 
+/* *************************************************************************** */
+
+
   /* Set to the modtime of the visited file when read or written.
      modtime.tv_nsec == NONEXISTENT_MODTIME_NSECS means
      visited file was nonexistent.  modtime.tv_nsec ==
@@ -903,6 +944,69 @@ XBUFFER (Lisp_Object a)
 /* Most code should use these functions to set Lisp fields in struct
    buffer.  (Some setters that are private to a single .c file are
    defined as static in those files.)  */
+
+
+/* *************************************************************************** */
+/* begin MULTIPLE-CURSORS */
+
+INLINE void
+bset_blv_mc_real_fake_cursor (struct buffer *b, Lisp_Object val)
+{
+  b->mc_real_fake_cursor_ = val;
+}
+
+INLINE void
+bset_blv_mc_conf (struct buffer *b, Lisp_Object val)
+{
+  b->mc_conf_ = val;
+}
+
+INLINE void
+bset_blv_mc_inactive_windows (struct buffer *b, Lisp_Object val)
+{
+  b->mc_inactive_windows_ = val;
+}
+
+INLINE void
+bset_blv_crosshairs (struct buffer *b, Lisp_Object val)
+{
+  b->crosshairs_ = val;
+}
+
+INLINE void
+bset_blv_ch_horizontal_ruler (struct buffer *b, Lisp_Object val)
+{
+  b->ch_horizontal_ruler_ = val;
+}
+
+INLINE void
+bset_blv_ch_vertical_ruler (struct buffer *b, Lisp_Object val)
+{
+  b->ch_vertical_ruler_ = val;
+}
+
+INLINE void
+bset_blv_ch_inactive_windows (struct buffer *b, Lisp_Object val)
+{
+  b->ch_inactive_windows_ = val;
+}
+
+INLINE void
+bset_blv_fc_visible (struct buffer *b, Lisp_Object val)
+{
+  b->fc_visible_ = val;
+}
+
+INLINE void
+bset_blv_fc_inactive_windows (struct buffer *b, Lisp_Object val)
+{
+  b->fc_inactive_windows_ = val;
+}
+
+/* end MULTIPLE-CURSORS */
+/* *************************************************************************** */
+
+
 INLINE void
 bset_bidi_paragraph_direction (struct buffer *b, Lisp_Object val)
 {
diff --git a/src/pdumper.c b/src/pdumper.c
index b19f206d1b..0b60f79a6c 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2770,9 +2770,6 @@ dump_hash_table (struct dump_context *ctx,
 static dump_off
 dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer)
 {
-#if CHECK_STRUCTS && !defined HASH_buffer_2CEE653E74
-# error "buffer changed. See CHECK_STRUCTS comment."
-#endif
   struct buffer munged_buffer = *in_buffer;
   struct buffer *buffer = &munged_buffer;
 

[-- Attachment #3: ptype.txt --]
[-- Type: text/plain, Size: 8076 bytes --]

(gdb) ptype /o current_buffer
type = struct buffer {
/*    0      |     4 */    union vectorlike_header {
/*                 4 */        ptrdiff_t size;

                               /* total size (bytes):    4 */
                           } header;
/*    4      |     4 */    Lisp_Object name_;
/*    8      |     4 */    Lisp_Object filename_;
/*   12      |     4 */    Lisp_Object directory_;
/*   16      |     4 */    Lisp_Object backed_up_;
/*   20      |     4 */    Lisp_Object save_length_;
/*   24      |     4 */    Lisp_Object auto_save_file_name_;
/*   28      |     4 */    Lisp_Object read_only_;
/*   32      |     4 */    Lisp_Object mark_;
/*   36      |     4 */    Lisp_Object local_var_alist_;
/*   40      |     4 */    Lisp_Object major_mode_;
/*   44      |     4 */    Lisp_Object mode_name_;
/*   48      |     4 */    Lisp_Object mode_line_format_;
/*   52      |     4 */    Lisp_Object header_line_format_;
/*   56      |     4 */    Lisp_Object keymap_;
/*   60      |     4 */    Lisp_Object abbrev_table_;
/*   64      |     4 */    Lisp_Object syntax_table_;
/*   68      |     4 */    Lisp_Object category_table_;
/*   72      |     4 */    Lisp_Object case_fold_search_;
/*   76      |     4 */    Lisp_Object tab_width_;
/*   80      |     4 */    Lisp_Object fill_column_;
/*   84      |     4 */    Lisp_Object left_margin_;
/*   88      |     4 */    Lisp_Object auto_fill_function_;
/*   92      |     4 */    Lisp_Object downcase_table_;
/*   96      |     4 */    Lisp_Object upcase_table_;
/*  100      |     4 */    Lisp_Object case_canon_table_;
/*  104      |     4 */    Lisp_Object case_eqv_table_;
/*  108      |     4 */    Lisp_Object truncate_lines_;
/*  112      |     4 */    Lisp_Object word_wrap_;
/*  116      |     4 */    Lisp_Object ctl_arrow_;
/*  120      |     4 */    Lisp_Object bidi_display_reordering_;
/*  124      |     4 */    Lisp_Object bidi_paragraph_direction_;
/*  128      |     4 */    Lisp_Object bidi_paragraph_separate_re_;
/*  132      |     4 */    Lisp_Object bidi_paragraph_start_re_;
/*  136      |     4 */    Lisp_Object selective_display_;
/*  140      |     4 */    Lisp_Object selective_display_ellipses_;
/*  144      |     4 */    Lisp_Object minor_modes_;
/*  148      |     4 */    Lisp_Object overwrite_mode_;
/*  152      |     4 */    Lisp_Object abbrev_mode_;
/*  156      |     4 */    Lisp_Object display_table_;
/*  160      |     4 */    Lisp_Object mark_active_;
/*  164      |     4 */    Lisp_Object enable_multibyte_characters_;
/*  168      |     4 */    Lisp_Object buffer_file_coding_system_;
/*  172      |     4 */    Lisp_Object file_format_;
/*  176      |     4 */    Lisp_Object auto_save_file_format_;
/*  180      |     4 */    Lisp_Object cache_long_scans_;
/*  184      |     4 */    Lisp_Object mc_real_fake_cursor_;
/*  188      |     4 */    Lisp_Object mc_conf_;
/*  192      |     4 */    Lisp_Object mc_inactive_windows_;
/*  196      |     4 */    Lisp_Object crosshairs_;
/*  200      |     4 */    Lisp_Object ch_horizontal_ruler_;
/*  204      |     4 */    Lisp_Object ch_vertical_ruler_;
/*  208      |     4 */    Lisp_Object ch_inactive_windows_;
/*  212      |     4 */    Lisp_Object fc_visible_;
/*  216      |     4 */    Lisp_Object fc_inactive_windows_;
/*  220      |     4 */    Lisp_Object width_table_;
/*  224      |     4 */    Lisp_Object pt_marker_;
/*  228      |     4 */    Lisp_Object begv_marker_;
/*  232      |     4 */    Lisp_Object zv_marker_;
/*  236      |     4 */    Lisp_Object point_before_scroll_;
/*  240      |     4 */    Lisp_Object file_truename_;
/*  244      |     4 */    Lisp_Object invisibility_spec_;
/*  248      |     4 */    Lisp_Object last_selected_window_;
/*  252      |     4 */    Lisp_Object display_count_;
/*  256      |     4 */    Lisp_Object left_margin_cols_;
/*  260      |     4 */    Lisp_Object right_margin_cols_;
/*  264      |     4 */    Lisp_Object left_fringe_width_;
/*  268      |     4 */    Lisp_Object right_fringe_width_;
/*  272      |     4 */    Lisp_Object fringes_outside_margins_;
/*  276      |     4 */    Lisp_Object scroll_bar_width_;
/*  280      |     4 */    Lisp_Object scroll_bar_height_;
/*  284      |     4 */    Lisp_Object vertical_scroll_bar_type_;
/*  288      |     4 */    Lisp_Object horizontal_scroll_bar_type_;
/*  292      |     4 */    Lisp_Object indicate_empty_lines_;
/*  296      |     4 */    Lisp_Object indicate_buffer_boundaries_;
/*  300      |     4 */    Lisp_Object fringe_indicator_alist_;
/*  304      |     4 */    Lisp_Object fringe_cursor_alist_;
/*  308      |     4 */    Lisp_Object display_time_;
/*  312      |     4 */    Lisp_Object scroll_up_aggressively_;
/*  316      |     4 */    Lisp_Object scroll_down_aggressively_;
/*  320      |     4 */    Lisp_Object cursor_type_;
/*  324      |     4 */    Lisp_Object extra_line_spacing_;
/*  328      |     4 */    Lisp_Object cursor_in_non_selected_windows_;
/*  332      |   100 */    struct buffer_text {
/*  332      |     4 */        unsigned char *beg;
/*  336      |     4 */        ptrdiff_t gpt;
/*  340      |     4 */        ptrdiff_t z;
/*  344      |     4 */        ptrdiff_t gpt_byte;
/*  348      |     4 */        ptrdiff_t z_byte;
/*  352      |     4 */        ptrdiff_t gap_size;
/*  356      |     8 */        modiff_count modiff;
/*  364      |     8 */        modiff_count chars_modiff;
/*  372      |     8 */        modiff_count save_modiff;
/*  380      |     8 */        modiff_count overlay_modiff;
/*  388      |     8 */        modiff_count compact;
/*  396      |     4 */        ptrdiff_t beg_unchanged;
/*  400      |     4 */        ptrdiff_t end_unchanged;
/*  404      |     8 */        modiff_count unchanged_modified;
/*  412      |     8 */        modiff_count overlay_unchanged_modified;
/*  420      |     4 */        INTERVAL intervals;
/*  424      |     4 */        struct Lisp_Marker *markers;
/*  428: 7   |     1 */        bool_bf inhibit_shrinking : 1;
/*  428: 6   |     1 */        bool_bf redisplay : 1;
/* XXX  6-bit padding  */
/* XXX  3-byte padding */

                               /* total size (bytes):  100 */
                           } own_text;
/*  432      |     4 */    struct buffer_text *text;
/*  436      |     4 */    struct buffer *next;
/*  440      |     4 */    ptrdiff_t pt;
/*  444      |     4 */    ptrdiff_t pt_byte;
/*  448      |     4 */    ptrdiff_t begv;
/*  452      |     4 */    ptrdiff_t begv_byte;
/*  456      |     4 */    ptrdiff_t zv;
/*  460      |     4 */    ptrdiff_t zv_byte;
/*  464      |     4 */    struct buffer *base_buffer;
/*  468      |     4 */    int indirections;
/*  472      |     4 */    int window_count;
/*  476      |    60 */    char local_flags[60];
/*  536      |     8 */    struct timespec {
/*  536      |     4 */        __time_t tv_sec;
/*  540      |     4 */        __syscall_slong_t tv_nsec;

                               /* total size (bytes):    8 */
                           } modtime;
/*  544      |     8 */    off_t modtime_size;
/*  552      |     8 */    modiff_count auto_save_modified;
/*  560      |     8 */    modiff_count display_error_modiff;
/*  568      |     4 */    time_t auto_save_failure_time;
/*  572      |     4 */    ptrdiff_t last_window_start;
/*  576      |     4 */    struct region_cache *newline_cache;
/*  580      |     4 */    struct region_cache *width_run_cache;
/*  584      |     4 */    struct region_cache *bidi_paragraph_cache;
/*  588: 7   |     1 */    bool_bf prevent_redisplay_optimizations_p : 1;
/*  588: 6   |     1 */    bool_bf clip_changed : 1;
/*  588: 5   |     1 */    bool_bf inhibit_buffer_hooks : 1;
/* XXX  5-bit hole  */
/* XXX  3-byte hole */
/*  592      |     4 */    struct Lisp_Overlay *overlays_before;
/*  596      |     4 */    struct Lisp_Overlay *overlays_after;
/*  600      |     4 */    ptrdiff_t overlay_center;
/*  604      |     4 */    Lisp_Object undo_list_;

                           /* total size (bytes):  608 */
                         } *
(gdb)

  parent reply	other threads:[~2019-04-08  5:23 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-07  2:50 buffer.c/buffer.h: How to add new buffer-local variables? Keith David Bershatsky
2019-04-07 15:48 ` Eli Zaretskii
2019-04-08  5:23 ` Paul Eggert [this message]
  -- strict thread matches above, loose matches on Subject: below --
2019-04-09  3:49 Keith David Bershatsky
2019-04-09  0:48 Keith David Bershatsky
2019-04-09  0:40 Keith David Bershatsky
2019-04-08  8:03 Keith David Bershatsky
2019-04-08  9:37 ` Eli Zaretskii
2019-04-08 15:04   ` Eli Zaretskii
2019-04-08 17:31   ` Andreas Schwab
2019-04-08 17:43     ` Eli Zaretskii
2019-04-08 18:33       ` Stefan Monnier
2019-04-08 20:07         ` Paul Eggert
2019-04-08 22:19           ` Michael Welsh Duggan
2019-04-08 23:06             ` Paul Eggert
2019-04-09  6:13               ` Eli Zaretskii
2019-04-08  4:34 Keith David Bershatsky
2019-04-04 18:57 Keith David Bershatsky
2019-04-04 19:29 ` Eli Zaretskii
2019-04-01  7:43 Keith David Bershatsky
2019-03-31 16:32 Keith David Bershatsky
2019-03-31 20:02 ` Stefan Monnier
2019-03-31  9:03 Keith David Bershatsky
2019-03-30 23:19 Keith David Bershatsky
2019-03-31  2:37 ` Eli Zaretskii
2019-03-31  3:49   ` Eli Zaretskii
2019-03-31  9:42 ` Andreas Schwab
2019-03-31 10:06   ` Eli Zaretskii
2019-03-31 11:41     ` Andreas Schwab
2019-03-31 15:10       ` Eli Zaretskii
2019-04-02 16:18       ` Eli Zaretskii
2019-04-02 18:46         ` Daniel Colascione
2019-04-03 17:43           ` Eli Zaretskii
2019-03-31 12:22 ` Alan Mackenzie

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=ebb6558b-99f8-7c2c-8e5b-6588163f0733@cs.ucla.edu \
    --to=eggert@cs.ucla.edu \
    --cc=acm@muc.de \
    --cc=dancol@dancol.org \
    --cc=emacs-devel@gnu.org \
    --cc=esq@lawlist.com \
    --cc=monnier@iro.umontreal.ca \
    --cc=schwab@linux-m68k.org \
    /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).