GNU bug report logs - #78807
31.0.50; Wave underline set wrongly

Previous Next

Package: emacs;

Reported by: Ergus <spacibba <at> aol.com>

Date: Mon, 16 Jun 2025 15:42:02 UTC

Severity: normal

Found in version 31.0.50

To reply to this bug, email your comments to 78807 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#78807; Package emacs. (Mon, 16 Jun 2025 15:42:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ergus <spacibba <at> aol.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 16 Jun 2025 15:42:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ergus <spacibba <at> aol.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; Wave underline set wrongly
Date: Mon, 16 Jun 2025 17:41:18 +0200
Hi:

I am using emacs on tmux, which does not support wave underline (it
prints it as normal text)

echo -e "\e[4:3mThis is normal text in tmux\e[0m"

When I try

(display-supports-face-attributes-p '(:underline (:style wave)))

it returns t, which for tmux it seems like it shouldn't.

So this makes that faces like `flyspell-incorrect` look like normal text
and no highlight is visible at all.

Best,
Ergus



In GNU Emacs 31.0.50 (build 16, x86_64-pc-linux-gnu, GTK+ Version
 3.24.49, cairo version 1.18.4) of 2025-06-15 built on RTX
Repository revision: f3ea559eeebd368cca1900a7e670d3ddbbd00da7
Repository branch: project
System Description: Arch Linux

Configured using:
 'configure --prefix=/home/ergo/.local/ --with-mailutils --with-pgtk
 --with-modules --with-cairo --with-harfbuzz
 --with-native-compilation=aot
 '--program-transform-name=s/^ctags$/ctags.emacs/''

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

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  global-auto-revert-mode: t
  recentf-mode: t
  electric-pair-mode: t
  whitespace-mode: t
  flyspell-mode: t
  completion-preview-mode: t
  diff-hl-margin-mode: t
  global-corfu-mode: t
  corfu-mode: t
  fancy-compilation-mode: t
  winner-mode: t
  project-multi-mode: t
  gtags-mode: t
  repeat-mode: t
  xterm-mouse-mode: t
  tty-tip-mode: t
  xclip-mode: t
  override-global-mode: t
  save-place-mode: t
  delete-selection-mode: t
  savehist-mode: t
  global-display-fill-column-indicator-mode: t
  display-fill-column-indicator-mode: t
  global-display-line-numbers-mode: t
  display-line-numbers-mode: t
  which-key-mode: t
  tooltip-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  size-indication-mode: t
  column-number-mode: 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:
/mnt/casa/gits/emacs_clones/gtags-mode/gtags-mode hides /home/ergo/.config/emacs/elpa/gtags-mode-1.9.2/gtags-mode

Features:
(shadow sort mail-extr emacsbug lisp-mnt tramp-cache time-stamp tramp-sh
tramp trampver tramp-integration tramp-message tramp-compat shell
pcomplete parse-time iso8601 format-spec tramp-loaddefs autorevert
filenotify recentf tree-widget ffap thingatpt elec-pair whitespace
flyspell-correct flyspell ispell completion-preview diff-hl-margin
diff-hl-dired diff-hl log-view log-edit message sendmail yank-media puny
dired-x dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068
epg-config gnus-util time-date mm-decode mm-bodies mm-encode mail-parse
rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev
mail-utils gmm-utils mailheader add-log pcvs-util vc-dir ewoc vc
vc-dispatcher diff-mode track-changes corfu fancy-compilation compile
text-property-search comint ansi-osc ansi-color comp-run comp-common
winner cus-edit pp cus-start cus-load wid-edit project-multi-mode
gtags-mode files-x xref project ring term/tmux term/xterm xterm init rx
repeat cape compat use-package-ensure package browse-url xdg url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source eieio eieio-core cl-macs icons password-cache json subr-x
map url-vars use-package-diminish xt-mouse tty-tip xclip edmacro kmacro
byte-opt use-package-bind-key bind-key cl-extra help-mode
simple-16-theme saveplace delsel savehist easy-mmode
display-fill-column-indicator display-line-numbers diminish which-key
cl-seq use-package-core cl-loaddefs cl-lib bytecomp byte-compile gv
disp-table info arduino-cli-mode-autoloads auctex-autoloads tex-site
avy-zap-autoloads avy-autoloads benchmark-init-autoloads
bufferlo-autoloads caml-autoloads cape-autoloads clang-format-autoloads
cobol-mode-autoloads compile-multi-autoloads compiler-explorer-autoloads
corfu-autoloads crdt-autoloads csv-mode-autoloads d-mode-autoloads
dape-autoloads deadgrep-autoloads debbugs-autoloads diff-hl-autoloads
diminish-autoloads dired-sidebar-autoloads dired-subtree-autoloads
dired-hacks-utils-autoloads dumb-jump-autoloads e2ansi-autoloads
eglot-booster-autoloads emamux-autoloads eshell-toggle-autoloads
esup-autoloads evil-collection-autoloads annalist-autoloads
evil-leader-autoloads evil-autoloads face-explorer-autoloads
fancy-compilation-autoloads flx-autoloads flymake-nasm-autoloads
flymake-quickdef-autoloads flyspell-correct-autoloads
git-commit-ts-mode-autoloads git-modes-autoloads
git-timemachine-autoloads gnuplot-autoloads goto-chg-autoloads
groovy-mode-autoloads gtags-mode-autoloads haskell-mode-autoloads
highlight-indent-guides-autoloads i3wm-config-mode-autoloads
ibuffer-sidebar-autoloads iedit-autoloads imenu-list-autoloads
julia-ts-mode-autoloads julia-mode-autoloads languagetool-autoloads
lice-autoloads lorem-ipsum-autoloads lua-mode-autoloads magit-autoloads
magit-section-autoloads llama-autoloads move-dup-autoloads
multiple-cursors-autoloads mutt-mode-autoloads nasm-mode-autoloads
neotree-autoloads nftables-mode-autoloads nginx-mode-autoloads
notmuch-autoloads objed-autoloads phi-search-autoloads
pkgbuild-mode-autoloads plz-autoloads popup-autoloads
protobuf-ts-mode-autoloads scopeline-autoloads shell-command+-autoloads
slime-autoloads macrostep-autoloads sphinx-mode-autoloads f-autoloads
s-autoloads dash-autoloads spinner-autoloads ssh-config-mode-autoloads
string-inflection-autoloads sudo-edit-autoloads switch-window-autoloads
systemd-autoloads tmux-mode-autoloads urgrep-autoloads vdiff-autoloads
hydra-autoloads lv-autoloads vterm-toggle-autoloads vterm-autoloads
vundo-autoloads with-editor-autoloads xclip-autoloads
yasnippet-snippets-autoloads yasnippet-autoloads early-init rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win
term/common-win touch-screen pgtk-dnd 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
dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
lcms2 multi-tty move-toolbar make-network-process tty-child-frames
native-compile emacs)

Memory information:
((conses 16 257146 109827) (symbols 48 18252 10)
 (strings 32 74188 21602) (string-bytes 1 2343404) (vectors 16 24695)
 (vector-slots 8 281624 53185) (floats 8 122 281)
 (intervals 56 1382 163) (buffers 1064 12))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78807; Package emacs. (Mon, 16 Jun 2025 16:18:01 GMT) Full text and rfc822 format available.

Message #8 received at 78807 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Ergus <spacibba <at> aol.com>
Cc: 78807 <at> debbugs.gnu.org
Subject: Re: bug#78807: 31.0.50; Wave underline set wrongly
Date: Mon, 16 Jun 2025 19:17:01 +0300
> Date: Mon, 16 Jun 2025 17:41:18 +0200
> From:  Ergus via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> I am using emacs on tmux, which does not support wave underline (it
> prints it as normal text)
> 
> echo -e "\e[4:3mThis is normal text in tmux\e[0m"
> 
> When I try
> 
> (display-supports-face-attributes-p '(:underline (:style wave)))
> 
> it returns t, which for tmux it seems like it shouldn't.
> 
> So this makes that faces like `flyspell-incorrect` look like normal text
> and no highlight is visible at all.

I suggest to report this to the developers of tmux: they should make
sure the terminfo entry correctly reflects the actual capabilities
they support.  As you can see in tty_capable_p, Emacs just looks at
the capabilities reported by terminfo.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78807; Package emacs. (Sun, 22 Jun 2025 01:45:02 GMT) Full text and rfc822 format available.

Message #11 received at 78807 <at> debbugs.gnu.org (full text, mbox):

From: Ergus <spacibba <at> aol.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: "78807 <at> debbugs.gnu.org" <78807 <at> debbugs.gnu.org>
Subject: Re: bug#78807: 31.0.50; Wave underline set wrongly
Date: Sun, 22 Jun 2025 01:44:39 +0000 (UTC)
[Message part 1 (text/plain, inline)]
 Hi Eli:

As far as I know the check for wave underline in terminfo may look for Smulx
I tried: `infocmp -1 | grep -E 'Smulx|Su|cul'` 

and: `tigetstr("Smulx")` in a C snippet 
and none of them return positive.
The function mentions that it uses some heuristics and that may be the problem?

this is my infocmp output in case it helps:
```# Reconstructed via infocmp from file: /usr/share/terminfo/t/tmux-256colortmux-256color|tmux with 256 colors,am, hs, km, mir, msgr, xenl,colors#0x100, cols#80, it#8, lines#24, pairs#0x10000,acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=\r,csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,dl=\E[%p1%dM, dl1=\E[M, dsl=\E]0;\007, ed=\E[J, el=\E[K,el1=\E[1K, enacs=\E(B\E)0, flash=\Eg, fsl=^G, home=\E[H,hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,il=\E[%p1%dL, il1=\E[L, ind=\n, indn=\E[%p1%dS,invis=\E[8m, is2=\E)0, kDC=\E[3;2~, kEND=\E[1;2F,kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~,kPRV=\E[5;2~, kRIT=\E[1;2C, kbs=^?, kcbt=\E[Z, kcub1=\EOD,kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~,kend=\E[4~, kf1=\EOP, kf10=\E[21~, kf11=\E[23~,kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R,kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~,kri=\E[1;2A, nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m,ri=\EM, rin=\E[%p1%dT, ritm=\E[23m, rmacs=^O,rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[27m,rmul=\E[24m, rs2=\Ec\E[?1000l\E[?25h, sc=\E7,setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,sgr0=\E[m\017, sitm=\E[3m, smacs=^N, smcup=\E[?1049h,smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,tbc=\E[3g, tsl=\E]0;, u6=\E[%i%d;%dR, u7=\E[6n,u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd,```
Best,Ergus

    On Monday, June 16, 2025 at 06:17:26 PM GMT+2, Eli Zaretskii <eliz <at> gnu.org> wrote:   

 > Date: Mon, 16 Jun 2025 17:41:18 +0200
> From:  Ergus via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> I am using emacs on tmux, which does not support wave underline (it
> prints it as normal text)
> 
> echo -e "\e[4:3mThis is normal text in tmux\e[0m"
> 
> When I try
> 
> (display-supports-face-attributes-p '(:underline (:style wave)))
> 
> it returns t, which for tmux it seems like it shouldn't.
> 
> So this makes that faces like `flyspell-incorrect` look like normal text
> and no highlight is visible at all.

I suggest to report this to the developers of tmux: they should make
sure the terminfo entry correctly reflects the actual capabilities
they support.  As you can see in tty_capable_p, Emacs just looks at
the capabilities reported by terminfo.
  
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78807; Package emacs. (Sun, 22 Jun 2025 05:34:02 GMT) Full text and rfc822 format available.

Message #14 received at 78807 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Ergus <spacibba <at> aol.com>
Cc: 78807 <at> debbugs.gnu.org
Subject: Re: bug#78807: 31.0.50; Wave underline set wrongly
Date: Sun, 22 Jun 2025 08:33:50 +0300
> Date: Sun, 22 Jun 2025 01:44:39 +0000 (UTC)
> From: Ergus <spacibba <at> aol.com>
> Cc: "78807 <at> debbugs.gnu.org" <78807 <at> debbugs.gnu.org>
> 
> As far as I know the check for wave underline in terminfo may look for Smulx
> 
> I tried: `infocmp -1 | grep -E 'Smulx|Su|cul'` 
> 
> and: `tigetstr("Smulx")` in a C snippet 
> 
> and none of them return positive.
> 
> The function mentions that it uses some heuristics and that may be the problem?

This is what we do:

    /* Styled underlines.  Support for this is provided either by the
       escape sequence in Smulx or the Su flag.  The latter results in a
       common default escape sequence and is not recommended.  */
  #ifdef TERMINFO
    tty->TF_set_underline_style = tigetstr ("Smulx");
    if (tty->TF_set_underline_style == (char *) (intptr_t) -1)
      tty->TF_set_underline_style = NULL;
  #else
    tty->TF_set_underline_style = tgetstr ("Smulx", address);
  #endif
    if (!tty->TF_set_underline_style && tgetflag ("Su"))
      /* Default to the kitty escape sequence.  See
	 https://sw.kovidgoyal.net/kitty/underlines/.  */
      tty->TF_set_underline_style = "\x1b[4:%p1%dm";

    if (tty->TF_set_underline_style)
      /* Standard escape sequence to set the underline color.
	 Requires a single parameter, the color index.  */
      tty->TF_set_underline_color = "\x1b[58:2::%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm";

If tmux doesn't support this (again, please ask the tmux developers),
then we need a way to detect tmux and avoid the above.  But I'm
surprised that no one has reported this till now.  Perhaps you need to
upgrade your tmux?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78807; Package emacs. (Sun, 22 Jun 2025 16:14:02 GMT) Full text and rfc822 format available.

Message #17 received at 78807 <at> debbugs.gnu.org (full text, mbox):

From: Ergus <spacibba <at> aol.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 78807 <at> debbugs.gnu.org
Subject: Re: bug#78807: 31.0.50; Wave underline set wrongly
Date: Sun, 22 Jun 2025 18:13:01 +0200
Hi again Eli:

On Sun, Jun 22, 2025 at 08:33:50AM +0300, Eli Zaretskii wrote:
>> Date: Sun, 22 Jun 2025 01:44:39 +0000 (UTC)
>> From: Ergus <spacibba <at> aol.com>
>> Cc: "78807 <at> debbugs.gnu.org" <78807 <at> debbugs.gnu.org>
>>
>> As far as I know the check for wave underline in terminfo may look for Smulx
>>
>> I tried: `infocmp -1 | grep -E 'Smulx|Su|cul'`
>>
>> and: `tigetstr("Smulx")` in a C snippet
>>
>> and none of them return positive.
>>
>> The function mentions that it uses some heuristics and that may be the problem?
>
>This is what we do:
>
>    /* Styled underlines.  Support for this is provided either by the
>       escape sequence in Smulx or the Su flag.  The latter results in a
>       common default escape sequence and is not recommended.  */
>  #ifdef TERMINFO
>    tty->TF_set_underline_style = tigetstr ("Smulx");
>    if (tty->TF_set_underline_style == (char *) (intptr_t) -1)
>      tty->TF_set_underline_style = NULL;
>  #else
>    tty->TF_set_underline_style = tgetstr ("Smulx", address);
>  #endif
>    if (!tty->TF_set_underline_style && tgetflag ("Su"))
>      /* Default to the kitty escape sequence.  See
>	 https://sw.kovidgoyal.net/kitty/underlines/.  */
>      tty->TF_set_underline_style = "\x1b[4:%p1%dm";
>
>    if (tty->TF_set_underline_style)
>      /* Standard escape sequence to set the underline color.
>	 Requires a single parameter, the color index.  */
>      tty->TF_set_underline_color = "\x1b[58:2::%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm";
>

As you can see in the line command I shared before: infocmp -1 | grep -E 'Smulx|Su|cul'

I already ckeck for the Su, Smulx and tmux is not returning a fake
possitive it is actually not returning anything. Which means that
underline styles are not supported.

>If tmux doesn't support this (again, please ask the tmux developers),
>then we need a way to detect tmux and avoid the above.

But I think that tmux is working fine, see bellow.

>But I'm surprised that no one has reported this till now.

Maybe because the issue is just a missing wave underscore only set in a
few faces. And some themes already overrides those faces to use normal
underline. Plus most users these days use emacs gui not -nw.

> Perhaps you need to upgrade your tmux?

Just tested the tmux master branch and it is the same.

This code:

```
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <term.h>
#include <unistd.h>

int main(void) {
    // Setup terminfo for the terminal from $TERM
    int errret;
    if (setupterm(NULL, STDOUT_FILENO, &errret) != OK) {
        fprintf(stderr, "Error: Could not initialize terminfo (code %d)\n", errret);
        return 1;
    }

    // Standard underline enter/exit
    char *smul = tigetstr("smul");   // start underline
    char *rmul = tigetstr("rmul");   // end underline

    // Extended underline mode (not standard, but defined in newer terminfo entries)
    char *smulx = tigetstr("Smulx"); // start underline with extended attributes

    int Su = tgetflag ("Su");

    printf("smul  (start underline): %s\n", (smul == (char *)-1 || smul == NULL) ? "Not available" : "Available");
    printf("rmul  (end underline)  : %s\n", (rmul == (char *)-1 || rmul == NULL) ? "Not available" : "Available");
    printf("Smulx (extended underline): %s\n", (smulx == (char *)-1 || smulx == NULL) ? "Not available" : "Available");
    printf("Su: %s\n", Su);

    return 0;
}
```

Outputs:

```
smul  (start underline): Available
rmul  (end underline)  : Available
Smulx (extended underline): Not available
Su: (null)
```

I could have something missing in the setupterm call, but this seems
correctly reporting NOT extended underline support.

So, maybe the issue is somewhere else? Why is emacs reporting wave
support?

Best,
Ergus




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78807; Package emacs. (Mon, 23 Jun 2025 11:03:02 GMT) Full text and rfc822 format available.

Message #20 received at 78807 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Ergus <spacibba <at> aol.com>
Cc: 78807 <at> debbugs.gnu.org
Subject: Re: bug#78807: 31.0.50; Wave underline set wrongly
Date: Mon, 23 Jun 2025 14:02:22 +0300
> Date: Sun, 22 Jun 2025 18:13:01 +0200
> From: Ergus <spacibba <at> aol.com>
> Cc: 78807 <at> debbugs.gnu.org
> 
> >If tmux doesn't support this (again, please ask the tmux developers),
> >then we need a way to detect tmux and avoid the above.
> 
> But I think that tmux is working fine, see bellow.

I meant if tmux doesn't support the kitty escape sequences we assume
should work.  And if it doesn't, we need a way to detect that the
terminal is displaying on tmux.  Does anyone know how to do that?

> So, maybe the issue is somewhere else? Why is emacs reporting wave
> support?

Because, according to my reading of the code I show above, we assume
that every terminal supports wave: if Smulx is not present, we assume
the kitty escape sequence will work.




This bug report was last modified 1 day ago.

Previous Next


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