From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#34476: fluffy whitespace in the mode-line, despite it running off the screen Date: Fri, 07 Aug 2020 14:59:52 +0300 Message-ID: <83y2mq7jk7.fsf@gnu.org> References: <87lg2icx3u.fsf@jidanni.org> <87ftnfrwef.fsf@mouse.gnus.org> <87r26z0wdy.fsf@tcd.ie> <87eeoi7un0.fsf@gnus.org> <87a6z67t7p.fsf@gnus.org> <83364y8ze0.fsf@gnu.org> <878seq8yzo.fsf@gnus.org> Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="32953"; mail-complaints-to="usenet@ciao.gmane.io" Cc: contovob@tcd.ie, 34476@debbugs.gnu.org, jidanni@jidanni.org To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Aug 07 14:01:28 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1k413w-0008Sr-KI for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 07 Aug 2020 14:01:28 +0200 Original-Received: from localhost ([::1]:50732 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k413v-0000gs-Ew for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 07 Aug 2020 08:01:27 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:35074) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k413Y-0000fZ-3c for bug-gnu-emacs@gnu.org; Fri, 07 Aug 2020 08:01:05 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:44488) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k413W-0004iT-JD for bug-gnu-emacs@gnu.org; Fri, 07 Aug 2020 08:01:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1k413W-0008Hg-Hu; Fri, 07 Aug 2020 08:01:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org, bugs@gnus.org Resent-Date: Fri, 07 Aug 2020 12:01:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 34476 X-GNU-PR-Package: emacs,gnus Original-Received: via spool by 34476-submit@debbugs.gnu.org id=B34476.159680160831766 (code B ref 34476); Fri, 07 Aug 2020 12:01:02 +0000 Original-Received: (at 34476) by debbugs.gnu.org; 7 Aug 2020 12:00:08 +0000 Original-Received: from localhost ([127.0.0.1]:56033 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1k412e-0008GI-00 for submit@debbugs.gnu.org; Fri, 07 Aug 2020 08:00:08 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:52702) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1k412c-0008EH-Hr for 34476@debbugs.gnu.org; Fri, 07 Aug 2020 08:00:07 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:51394) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k412V-0004Ly-Ud; Fri, 07 Aug 2020 07:59:59 -0400 Original-Received: from [176.228.60.248] (port=1055 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1k412V-0004q0-3r; Fri, 07 Aug 2020 07:59:59 -0400 In-Reply-To: <878seq8yzo.fsf@gnus.org> (message from Lars Ingebrigtsen on Fri, 07 Aug 2020 13:41:15 +0200) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:184268 Archived-At: > From: Lars Ingebrigtsen > Cc: contovob@tcd.ie, 34476@debbugs.gnu.org, jidanni@jidanni.org > Date: Fri, 07 Aug 2020 13:41:15 +0200 > > > And it formats the mode-line twice: once in format-mode-line, then > > again in display_string, right? > > No, display_string just displays the string, I think? Which is a non-trivial amount of work: loading all the font glyphs again and accounting for their metrics, considering the faces, etc. All of which was already done. > > 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. > > That seems like a lot more work, I think? Why a lot more work? It's basically the same loop as you do on characters of the string produced by Fformat_mode_line, just done on elements of it.glyph_row->glyphs[TEXT_AREA], which is a linear array of 'struct glyph'. Each glyph tells you what character it displays (and much more). There are gobs of similar code in xdisp.c. For example, here's how we make space in a glyph row for prepending a character (needed when displaying R2L lines): struct glyph *g; /* Make room for the additional glyph. */ for (g = glyph - 1; g >= it->glyph_row->glyphs[area]; g--) g[1] = *g; glyph = it->glyph_row->glyphs[area]; IOW, it's just an array of simple objects, not unlike array of characters, a.k.a. "a string". If this still sounds complicated, I can volunteer to write the code myself, if you promise to write tests for the feature ;-) Thanks.