From 4bfa73f9207b47d0a6a0641bbdd39963242fa2c7 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Wed, 24 Nov 2021 14:43:37 +0100 Subject: [PATCH] Make display_min_width work from the mode line * src/xdisp.c (display_min_width): Make this work from mode line constructs via display_string. --- src/xdisp.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index e8de0634a16..cda7e04522c 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -5214,11 +5214,18 @@ display_min_width (struct it *it, ptrdiff_t bufpos, if (!it->glyph_row) return; - /* Check that we're really right after the sequence of - characters covered by this `min-width'. */ - if (bufpos > BEGV - && EQ (it->min_width_property, - get_display_property (bufpos - 1, Qmin_width, object))) + /* When called form display_string (i.e., the mode line), + we're being called with a string as the object, and we + may be called with many sub-strings belonging to the same + :propertize run. */ + if ((bufpos == 0 + && !EQ (it->min_width_property, + get_display_property (0, Qmin_width, object))) + /* In a buffer -- check that we're really right after the + sequence of characters covered by this `min-width'. */ + || (bufpos > BEGV + && EQ (it->min_width_property, + get_display_property (bufpos - 1, Qmin_width, object)))) { Lisp_Object w = Qnil; double width; @@ -5258,6 +5265,11 @@ display_min_width (struct it *it, ptrdiff_t bufpos, if (CONSP (width_spec)) { if (bufpos == BEGV + /* Mode line (see above). */ + || (bufpos == 0 + && !EQ (it->min_width_property, + get_display_property (0, Qmin_width, object))) + /* Buffer. */ || (bufpos > BEGV && !EQ (width_spec, get_display_property (bufpos - 1, Qmin_width, object)))) -- 2.39.2