From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: =?UTF-8?q?Rami=20Ylim=C3=A4ki?= Newsgroups: gmane.emacs.devel Subject: [PATCH 3/3] Let user turn 24-bit terminal colors on. Date: Sun, 12 Feb 2017 12:05:30 +0200 Message-ID: <1486893930-6709-4-git-send-email-rami.ylimaki@vincit.fi> References: <1486893930-6709-1-git-send-email-rami.ylimaki@vincit.fi> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1486911347 3794 195.159.176.226 (12 Feb 2017 14:55:47 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 12 Feb 2017 14:55:47 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Feb 12 15:55:43 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ccvZ0-0000it-5a for ged-emacs-devel@m.gmane.org; Sun, 12 Feb 2017 15:55:42 +0100 Original-Received: from localhost ([::1]:52310 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ccvZ5-0000DK-T8 for ged-emacs-devel@m.gmane.org; Sun, 12 Feb 2017 09:55:47 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46094) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ccr2V-0002PW-72 for emacs-devel@gnu.org; Sun, 12 Feb 2017 05:05:53 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ccr2S-0004Vp-1m for emacs-devel@gnu.org; Sun, 12 Feb 2017 05:05:51 -0500 Original-Received: from mail.kapsi.fi ([217.30.184.167]:55247) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ccr2R-0004Up-QX for emacs-devel@gnu.org; Sun, 12 Feb 2017 05:05:47 -0500 Original-Received: from 91-158-222-159.elisa-laajakaista.fi ([91.158.222.159] helo=nopsakone.home) by mail.kapsi.fi with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_CBC_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1ccr2L-00028y-2J for emacs-devel@gnu.org; Sun, 12 Feb 2017 12:05:41 +0200 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1486893930-6709-1-git-send-email-rami.ylimaki@vincit.fi> X-SA-Exim-Connect-IP: 91.158.222.159 X-SA-Exim-Mail-From: rami.ylimaki@vincit.fi X-SA-Exim-Scanned: No (on mail.kapsi.fi); SAEximRunCond expanded to false X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 217.30.184.167 X-Mailman-Approved-At: Sun, 12 Feb 2017 09:54:39 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:212280 Archived-At: From: Rami Ylimäki ITU-T T.412 9.1.4 and ITU-T T.416 13.1.8 specify control function for changing terminal foreground and background colors. One possible format for the control function parameters is: 2:n:r:g:b, where 2 is color access mode indicating direct RGB space, n is an indentifier that gives detailed information about the color space and r, g, b are the color values. Most 24-bit terminals implement this function as 2;r;g;b. Color space identifier has been omitted because of its complexity and rgb values are assumed to be in range 0-255. Parameters are separated by semicolons instead of colons for historical reasons. The terminfo database supports only indexed color control functions and can't be used to determine whether a terminal has implemented direct color control functions. However, this can be worked around by creating user defined functions for setting 24-bit foreground and background colors. This can be done by creating a terminfo source file with the required capabilities and compiling a custom terminal type definition. For example: $ cat xterm-24bit # Replace semicolons with colons in setab24 and setaf24 on terminals # that use ITU-T separators (iTerm2). A 24-bit integer (p1) is given # as a parameter to the control functions which calculate rgb # component values with following formulas: # r = p1 / 65536, g = (p1 / 256) & 255, b = p1 & 255 xterm-24bit|xterm with 16777216 colors, use=xterm-256color, setab24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, setaf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm, $ tic -x -o ~/.terminfo xterm-24bit $ TERM=xterm-24bit emacs * src/term.c (init_tty): Use 24-bit terminal colors if corresponding foreground and background functions are present in terminal type definition. * src/tparam.h: Define prototype for tigetstr. --- src/term.c | 14 ++++++++++++++ src/tparam.h | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/src/term.c b/src/term.c index b0ff9cb..9d1c3c1 100644 --- a/src/term.c +++ b/src/term.c @@ -4131,6 +4131,20 @@ use the Bourne shell command 'TERM=...; export TERM' (C-shell:\n\ tty->TN_max_colors = tgetnum ("Co"); +#if TERMINFO + /* Non-standard support for 24-bit colors. */ + { + const char* fg = tigetstr ("setaf24"); + const char* bg = tigetstr ("setab24"); + if (fg && bg && fg != (char *)-1 && bg != (char *)-1) + { + tty->TS_set_foreground = fg; + tty->TS_set_background = bg; + tty->TN_max_colors = 16777216; + } + } +#endif + tty->TN_no_color_video = tgetnum ("NC"); if (tty->TN_no_color_video == -1) tty->TN_no_color_video = 0; diff --git a/src/tparam.h b/src/tparam.h index 15664d6..8e34c9e 100644 --- a/src/tparam.h +++ b/src/tparam.h @@ -36,4 +36,8 @@ extern char PC; extern char *BC; extern char *UP; +#if TERMINFO +char *tigetstr(const char *); +#endif + #endif /* EMACS_TPARAM_H */ -- 2.7.4