GNU bug report logs -
#48148
27.2; ox-ascii breaks TITLE line wrongly when 2 width char is used
Previous Next
Reported by: Shingo Tanaka <shingo.fg8 <at> gmail.com>
Date: Sat, 1 May 2021 23:53:02 UTC
Severity: normal
Found in version 27.2
Done: Nicolas Goaziou <mail <at> nicolasgoaziou.fr>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#48148: 27.2; ox-ascii breaks TITLE line wrongly when 2 width char is used
which was filed against the org-mode package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 48148 <at> debbugs.gnu.org.
--
48148: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=48148
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Eli Zaretskii <eliz <at> gnu.org> writes:
>> From: Nicolas Goaziou <mail <at> nicolasgoaziou.fr>
>> Cc: shingo.fg8 <at> gmail.com, 48148 <at> debbugs.gnu.org
>> Date: Sun, 02 May 2021 14:18:24 +0200
>>
>> My problem is that I have some string, _which is not displayed anywhere_
>> yet. I need to obtain its real width along with the width of a single
>> character in order to compute the length argument in `make-string'.
>
> The width of any text on display is meaningless unless you also tell
> in what window will it be displayed. That's because some of the
> factors that affect the display width depend on the window and the
> buffer shown by that window.
I understand. More than the width of the text, I'm interested in the
ratio between the width of the text and the width of an underline
character (assuming monospace).
> So assuming the string you have will eventually be displayed in some
> window -- and most strings in Emacs are of that kind -- you should use
> that window up front. Otherwise, the value you get from other methods
> can only be an approximation, which will sometimes be close, and
> sometimes quite far from the truth.
The string may not be displayed at all. Since it is the output of an
export process, it could, e.g., be written to a file.
I applied Shingo Tanaka's suggestion using `string-width', which is the
best we can do considering our requirements.
Thank you for your answer, and to Shingo Tanaka for the report an the
patch.
Regards,
[Message part 3 (message/rfc822, inline)]
Hi,
When exporting org-mode document to plain text (either ascii/unicode/utf-8)
with `org-export-dispatch', Emacs translates the document title with
`org-ascii-template--document-title'. However, when 2 width character is
used, it detects the title line's width wrongly and breaks it even if the
width is not too long.
For example, when the title is "ABCDEF" (each character has width of
2), expected title would be like:
━━━━━━━━━━━━━━━
ABCDEF
━━━━━━━━━━━━━━━
However, the reality is:
━━━━━━━━━━━━━━━
ABC
DEF
━━━━━━━━━━━━━━━
This is because it uses `length' to detects the width, which only returns the
number of characters (6 in this case) but not the actual width displayed (12
in this case), and it tries to fill the line with that half width.
`string-width' should be used instead.
Here is a potential patch.
--- ox-ascii.el.org 2021-03-26 09:28:44.000000000 +0900
+++ ox-ascii.el 2021-05-02 08:11:57.657347150 +0900
@@ -1033,7 +1033,7 @@
;; Format TITLE. It may be filled if it is too wide,
;; that is wider than the two thirds of the total width.
(title-len (min (apply #'max
- (mapcar #'length
+ (mapcar #'string-width
(org-split-string
(concat title "\n" subtitle) "\n")))
(/ (* 2 text-width) 3)))
---
Shingo Tanaka
This bug report was last modified 4 years and 17 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.