File emacs-27.2-COLORTERM-24bit.patch of Package emacs.26999

diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index f5f01848f77f..8f7ed715b523 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -1595,6 +1595,10 @@ xterm-direct2   xterm with direct-color indexing (old)
 xterm-direct    xterm with direct-color indexing
 @end example
 
+If Terminfo database is not available, but 24-bit direct color mode is
+supported, it can still be enabled by defining the environment
+variable @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 94bf013f4a07..5cbb092ad177 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4168,6 +4168,15 @@ 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 the COLORTERM environment variable.  */
+	else if ((bg = getenv("COLORTERM")) != NULL
+		 && strcasecmp(bg, "truecolor") == 0)
+	  {
+	    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
 
openSUSE Build Service is sponsored by