]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1078: Terminal ansi colors off by one after tgc reset v9.1.1078
authorJulio B <julio.bacel@gmail.com>
Thu, 6 Feb 2025 19:31:27 +0000 (20:31 +0100)
committerChristian Brabandt <cb@256bit.org>
Thu, 6 Feb 2025 19:31:27 +0000 (20:31 +0100)
Problem:  Terminal ansi colors off by one after tgc reset
Solution: Set the correct index for libvterm palette,
          revert parts in libvterm/src/pen.c that deviated from upstream
          (Julio B)

fixes: #16568
closes: #16573
related: Vim patch v8.2.0804

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Julio B <julio.bacel@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/libvterm/src/pen.c
src/term.c
src/testdir/dumps/Test_terminal_ansi_reset_tgc.dump [new file with mode: 0644]
src/testdir/test_terminal.vim
src/version.c

index ddc8e40a7956887fb0754aea37fcac99e5da2f29..33d3dae9f13fcb671ab2d74c5b36d256d82e4b4b 100644 (file)
@@ -275,10 +275,7 @@ void vterm_state_set_default_colors(VTermState *state, const VTermColor *default
 void vterm_state_set_palette_color(VTermState *state, int index, const VTermColor *col)
 {
   if(index >= 0 && index < 16)
-  {
     state->colors[index] = *col;
-    state->colors[index].index = index + 1;
-  }
 }
 
 void vterm_state_convert_color_to_rgb(const VTermState *state, VTermColor *col)
index 19913428ce737e570038038ffdef86227df7ffcf..4d30ee1ca8451e7b3502e4fb15ff84032d8e1bfc 100644 (file)
@@ -7494,7 +7494,7 @@ ansi_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx)
        *r = ansi_table[nr][0];
        *g = ansi_table[nr][1];
        *b = ansi_table[nr][2];
-       *ansi_idx = nr;
+       *ansi_idx = nr + 1;
     }
     else
     {
diff --git a/src/testdir/dumps/Test_terminal_ansi_reset_tgc.dump b/src/testdir/dumps/Test_terminal_ansi_reset_tgc.dump
new file mode 100644 (file)
index 0000000..c6f6d72
--- /dev/null
@@ -0,0 +1,12 @@
+|$+0&#ffffff0| |p|r|i|n|t|f| |'|\|0|3@1|[|0|;|3|0|;|4|1|m|h|e|l@1|o| |w|o|r|l|d|\|0|3@1|[|0|m|\|n|'| @30
+|h+0#0000001#e000002|e|l@1|o| |w|o|r|l|d| +0#0000000#ffffff0@63
+|$| |p|r|i|n|t|f| |'|\|0|3@1|[|0|;|3|0|;|4|1|m|h|e|l@1|o| |w|o|r|l|d|\|0|3@1|[|0|m|\|n|'| @30
+|h+0#0000001#e000002|e|l@1|o| |w|o|r|l|d| +0#0000000#ffffff0@63
+|$| > @72
+|!+2#ffffff16#00e0003|s|h| |[|r|u|n@1|i|n|g|]| @43|1|,|1| @11|A|l@1
+| +0#0000000#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|[+1#0000000&|N|o| |N|a|m|e|]| @47|0|,|0|-|1| @9|A|l@1
+| +0&&@74
index 5343efb954dfe11c05a940a73c2bfcd7139b2f40..b53f0cd537d90e7570085e8322107a1c01d8180a 100644 (file)
@@ -2149,6 +2149,30 @@ func Test_terminal_ansicolors_default()
   exe buf . 'bwipe'
 endfunc
 
+func Test_terminal_ansicolors_default_reset_tgc()
+  CheckFeature termguicolors
+  CheckRunVimInTerminal
+
+  let $PS1="$ "
+  let buf = RunVimInTerminal('-c "term sh"', {'rows': 12})
+  call TermWait(buf)
+  " Wait for the shell to display a prompt
+  call WaitForAssert({-> assert_notequal('', term_getline(buf, 1))})
+
+  call term_sendkeys(buf, "printf '\\033[0;30;41mhello world\\033[0m\\n'\<CR>")
+  call WaitForAssert({-> assert_match('hello world', term_getline(buf, 2))})
+  call term_sendkeys(buf, "\<C-W>:set notgc\<CR>")
+  call term_sendkeys(buf, "printf '\\033[0;30;41mhello world\\033[0m\\n'\<CR>")
+  call WaitForAssert({-> assert_match('hello world', term_getline(buf, 4))})
+
+  call VerifyScreenDump(buf, 'Test_terminal_ansi_reset_tgc', {})
+
+  call term_sendkeys(buf, "exit\<CR>")
+  call TermWait(buf)
+  call StopVimInTerminal(buf)
+  unlet! $PS1
+endfunc
+
 let s:test_colors = [
        \ '#616e64', '#0d0a79',
        \ '#6d610d', '#0a7373',
index c51a07daa43be2e0d6c428975e77b0179aa6dd1e..521fc8323cadd8df7ef3ee3726c94d09beb3b6f9 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1078,
 /**/
     1077,
 /**/