GNU bug report logs - #64420
string-width of … is 2 in CJK environments

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dmitry <at> gutov.dev>

Date: Sun, 2 Jul 2023 12:58:02 UTC

Severity: normal

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dmitry <at> gutov.dev>
Cc: 64420 <at> debbugs.gnu.org
Subject: bug#64420: string-width of … is 2 in CJK environments
Date: Sun, 02 Jul 2023 16:10:03 +0300
> Date: Sun, 2 Jul 2023 15:57:07 +0300
> From: Dmitry Gutov <dmitry <at> gutov.dev>
> 
> Hi! This was reported to company-mode 
> (https://github.com/company-mode/company-mode/issues/1388), as a 
> scenario that makes the overlay-based completion popup misrender because 
> the columns are not computed right when that char is present.
> 
> To repro:
> 
>    (set-language-environment "Chinese-BIG5")
>    (string-width "…") ;; => 2
> 
> In the default language environment its width is reported to be 1.
> 
> This doesn't seem to make sense because it's rendered one column wide 
> either way.

On GUI frames Lisp programs that need to know the actual width of some
string should use string-pixel-width, not string-width.  The latter is
basically only for TTY frames.

   (progn
     (set-language-environment "Chinese-BIG5")
     (ceiling (/ (string-pixel-width "…")
                 (float (default-font-width))))) ;; => 1




This bug report was last modified 2 years and 1 day ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.