Subject: Re: bug#48149: 27.2; Wrong underline width when the line char has a width of 2

From: Nicolas Goaziou <[email-masked]>
Date: Sun, 02 May 2021 18:08:50 +0200

Hello,

Shingo Tanaka <[email-masked]> writes:

> When exporting org-mode document to plain text (either ascii/unicode/utf-8)
> with `org-export-dispatch', Emacs inserts lines under headlines, inline
> tasks, table rows and titles of the document, TOC, list of listings, list of
> tables and footnotes.  The problem is it inserts too long (double width) line
> when the line character has a width of 2.
>
> Those lines are made of 3 types of characters below (in ox-ascii.el):
> 1) org-ascii-underline
> 2) (if (eq (plist-get info :ascii-charset) 'utf-8) ?─ ?_)
> 3) (if utf8p ?━ ?_)
>
> In case of 1), it correctly takes account of the case in which the character
> has a width of 2 in `org-ascii--build-title', by dividing the line width by
> `(char-width under-char)' (line 700-701), maybe because the character is user
> configurable and its width in unknown.  However, in case of 2) and
> 3), maybe because the characters is embedded in the code, it looks like only
> considering the character always has a width of 1.  But the reality is
> character ?─ or ?━ can have a width of 2 in the screen displayed with some
> fonts (ex. "Noto Sans Mono CJK JP"), and in that case the line width gets
> doubled of the expected width.
>
> Attached one is a potential patch.  The basic concepts are:
>
> a) Do the same in case of 2) and 3) as in case of 1)
>    (dividing the line width by `(char-width under-char)',
>     assuming `char-width-table' is correctly set)
>     
> b) Prefer the longer line width if the width is odd, even in case of 1)
>    (adding `(1- (char-width under-char))' to dividend,
>     just because it should be more beautiful ;-) )

Thank you. This looks good. I cannot apply it on "maint" branch,
however. Also, a proper commit message would be nice. Could you send an
updated patch?

Moreover, have you signed FSF papers already? This is above limit for
tiny changes.

Regards,
-- 
Nicolas Goaziou