Subject: bug#76852: 30.1; Regression in whitespace-mode causes display issue under terminal

From: 张海 <[email-masked]>
Date: Fri, 7 Mar 2025 13:22:45 -0800

Hi Emacs maintainers,

I recently updated from Emacs 29.4 to 30.1 and noticed an issue when I
use global-whitespace-mode under terminal - each line would either
automatically wrap before reaching the right edge of the terminal, or
the cursor can go beyond the actual line end as if there were virtual
spaces. Inserting new characters also results in characters after the
insertion to drift right further than necessary and makes it
impossible to properly edit a document. The amount of drifting seems
to be related to the number of whitespace characters shown by
whitespace-mode. A image showing the bug is available at
https://imgur.com/a/PWbFgyE .

I verified that this issue occurs with `emacs -nw -q` (so that my
.emacs isn't interfering) and the `*scratch*` buffer (its vanilla
English-only content) using `M-x global-whitespace-mode` on Emacs 30.1
runnin under gnome-terminal, gnome-console and foot (the Wayland
terminal emulator) on most recent Arch Linux running GNOME 3 on
Wayland. My locale is zh_CN.UTF-8 and my terminal font, i.e. the
`monospace` font, is set to `WenQuanYi Micro Hei Mono` (文泉驿等宽微米黑 in
Chinese, part of the wqy-microhei Arch Linxu package), if that
matters. Downgrading to Emacs 29.4 immediately solved this issue so I
believe it is a regression.

Here's a screen recoding and the coresponding termscript of this issue:
- Video: https://imgur.com/a/IhA8JxD
- Termscript: https://files.catbox.moe/tskpy8

I've also attached some environment info and output from `M-x
report-emacs-bug` below, and hopefully they can be helpful in
debugging this.Thanks in advance!

Hai

TERM=xterm-256color
No /etc/termcap
LC_ALL= LC_COLLATE= LC_CTYPE= LC_MESSAGES= LC_TIME= LANG=zh_CN.UTF-8
fc-match monospace: wqy-microhei.ttc: "文泉驿等宽微米黑" "Regular"

In GNU Emacs 30.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.48,
cairo version 1.18.2)
Windowing system distributor 'The X.Org Foundation', version 11.0.12401006
System Description: Arch Linux

Configured using:
 'configure --with-x-toolkit=gtk3 --sysconfdir=/etc --prefix=/usr
 --libexecdir=/usr/lib --localstatedir=/var --disable-build-details
 --with-cairo --with-harfbuzz --with-libsystemd --with-modules
 --with-native-compilation=aot --with-tree-sitter 'CFLAGS=-march=x86-64
 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=3
 -Wformat -Werror=format-security -fstack-clash-protection
 -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g
 -ffile-prefix-map=/build/emacs/src=/usr/src/debug/emacs -flto=auto'
 'LDFLAGS=-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro
 -Wl,-z,now -Wl,-z,pack-relative-relocs -flto=auto''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

Important settings:
  value of $LANG: zh_CN.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Fundamental

Minor modes in effect:
  global-whitespace-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr filecache compile comint ansi-osc ansi-color ring
comp-run bytecomp byte-compile comp-common rx emacsbug message mailcap
yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache
epa derived epg rfc6068 epg-config gnus-util text-property-search
time-date subr-x mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils cus-start cus-load
disp-table whitespace china-util rmc iso-transl tooltip cconv eldoc
paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
mwheel term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd
fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo gtk
x-toolkit xinput2 x multi-tty move-toolbar make-network-process
native-compile emacs)

Memory information:
((conses 16 81904 15452) (symbols 48 7904 0) (strings 32 19386 2345)
 (string-bytes 1 583198) (vectors 16 12555)
 (vector-slots 8 212422 11491) (floats 8 22 3) (intervals 56 411 13)
 (buffers 992 12))