unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH v3 0/4] Support 24-bit terminal colors.
@ 2017-02-14 15:58 Rami Ylimäki
  2017-02-14 15:58 ` [PATCH v3 1/4] Remove unused terminal color pair count Rami Ylimäki
                   ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: Rami Ylimäki @ 2017-02-14 15:58 UTC (permalink / raw)
  To: emacs-devel

From: Rami Ylimäki <rjy@iki.fi>

Fixed since v2:
  * Replace '#if TERMINFO' with '#ifdef TERMINFO'.
  * Rename custom terminfo strings from 'seta[bf]24' to 'set[bf]24',
    because the 'a' in 'seta[bf]' stands for ANSI.
  * Update FAQ and NEWS.
  * Update commit messages to match FAQ.

Rami Ylimäki (4):
  Remove unused terminal color pair count.
  Support 24-bit terminal colors.
  Let user turn 24-bit terminal colors on.
  Update documentation regarding 24-bit TTY colors.

 doc/misc/efaq.texi      | 33 +++++++++++++++++++++++++++++++++
 etc/NEWS                |  5 +++++
 lisp/term/tty-colors.el | 19 +++++++++++++++++--
 lisp/term/xterm.el      |  8 ++++++++
 src/term.c              | 20 ++++++++++++++------
 src/termchar.h          |  4 ----
 src/tparam.h            |  4 ++++
 7 files changed, 81 insertions(+), 12 deletions(-)

-- 
2.7.4




^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v3 1/4] Remove unused terminal color pair count.
  2017-02-14 15:58 [PATCH v3 0/4] Support 24-bit terminal colors Rami Ylimäki
@ 2017-02-14 15:58 ` Rami Ylimäki
  2017-02-14 15:58 ` [PATCH v3 2/4] Support 24-bit terminal colors Rami Ylimäki
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 14+ messages in thread
From: Rami Ylimäki @ 2017-02-14 15:58 UTC (permalink / raw)
  To: emacs-devel

From: Rami Ylimäki <rjy@iki.fi>

The TN_max_pairs field is unused and would be inconvenient with direct
color modes.

* src/termchar.h (tty_display_info): Remove TN_max_pairs field
describing maximum number of terminal background/foreground color pairs.
* src/term.c (tty_default_color_capabilities, tty_setup_colors,
init_tty): Remove references to TN_max_pairs.
---
 src/term.c     | 6 ------
 src/termchar.h | 4 ----
 2 files changed, 10 deletions(-)

diff --git a/src/term.c b/src/term.c
index c067a86..b0ff9cb 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2048,7 +2048,6 @@ TERMINAL does not refer to a text terminal.  */)
    to work around an HPUX compiler bug (?). See
    http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg00410.html  */
 static int default_max_colors;
-static int default_max_pairs;
 static int default_no_color_video;
 static char *default_orig_pair;
 static char *default_set_foreground;
@@ -2066,7 +2065,6 @@ tty_default_color_capabilities (struct tty_display_info *tty, bool save)
       dupstring (&default_set_foreground, tty->TS_set_foreground);
       dupstring (&default_set_background, tty->TS_set_background);
       default_max_colors = tty->TN_max_colors;
-      default_max_pairs = tty->TN_max_pairs;
       default_no_color_video = tty->TN_no_color_video;
     }
   else
@@ -2075,7 +2073,6 @@ tty_default_color_capabilities (struct tty_display_info *tty, bool save)
       tty->TS_set_foreground = default_set_foreground;
       tty->TS_set_background = default_set_background;
       tty->TN_max_colors = default_max_colors;
-      tty->TN_max_pairs = default_max_pairs;
       tty->TN_no_color_video = default_no_color_video;
     }
 }
@@ -2095,7 +2092,6 @@ tty_setup_colors (struct tty_display_info *tty, int mode)
     {
       case -1:	 /* no colors at all */
 	tty->TN_max_colors = 0;
-	tty->TN_max_pairs = 0;
 	tty->TN_no_color_video = 0;
 	tty->TS_set_foreground = tty->TS_set_background = tty->TS_orig_pair = NULL;
 	break;
@@ -2113,7 +2109,6 @@ tty_setup_colors (struct tty_display_info *tty, int mode)
 	tty->TS_set_background = "\033[4%dm";
 #endif
 	tty->TN_max_colors = 8;
-	tty->TN_max_pairs = 64;
 	tty->TN_no_color_video = 0;
 	break;
     }
@@ -4135,7 +4130,6 @@ use the Bourne shell command 'TERM=...; export TERM' (C-shell:\n\
 	}
 
       tty->TN_max_colors = tgetnum ("Co");
-      tty->TN_max_pairs = tgetnum ("pa");
 
       tty->TN_no_color_video = tgetnum ("NC");
       if (tty->TN_no_color_video == -1)
diff --git a/src/termchar.h b/src/termchar.h
index e6e483e..cf061a9 100644
--- a/src/termchar.h
+++ b/src/termchar.h
@@ -149,10 +149,6 @@ struct tty_display_info
 
   int TN_max_colors;            /* "Co" -- number of colors.  */
 
-  /* "pa" -- max. number of color pairs on screen.  Not handled yet.
-     Could be a problem if not equal to TN_max_colors * TN_max_colors.  */
-  int TN_max_pairs;
-
   /* "op" -- SVr4 set default pair to its original value.  */
   const char *TS_orig_pair;
 
-- 
2.7.4




^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 2/4] Support 24-bit terminal colors.
  2017-02-14 15:58 [PATCH v3 0/4] Support 24-bit terminal colors Rami Ylimäki
  2017-02-14 15:58 ` [PATCH v3 1/4] Remove unused terminal color pair count Rami Ylimäki
@ 2017-02-14 15:58 ` Rami Ylimäki
  2017-02-14 15:58 ` [PATCH v3 3/4] Let user turn 24-bit terminal colors on Rami Ylimäki
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 14+ messages in thread
From: Rami Ylimäki @ 2017-02-14 15:58 UTC (permalink / raw)
  To: emacs-devel

From: Rami Ylimäki <rjy@iki.fi>

Assume that number of terminal colors has been set to 16777216 if
terminal supports direct color mode. Detection of 24-bit color support
is added in next commit.

* lisp/term/tty-colors.el (tty-color-define): Convert color palette
index to pixel value on 16.7M color terminals.
(tty-color-24bit): Add new function to convert color palette index to
pixel value on 16.7M color terminals.
(tty-color-desc): Don't approximate colors on 16.7M color terminals.
* lisp/term/xterm.el (xterm-register-default-colors): Define all named
TTY colors on 16.7M color terminals.
---
 lisp/term/tty-colors.el | 19 +++++++++++++++++--
 lisp/term/xterm.el      |  8 ++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lisp/term/tty-colors.el b/lisp/term/tty-colors.el
index 252a430..9cfe30a 100644
--- a/lisp/term/tty-colors.el
+++ b/lisp/term/tty-colors.el
@@ -824,6 +824,15 @@ A canonicalized color name is all-lower case, with any blanks removed."
 	(replace-regexp-in-string " +" "" (downcase color))
       color)))
 
+(defun tty-color-24bit (rgb)
+  "Return pixel value on 24-bit terminals. Return nil if RGB is
+nil or not on 24-bit terminal."
+  (when (and rgb (= (display-color-cells) 16777216))
+    (let ((r (lsh (car rgb) -8))
+	  (g (lsh (cadr rgb) -8))
+	  (b (lsh (nth 2 rgb) -8)))
+      (logior (lsh r 16) (lsh g 8) b))))
+
 (defun tty-color-define (name index &optional rgb frame)
   "Specify a tty color by its NAME, terminal INDEX and RGB values.
 NAME is a string, INDEX is typically a small integer used to send to
@@ -840,7 +849,10 @@ If FRAME is not specified or is nil, it defaults to the selected frame."
 	  (and rgb (or (not (listp rgb)) (/= (length rgb) 3))))
       (error "Invalid specification for tty color \"%s\"" name))
   (tty-modify-color-alist
-   (append (list (tty-color-canonicalize name) index) rgb) frame))
+   (append (list (tty-color-canonicalize name)
+		 (or (tty-color-24bit rgb) index))
+	   rgb)
+   frame))
 
 (defun tty-color-clear (&optional _frame)
   "Clear the list of supported tty colors for frame FRAME.
@@ -1013,7 +1025,10 @@ might need to be approximated if it is not supported directly."
        (let ((color (tty-color-canonicalize color)))
 	  (or (assoc color (tty-color-alist frame))
 	      (let ((rgb (tty-color-standard-values color)))
-		(and rgb (tty-color-approximate rgb frame)))))))
+		(and rgb
+		     (let ((pixel (tty-color-24bit rgb)))
+		       (or (and pixel (cons color (cons pixel rgb)))
+			   (tty-color-approximate rgb frame)))))))))
 
 (defun tty-color-gray-shades (&optional display)
   "Return the number of gray colors supported by DISPLAY's terminal.
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 339d05d..e6d224d 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -930,6 +930,14 @@ versions of xterm."
     ;; are more colors to support, compute them now.
     (when (> ncolors 0)
       (cond
+       ((= ncolors 16777200) ; 24-bit xterm
+	;; all named tty colors
+	(let ((idx (length xterm-standard-colors)))
+	  (mapc (lambda (color)
+		  (unless (assoc (car color) xterm-standard-colors)
+		    (tty-color-define (car color) idx (cdr color))
+		    (setq idx (1+ idx))))
+		color-name-rgb-alist)))
        ((= ncolors 240)	; 256-color xterm
 	;; 216 non-gray colors first
 	(let ((r 0) (g 0) (b 0))
-- 
2.7.4




^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 3/4] Let user turn 24-bit terminal colors on.
  2017-02-14 15:58 [PATCH v3 0/4] Support 24-bit terminal colors Rami Ylimäki
  2017-02-14 15:58 ` [PATCH v3 1/4] Remove unused terminal color pair count Rami Ylimäki
  2017-02-14 15:58 ` [PATCH v3 2/4] Support 24-bit terminal colors Rami Ylimäki
@ 2017-02-14 15:58 ` Rami Ylimäki
  2017-02-14 15:58 ` [PATCH v3 4/4] Update documentation regarding 24-bit TTY colors Rami Ylimäki
  2017-02-18 11:07 ` [PATCH v3 0/4] Support 24-bit terminal colors Eli Zaretskii
  4 siblings, 0 replies; 14+ messages in thread
From: Rami Ylimäki @ 2017-02-14 15:58 UTC (permalink / raw)
  To: emacs-devel

From: Rami Ylimäki <rjy@iki.fi>

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 terminfo-24bit.src

  # Replace semicolons with colons in setb24 and setf24 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-24bits|xterm with 16777216 colors,
    use=xterm-256color,
    setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
    setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,

  $ tic -x -o ~/.terminfo terminfo-24bit.src

  $ TERM=xterm-24bits 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..35fa8c9 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");
 
+#ifdef TERMINFO
+      /* Non-standard support for 24-bit colors. */
+      {
+	const char* fg = tigetstr ("setf24");
+	const char* bg = tigetstr ("setb24");
+	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..02136b6 100644
--- a/src/tparam.h
+++ b/src/tparam.h
@@ -36,4 +36,8 @@ extern char PC;
 extern char *BC;
 extern char *UP;
 
+#ifdef TERMINFO
+char *tigetstr(const char *);
+#endif
+
 #endif /* EMACS_TPARAM_H */
-- 
2.7.4




^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 4/4] Update documentation regarding 24-bit TTY colors.
  2017-02-14 15:58 [PATCH v3 0/4] Support 24-bit terminal colors Rami Ylimäki
                   ` (2 preceding siblings ...)
  2017-02-14 15:58 ` [PATCH v3 3/4] Let user turn 24-bit terminal colors on Rami Ylimäki
@ 2017-02-14 15:58 ` Rami Ylimäki
  2017-02-18 11:07 ` [PATCH v3 0/4] Support 24-bit terminal colors Eli Zaretskii
  4 siblings, 0 replies; 14+ messages in thread
From: Rami Ylimäki @ 2017-02-14 15:58 UTC (permalink / raw)
  To: emacs-devel

From: Rami Ylimäki <rjy@iki.fi>

* doc/misc/efaq.texi: Add instructions on how to enable direct color TTY
  mode.
* etc/NEWS: Mention direct color TTY mode and point to FAQ.
---
 doc/misc/efaq.texi | 33 +++++++++++++++++++++++++++++++++
 etc/NEWS           |  5 +++++
 2 files changed, 38 insertions(+)

diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index f7a47f8..e9cfe7a 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -1491,6 +1491,39 @@ exhibits all the colors Emacs knows about on the current display.
 
 Syntax highlighting is on by default since version 22.1.
 
+Emacs 26.1 and later support direct color mode in terminals.  If Emacs
+finds Terminfo capabilities @samp{setb24} and @samp{setf24}, 24-bit
+direct color mode is used.  The capability strings are expected to
+take one 24-bit pixel value as argument and transform the pixel to a
+string that can be used to send 24-bit colors to the terminal.
+
+There aren't yet any standard terminal type definitions that would
+support the capabilities, but Emacs can be invoked with a custom
+definition as shown below.
+
+@example
+$ cat terminfo-24bit.src
+
+# Use colon separators.
+xterm-24bit|xterm with 24-bit direct color mode,
+  use=xterm-256color,
+  setb24=\E[48:2:%p1%@{65536@}%/%d:%p1%@{256@}%/%@{255@}%&%d:%p1%@{255@}%&%dm,
+  setf24=\E[38:2:%p1%@{65536@}%/%d:%p1%@{256@}%/%@{255@}%&%d:%p1%@{255@}%&%dm,
+# Use semicolon separators.
+xterm-24bits|xterm with 24-bit direct color mode,
+  use=xterm-256color,
+  setb24=\E[48;2;%p1%@{65536@}%/%d;%p1%@{256@}%/%@{255@}%&%d;%p1%@{255@}%&%dm,
+  setf24=\E[38;2;%p1%@{65536@}%/%d;%p1%@{256@}%/%@{255@}%&%d;%p1%@{255@}%&%dm,
+
+$ tic -x -o ~/.terminfo terminfo-24bit.src
+
+$ TERM=xterm-24bit emacs -nw
+@end example
+
+Currently there's no standard way to determine whether a terminal
+supports direct color mode.  If such standard arises later on, support
+for @samp{setb24} and @samp{setf24} may be removed.
+
 @node Debugging a customization file
 @section How do I debug a @file{.emacs} file?
 @cindex Debugging @file{.emacs} file
diff --git a/etc/NEWS b/etc/NEWS
index 31b05dd..5cb4d02 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -77,6 +77,11 @@ modern init systems such as systemd, which manage many of the traditional
 aspects of daemon behavior themselves.  '--old-daemon' is now an alias
 for '--daemon'.
 
++++
+** Terminal is initialized to use 24-bit colors if required
+capabilities are found from terminfo.  See the FAQ node 'Colors on a
+TTY' for more information.
+
 \f
 * Changes in Emacs 26.1
 
-- 
2.7.4




^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 0/4] Support 24-bit terminal colors.
  2017-02-14 15:58 [PATCH v3 0/4] Support 24-bit terminal colors Rami Ylimäki
                   ` (3 preceding siblings ...)
  2017-02-14 15:58 ` [PATCH v3 4/4] Update documentation regarding 24-bit TTY colors Rami Ylimäki
@ 2017-02-18 11:07 ` Eli Zaretskii
  2017-02-19  2:22   ` Tino Calancha
  4 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2017-02-18 11:07 UTC (permalink / raw)
  To: Rami Ylimäki; +Cc: emacs-devel

> From: Rami Ylimäki <rami.ylimaki@vincit.fi>
> Date: Tue, 14 Feb 2017 17:58:18 +0200
> 
> From: Rami Ylimäki <rjy@iki.fi>
> 
> Fixed since v2:
>   * Replace '#if TERMINFO' with '#ifdef TERMINFO'.
>   * Rename custom terminfo strings from 'seta[bf]24' to 'set[bf]24',
>     because the 'a' in 'seta[bf]' stands for ANSI.
>   * Update FAQ and NEWS.
>   * Update commit messages to match FAQ.
> 
> Rami Ylimäki (4):
>   Remove unused terminal color pair count.
>   Support 24-bit terminal colors.
>   Let user turn 24-bit terminal colors on.
>   Update documentation regarding 24-bit TTY colors.
> 
>  doc/misc/efaq.texi      | 33 +++++++++++++++++++++++++++++++++
>  etc/NEWS                |  5 +++++
>  lisp/term/tty-colors.el | 19 +++++++++++++++++--
>  lisp/term/xterm.el      |  8 ++++++++
>  src/term.c              | 20 ++++++++++++++------
>  src/termchar.h          |  4 ----
>  src/tparam.h            |  4 ++++
>  7 files changed, 81 insertions(+), 12 deletions(-)

Pushed to the master branch.

Thank you for working on this and for persevering.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 0/4] Support 24-bit terminal colors.
  2017-02-18 11:07 ` [PATCH v3 0/4] Support 24-bit terminal colors Eli Zaretskii
@ 2017-02-19  2:22   ` Tino Calancha
  2017-02-19  3:14     ` Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.) Kaushal Modi
  2017-02-26  0:49     ` [PATCH v3 0/4] Support 24-bit terminal colors Charles Strahan
  0 siblings, 2 replies; 14+ messages in thread
From: Tino Calancha @ 2017-02-19  2:22 UTC (permalink / raw)
  To: Rami Ylimäki; +Cc: Emacs developers

[-- Attachment #1: Type: text/plain, Size: 1255 bytes --]



On Sat, 18 Feb 2017, Eli Zaretskii wrote:

>> From: Rami Ylimäki <rami.ylimaki@vincit.fi>
>> Date: Tue, 14 Feb 2017 17:58:18 +0200
>>
>> From: Rami Ylimäki <rjy@iki.fi>
>>
>> Fixed since v2:
>>   * Replace '#if TERMINFO' with '#ifdef TERMINFO'.
>>   * Rename custom terminfo strings from 'seta[bf]24' to 'set[bf]24',
>>     because the 'a' in 'seta[bf]' stands for ANSI.
>>   * Update FAQ and NEWS.
>>   * Update commit messages to match FAQ.
>>
>> Rami Ylimäki (4):
>>   Remove unused terminal color pair count.
>>   Support 24-bit terminal colors.
>>   Let user turn 24-bit terminal colors on.
>>   Update documentation regarding 24-bit TTY colors.
>>
>>  doc/misc/efaq.texi      | 33 +++++++++++++++++++++++++++++++++
>>  etc/NEWS                |  5 +++++
>>  lisp/term/tty-colors.el | 19 +++++++++++++++++--
>>  lisp/term/xterm.el      |  8 ++++++++
>>  src/term.c              | 20 ++++++++++++++------
>>  src/termchar.h          |  4 ----
>>  src/tparam.h            |  4 ++++
>>  7 files changed, 81 insertions(+), 12 deletions(-)
>
> Pushed to the master branch.
>
> Thank you for working on this and for persevering.
I also want to thank Rami for this work.
It's the first time i see such many colors in Emacs running
on Xterm.  Very nice!

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.)
  2017-02-19  2:22   ` Tino Calancha
@ 2017-02-19  3:14     ` Kaushal Modi
  2017-02-19  3:20       ` Kaushal Modi
  2017-02-26  0:49     ` [PATCH v3 0/4] Support 24-bit terminal colors Charles Strahan
  1 sibling, 1 reply; 14+ messages in thread
From: Kaushal Modi @ 2017-02-19  3:14 UTC (permalink / raw)
  To: Tino Calancha, Rami Ylimäki; +Cc: Emacs developers


[-- Attachment #1.1: Type: text/plain, Size: 1176 bytes --]

Hi Rami,

I followed these instructions in "(efaq) Colors on a TTY" after building
emacs from master that included your patches.

I followed your instructions to generate new terminfo and to set TERM.

But then emacs -Q -nw looks like this:

[image: pasted2]

I even tried setting TERMINFO env var to ~/.terminfo. But still get the
same thing.

Emacs build info: Emacs version: GNU Emacs 26.0.50 (build 32,
x86_64-unknown-linux-gnu, GTK+ Version 2.24.23)
 of 2017-02-18, built using commit 861ff2ba2cfc19065b13bf9b9670b44e1496c64e.

./configure options:
  --with-modules --prefix=/home/kmodi/usr_local/apps/6/emacs/master
'--program-transform-name=s/^ctags$/ctags_emacs/' 'CPPFLAGS=-fgnu89-inline
-I/home/kmodi/usr_local/6/include -I/usr/include/freetype2 -I/usr/include'
'CFLAGS=-ggdb3 -O0' 'CXXFLAGS=-ggdb3 -O0'
'LDFLAGS=-L/home/kmodi/usr_local/6/lib -L/home/kmodi/usr_local/6/lib64
-ggdb3'

Features:
  XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS
NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK2 X11 MODULES

xterm version: X.Org 6.8.99.903(325)

TERM set to xterm-24bit

What am I missing?
-- 

Kaushal Modi

[-- Attachment #1.2: Type: text/html, Size: 1714 bytes --]

[-- Attachment #2: pasted1 --]
[-- Type: image/png, Size: 329607 bytes --]

[-- Attachment #3: pasted2 --]
[-- Type: image/png, Size: 56085 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.)
  2017-02-19  3:14     ` Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.) Kaushal Modi
@ 2017-02-19  3:20       ` Kaushal Modi
  2017-02-19  6:22         ` Tino Calancha
  0 siblings, 1 reply; 14+ messages in thread
From: Kaushal Modi @ 2017-02-19  3:20 UTC (permalink / raw)
  To: Tino Calancha, Rami Ylimäki; +Cc: Emacs developers


[-- Attachment #1.1: Type: text/plain, Size: 1528 bytes --]

OK, that was uxterm.

But then I opened up xterm, set the env vars correctly.

Things were better (not black and white), but it was still only 256 colors,
not 24bit:

[image: pasted2]


On Sat, Feb 18, 2017 at 10:14 PM Kaushal Modi <kaushal.modi@gmail.com>
wrote:

> Hi Rami,
>
> I followed these instructions in "(efaq) Colors on a TTY" after building
> emacs from master that included your patches.
>
> I followed your instructions to generate new terminfo and to set TERM.
>
> But then emacs -Q -nw looks like this:
>
> [image: pasted2]
>
> I even tried setting TERMINFO env var to ~/.terminfo. But still get the
> same thing.
>
> Emacs build info: Emacs version: GNU Emacs 26.0.50 (build 32,
> x86_64-unknown-linux-gnu, GTK+ Version 2.24.23)
>  of 2017-02-18, built using commit
> 861ff2ba2cfc19065b13bf9b9670b44e1496c64e.
>
> ./configure options:
>   --with-modules --prefix=/home/kmodi/usr_local/apps/6/emacs/master
> '--program-transform-name=s/^ctags$/ctags_emacs/' 'CPPFLAGS=-fgnu89-inline
> -I/home/kmodi/usr_local/6/include -I/usr/include/freetype2 -I/usr/include'
> 'CFLAGS=-ggdb3 -O0' 'CXXFLAGS=-ggdb3 -O0'
> 'LDFLAGS=-L/home/kmodi/usr_local/6/lib -L/home/kmodi/usr_local/6/lib64
> -ggdb3'
>
> Features:
>   XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS
> NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE LIBOTF XFT ZLIB
> TOOLKIT_SCROLL_BARS GTK2 X11 MODULES
>
> xterm version: X.Org 6.8.99.903(325)
>
> TERM set to xterm-24bit
>
> What am I missing?
> --
>
> Kaushal Modi
>
-- 

Kaushal Modi

[-- Attachment #1.2: Type: text/html, Size: 3223 bytes --]

[-- Attachment #2: pasted2 --]
[-- Type: image/png, Size: 56085 bytes --]

[-- Attachment #3: pasted2 --]
[-- Type: image/png, Size: 57120 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.)
  2017-02-19  3:20       ` Kaushal Modi
@ 2017-02-19  6:22         ` Tino Calancha
  2017-02-19  7:33           ` Kaushal Modi
  0 siblings, 1 reply; 14+ messages in thread
From: Tino Calancha @ 2017-02-19  6:22 UTC (permalink / raw)
  To: Kaushal Modi; +Cc: Emacs developers, Rami Ylimäki, Tino Calancha

[-- Attachment #1: Type: text/plain, Size: 794 bytes --]



On Sun, 19 Feb 2017, Kaushal Modi wrote:

> OK, that was uxterm.
> But then I opened up xterm, set the env vars correctly.
> 
> Things were better (not black and white), but it was still only 256 colors, not 24bit:
Mine shows clear distinction on 'floralwhite' and 'oldlace' colors;  in 
your picture they looks pretty the same.

I assume you already have done a full bootstrap just in case.

I run in:
In GNU Emacs 26.0.50 (build 28, x86_64-pc-linux-gnu, GTK+ Version 3.22.7)
  of 2017-02-19 built
Repository revision: 861ff2ba2cfc19065b13bf9b9670b44e1496c64e

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS
NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 LIBSYSTEMD

$ xterm -version
XTerm(327)

[-- Attachment #2: Type: image/png, Size: 51860 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.)
  2017-02-19  6:22         ` Tino Calancha
@ 2017-02-19  7:33           ` Kaushal Modi
  2017-02-19 12:43             ` Rami Ylimäki
  0 siblings, 1 reply; 14+ messages in thread
From: Kaushal Modi @ 2017-02-19  7:33 UTC (permalink / raw)
  To: Tino Calancha; +Cc: Rami Ylimäki, Emacs developers

[-- Attachment #1: Type: text/plain, Size: 1270 bytes --]

I did some more testing.

I cannot set the 24-bit colors working on xterm directly.

But I sort of got it working in xterm via tmux configured for 24-bit
colors[1] after setting TERM to "xterm-24bits" (but it didn't work at all
when setting to "xterm-24bit" -- bit vs bits).

It's "sort of" because emacsclient -nw starts off with 24-bit colors, but
then after scrolling, I see color artifacts. This gifv shows that:

http://i.imgur.com/YW8MZat.gifv

[1]: https://sunaku.github.io/tmux-24bit-color.html

On Sun, Feb 19, 2017 at 1:22 AM Tino Calancha <tino.calancha@gmail.com>
wrote:

>
>
> On Sun, 19 Feb 2017, Kaushal Modi wrote:
>
> > OK, that was uxterm.
> > But then I opened up xterm, set the env vars correctly.
> >
> > Things were better (not black and white), but it was still only 256
> colors, not 24bit:
> Mine shows clear distinction on 'floralwhite' and 'oldlace' colors;  in
> your picture they looks pretty the same.
>
> I assume you already have done a full bootstrap just in case.
>

I did not do a full bootstrap. But it still seems to work in uxterm in tmux
configured for 24-bits.
But it doesn't work directly in an xterm terminal.

What debug information can I provide from the direct xterm session or
xterm+tmux session?

Thanks.
-- 

Kaushal Modi

[-- Attachment #2: Type: text/html, Size: 2237 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.)
  2017-02-19  7:33           ` Kaushal Modi
@ 2017-02-19 12:43             ` Rami Ylimäki
  2017-02-19 15:21               ` Kaushal Modi
  0 siblings, 1 reply; 14+ messages in thread
From: Rami Ylimäki @ 2017-02-19 12:43 UTC (permalink / raw)
  To: Kaushal Modi; +Cc: Emacs developers, Tino Calancha

[-- Attachment #1: Type: text/plain, Size: 1643 bytes --]

2017-02-19 9:33 GMT+02:00 Kaushal Modi <kaushal.modi@gmail.com>:

I cannot set the 24-bit colors working on xterm directly.
>

XTerm supports the direct color mode escape sequences, but approximates
colors. See
https://gist.github.com/XVilka/8346728#parsing-ansi-colour-sequences-but-approximating-them-to-256-palette
and https://gist.github.com/XVilka/8346728#now-supporting-truecolour for
details.

Note that if you want to use XTerm, then using TERM=xterm-256color with
Emacs is enough, because 24-bit colors are approximated anyway.

I did not do a full bootstrap. But it still seems to work in uxterm in tmux
> configured for 24-bits.
> But it doesn't work directly in an xterm terminal.
>
> What debug information can I provide from the direct xterm session or
> xterm+tmux session?
>

I haven't used tmux before, but I was able to make Emacs work in direct
color mode with following steps:

* Use a terminal that supports 24-bit colors (gnome-terminal).

* Compile tmux from https://github.com/tmux/tmux.git. The version provided
with Ubuntu doesn't support Tc-flag.

* Use following terminfo source (add the Tc-flag and use semicolon
separators for tmux):

$ cat terminfo-24bit.src

# Use semicolon separators.
xterm-24bits|xterm with 24-bit direct color mode,
        use=xterm-256color,
        Tc,
        setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
        setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,

 * Compile the terminfo source, run tmux, set your TERM to xterm-24bits,
check that Tc is supported:

$ tmux info | grep Tc
 199: Tc: (flag) true

* Finally run Emacs under tmux.

[-- Attachment #2: Type: text/html, Size: 2921 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.)
  2017-02-19 12:43             ` Rami Ylimäki
@ 2017-02-19 15:21               ` Kaushal Modi
  0 siblings, 0 replies; 14+ messages in thread
From: Kaushal Modi @ 2017-02-19 15:21 UTC (permalink / raw)
  To: Rami Ylimäki; +Cc: Emacs developers, Tino Calancha

[-- Attachment #1: Type: text/plain, Size: 2207 bytes --]

On Sun, Feb 19, 2017 at 7:43 AM Rami Ylimäki <rami.ylimaki@vincit.com>
wrote:

>
> XTerm supports the direct color mode escape sequences, but approximates
> colors. See
> https://gist.github.com/XVilka/8346728#parsing-ansi-colour-sequences-but-approximating-them-to-256-palette
> and https://gist.github.com/XVilka/8346728#now-supporting-truecolour for
> details.
>
> Note that if you want to use XTerm, then using TERM=xterm-256color with
> Emacs is enough, because 24-bit colors are approximated anyway.
>

Thanks for that explanation; it helps understand why the colors don't
exactly look as in 24-bit mode. But that is much better than 256 colors! :)


> I did not do a full bootstrap. But it still seems to work in uxterm in
> tmux configured for 24-bits.
> But it doesn't work directly in an xterm terminal.
>
> What debug information can I provide from the direct xterm session or
> xterm+tmux session?
>
>
> I haven't used tmux before, but I was able to make Emacs work in direct
> color mode with following steps:
>

Wow! I cannot thank you enough! I really appreciate the effort you went
through to help me get this working.


> * Use a terminal that supports 24-bit colors (gnome-terminal).
>

Thanks. I will try that. But for now, with your fixed terminfo with Tc, it
works great in xterm too.


> * Compile tmux from https://github.com/tmux/tmux.git. The version
> provided with Ubuntu doesn't support Tc-flag.
>



> * Use following terminfo source (add the Tc-flag and use semicolon
> separators for tmux):
>
> $ cat terminfo-24bit.src
>
> # Use semicolon separators.
> xterm-24bits|xterm with 24-bit direct color mode,
>         use=xterm-256color,
>         Tc,
>
> setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
>
> setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
>

Thank you! This fixed the color anomaly I reported in my last email.


>  * Compile the terminfo source, run tmux, set your TERM to xterm-24bits,
> check that Tc is supported:
>
> $ tmux info | grep Tc
>  199: Tc: (flag) true
>
> * Finally run Emacs under tmux.
>

Thanks again! :)
-- 

Kaushal Modi

[-- Attachment #2: Type: text/html, Size: 5821 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 0/4] Support 24-bit terminal colors.
  2017-02-19  2:22   ` Tino Calancha
  2017-02-19  3:14     ` Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.) Kaushal Modi
@ 2017-02-26  0:49     ` Charles Strahan
  1 sibling, 0 replies; 14+ messages in thread
From: Charles Strahan @ 2017-02-26  0:49 UTC (permalink / raw)
  To: emacs-devel

Thanks a ton, Rami! I owe you a <beverage-of-choice>!

On Sat, Feb 18, 2017, at 09:22 PM, Tino Calancha wrote:
> 
> 
> On Sat, 18 Feb 2017, Eli Zaretskii wrote:
> 
> >> From: Rami Ylimäki <rami.ylimaki@vincit.fi>
> >> Date: Tue, 14 Feb 2017 17:58:18 +0200
> >>
> >> From: Rami Ylimäki <rjy@iki.fi>
> >>
> >> Fixed since v2:
> >>   * Replace '#if TERMINFO' with '#ifdef TERMINFO'.
> >>   * Rename custom terminfo strings from 'seta[bf]24' to 'set[bf]24',
> >>     because the 'a' in 'seta[bf]' stands for ANSI.
> >>   * Update FAQ and NEWS.
> >>   * Update commit messages to match FAQ.
> >>
> >> Rami Ylimäki (4):
> >>   Remove unused terminal color pair count.
> >>   Support 24-bit terminal colors.
> >>   Let user turn 24-bit terminal colors on.
> >>   Update documentation regarding 24-bit TTY colors.
> >>
> >>  doc/misc/efaq.texi      | 33 +++++++++++++++++++++++++++++++++
> >>  etc/NEWS                |  5 +++++
> >>  lisp/term/tty-colors.el | 19 +++++++++++++++++--
> >>  lisp/term/xterm.el      |  8 ++++++++
> >>  src/term.c              | 20 ++++++++++++++------
> >>  src/termchar.h          |  4 ----
> >>  src/tparam.h            |  4 ++++
> >>  7 files changed, 81 insertions(+), 12 deletions(-)
> >
> > Pushed to the master branch.
> >
> > Thank you for working on this and for persevering.
> I also want to thank Rami for this work.
> It's the first time i see such many colors in Emacs running
> on Xterm.  Very nice!



^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2017-02-26  0:49 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-14 15:58 [PATCH v3 0/4] Support 24-bit terminal colors Rami Ylimäki
2017-02-14 15:58 ` [PATCH v3 1/4] Remove unused terminal color pair count Rami Ylimäki
2017-02-14 15:58 ` [PATCH v3 2/4] Support 24-bit terminal colors Rami Ylimäki
2017-02-14 15:58 ` [PATCH v3 3/4] Let user turn 24-bit terminal colors on Rami Ylimäki
2017-02-14 15:58 ` [PATCH v3 4/4] Update documentation regarding 24-bit TTY colors Rami Ylimäki
2017-02-18 11:07 ` [PATCH v3 0/4] Support 24-bit terminal colors Eli Zaretskii
2017-02-19  2:22   ` Tino Calancha
2017-02-19  3:14     ` Black and white emacs -nw (WAS: Re: [PATCH v3 0/4] Support 24-bit terminal colors.) Kaushal Modi
2017-02-19  3:20       ` Kaushal Modi
2017-02-19  6:22         ` Tino Calancha
2017-02-19  7:33           ` Kaushal Modi
2017-02-19 12:43             ` Rami Ylimäki
2017-02-19 15:21               ` Kaushal Modi
2017-02-26  0:49     ` [PATCH v3 0/4] Support 24-bit terminal colors Charles Strahan

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).