Subject: bug#41846: closed (Re: bug#41846: [PATCH] Fix 24-bit direct TTY colors on FreeBSD)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 20 Jun 2020 08:34:01 +0000

Your bug report

#41846: [PATCH] Fix 24-bit direct TTY colors on FreeBSD

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
41846: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=41846
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#41846: [PATCH] Fix 24-bit direct TTY colors on FreeBSD
From: Eli Zaretskii <[email-masked]>
To: Jan Beich <[email-masked]>
Cc: [email-masked]
Date: Sat, 20 Jun 2020 11:32:55 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

> From: Jan Beich <[email-masked]>
> Date: Sun, 14 Jun 2020 06:49:31 +0200
> 
> FreeBSD only ships with /etc/termcap. However, termcap is limited to 2
> arguments while RGB colors require 3. To support RGB add a fallback via
> COLORTERM, using semicolon version for better compatibility.
> 
> https://unix.stackexchange.com/questions/512845/emacs-with-24bit-terminal-support-on-freebsd
> https://gist.github.com/XVilka/8346728#true-color-detection
> https://github.com/alacritty/alacritty/issues/1485
> 
> Test case:
> $ pkg install emacs-devel-nox alacritty libxkbcommon mesa-dri dejavu
> $ alacritty
> $ env -u COLORTERM emacs -nw -Q -f list-colors-display
> $ env COLORTERM=rxvt emacs -nw -Q -f list-colors-display
> $ env COLORTERM=truecolor emacs -nw -Q -f list-colors-display

Thanks, I installed the changes on the master branch.

Subject: [PATCH] Fix 24-bit direct TTY colors on FreeBSD
From: Jan Beich <[email-masked]>
To: [email-masked]
Date: Sun, 14 Jun 2020 06:49:31 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

FreeBSD only ships with /etc/termcap. However, termcap is limited to 2
arguments while RGB colors require 3. To support RGB add a fallback via
COLORTERM, using semicolon version for better compatibility.

https://unix.stackexchange.com/questions/512845/emacs-with-24bit-terminal-support-on-freebsd
https://gist.github.com/XVilka/8346728#true-color-detection
https://github.com/alacritty/alacritty/issues/1485

Test case:
$ pkg install emacs-devel-nox alacritty libxkbcommon mesa-dri dejavu
$ alacritty
$ env -u COLORTERM emacs -nw -Q -f list-colors-display
$ env COLORTERM=rxvt emacs -nw -Q -f list-colors-display
$ env COLORTERM=truecolor emacs -nw -Q -f list-colors-display

>From bd215324fde6a79302f5f19456f755d9be98daed Mon Sep 17 00:00:00 2001
From: Jan Beich <[email-masked]>
Date: Sun, 14 Jun 2020 03:51:24 +0000
Subject: [PATCH] Add RGB fallback if environment has COLORTERM=truecolor

* src/term.c (init_tty): When COLORTERM=truecolor is declared override
setaf/setab/colors terminfo capabilities with RGB support.
---
 doc/misc/efaq.texi | 3 +++
 src/term.c         | 7 +++++++
 2 files changed, 10 insertions(+)

diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index be1ffc026dd..fa09cf67471 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -1595,6 +1595,9 @@ xterm-direct2   xterm with direct-color indexing (old)
 xterm-direct    xterm with direct-color indexing
 @end example
 
+If Terminfo database is not available 24-bit direct color mode can
+still be enabled by defining @env{COLORTERM} to @samp{truecolor}.
+
 Terminals with @samp{RGB} capability treat pixels #000001 - #000007 as
 indexed colors to maintain backward compatibility with applications
 that are unaware of direct color mode.  Therefore the seven darkest
diff --git a/src/term.c b/src/term.c
index 94bf013f4a0..50547a1c21d 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4168,6 +4168,13 @@ use the Bourne shell command 'TERM=...; export TERM' (C-shell:\n\
 	       could return 32767.  */
 	    tty->TN_max_colors = 16777216;
 	  }
+	/* Fall back to xterm+direct (semicolon version) if requested by COLORTERM */
+	else if ((bg = getenv("COLORTERM")) != NULL && !strcasecmp(bg, "truecolor"))
+	  {
+	    tty->TS_set_foreground = "\033[%?%p1%{8}%<%t3%p1%d%e38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m";
+	    tty->TS_set_background = "\033[%?%p1%{8}%<%t4%p1%d%e48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m";
+	    tty->TN_max_colors = 16777216;
+	  }
       }
 #endif