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)
next prev 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).