GNU bug report logs -
#34476
fluffy whitespace in the mode-line, despite it running off the screen
Previous Next
Reported by: 積丹尼 Dan Jacobson <jidanni <at> jidanni.org>
Date: Thu, 14 Feb 2019 13:53:01 UTC
Severity: wishlist
Tags: fixed
Found in version 5.13
Fixed in version 28.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
Message #23 received at 34476 <at> debbugs.gnu.org (full text, mbox):
> From: Lars Ingebrigtsen <larsi <at> gnus.org>
> Date: Fri, 07 Aug 2020 10:31:22 +0200
> Cc: 34476 <at> debbugs.gnu.org,
> 積丹尼 Dan Jacobson <jidanni <at> jidanni.org>
>
> - display_mode_element (&it, 0, 0, 0, format, Qnil, false);
> +
> + if (NILP (Vmode_line_compact))
> + {
> + mode_line_target = MODE_LINE_DISPLAY;
> + display_mode_element (&it, 0, 0, 0, format, Qnil, false);
> + }
> + else
> + {
> + Lisp_Object mode_string = Fformat_mode_line (format, Qnil, Qnil, Qnil);
> + char *string = xmalloc (SBYTES (mode_string) + 1),
> + *ostring = SSDATA (mode_string);
> + char *s = string, prev = 0;
> +
> + /* Copy over the data from the mode line string, but ignore
> + repeating spaces. This should be safe even for multibyte
> + strings, since this is UTF-8. */
> + for (int i = 0; i < SBYTES (mode_string); i++)
> + {
> + char c = ostring[i];
> + if (!(c == ' ' && prev == ' '))
> + {
> + *s++ = c;
> + prev = c;
> + }
> + }
> + *s = 0;
> +
> + display_string (string, Qnil, Qnil, 0, 0, &it, 0, 0, 0,
> + STRING_MULTIBYTE (mode_string));
> + xfree (string);
> + }
Ouch! This is Lisp converted into C, yes? And it formats the
mode-line twice: once in format-mode-line, then again in
display_string, right?
You don't need all this inelegance. After display_mode_element
returns, you have all the glyphs it produced in it.glyph_row, so you
can simply remove the unneeded space glyphs from the glyph row (and
adjust the metrics accordingly). Let me know if you need more
detailed help in how to do that.
This bug report was last modified 4 years and 141 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.