Uploaded image for project: 'Guacamole'
  1. Guacamole
  2. GUACAMOLE-278

Add support for xterm's 256-color control codes

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: None
    • Fix Version/s: 0.9.13-incubating
    • Component/s: SSH, Telnet, Terminal
    • Labels:
      None

      Description

      Guacamole currently only supports 16 colors in its terminal, whereas xterm and its various other modern derivatives all support 256+ colors, as well as arbitrary RGB colors. This support should be added to the Guacamole terminal, such that applications needing 256 colors have console codes to work with.

      xterm's 256-color codes are defined at http://invisible-island.net/xterm/ctlseqs/ctlseqs.html. There are code sequences which apply:

      • Set foreground to RGB color: CSI 38 ; 2 ; R ; G ; B
      • Set foreground to 256-color palette index N: CSI 38 ; 5 ; N
      • Set background to RGB color: CSI 48 ; 2 ; R ; G ; B
      • Set background to 256-color palette index N: CSI 48 ; 5 ; N

      There is an additional OSC sequence for redefining the 256-color palette, but that can probably be omitted for now. We have similarly omitted the Linux-specific console code for redefining the 16-color palette, even though we otherwise aim to support the same control sequences as the Linux console.

      1. guac-terminal-256-after.png
        245 kB
        Michael Jumper
      2. guac-terminal-256-before.png
        102 kB
        Michael Jumper

        Issue Links

          Activity

          Hide
          mike.jumper Michael Jumper added a comment - - edited

          NOTE: There are additional codes which are somewhat applicable here. xterm adds SGR codes 90-97 for intense foreground color and 100-107 for intense background color. From the documentation link above:

                    If 16-color support is compiled, the following apply.  Assume
                    that xterm's resources are set so that the ISO color codes are
                    the first 8 of a set of 16.  Then the aixterm colors are the
                    bright versions of the ISO colors:
                      Ps = 9 0  -> Set foreground color to Black.
                      Ps = 9 1  -> Set foreground color to Red.
                      Ps = 9 2  -> Set foreground color to Green.
                      Ps = 9 3  -> Set foreground color to Yellow.
                      Ps = 9 4  -> Set foreground color to Blue.
                      Ps = 9 5  -> Set foreground color to Magenta.
                      Ps = 9 6  -> Set foreground color to Cyan.
                      Ps = 9 7  -> Set foreground color to White.
                      Ps = 1 0 0  -> Set background color to Black.
                      Ps = 1 0 1  -> Set background color to Red.
                      Ps = 1 0 2  -> Set background color to Green.
                      Ps = 1 0 3  -> Set background color to Yellow.
                      Ps = 1 0 4  -> Set background color to Blue.
                      Ps = 1 0 5  -> Set background color to Magenta.
                      Ps = 1 0 6  -> Set background color to Cyan.
                      Ps = 1 0 7  -> Set background color to White.
          
          Show
          mike.jumper Michael Jumper added a comment - - edited NOTE: There are additional codes which are somewhat applicable here. xterm adds SGR codes 90-97 for intense foreground color and 100-107 for intense background color. From the documentation link above: If 16-color support is compiled, the following apply. Assume that xterm's resources are set so that the ISO color codes are the first 8 of a set of 16. Then the aixterm colors are the bright versions of the ISO colors: Ps = 9 0 -> Set foreground color to Black. Ps = 9 1 -> Set foreground color to Red. Ps = 9 2 -> Set foreground color to Green. Ps = 9 3 -> Set foreground color to Yellow. Ps = 9 4 -> Set foreground color to Blue. Ps = 9 5 -> Set foreground color to Magenta. Ps = 9 6 -> Set foreground color to Cyan. Ps = 9 7 -> Set foreground color to White. Ps = 1 0 0 -> Set background color to Black. Ps = 1 0 1 -> Set background color to Red. Ps = 1 0 2 -> Set background color to Green. Ps = 1 0 3 -> Set background color to Yellow. Ps = 1 0 4 -> Set background color to Blue. Ps = 1 0 5 -> Set background color to Magenta. Ps = 1 0 6 -> Set background color to Cyan. Ps = 1 0 7 -> Set background color to White.

            People

            • Assignee:
              mike.jumper Michael Jumper
              Reporter:
              mike.jumper Michael Jumper
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development