To: vim_dev@googlegroups.com Subject: Patch 8.2.0802 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0802 Problem: Libvterm code lags behind the upstream version. Solution: Include revisions 759 - 762. Files: src/terminal.c, src/libvterm/doc/seqs.txt, src/libvterm/include/vterm.h, src/libvterm/src/pen.c, src/libvterm/src/screen.c, src/libvterm/src/state.c, src/libvterm/src/vterm.c, src/libvterm/src/vterm_internal.h, src/libvterm/t/harness.c, src/libvterm/t/12state_scroll.test *** ../vim-8.2.0801/src/terminal.c 2020-05-19 23:10:55.854520109 +0200 --- src/terminal.c 2020-05-20 18:27:53.848379061 +0200 *************** *** 4321,4334 **** return 1; } ! static VTermParserCallbacks parser_fallbacks = { ! NULL, // text NULL, // control - NULL, // escape parse_csi, // csi parse_osc, // osc ! NULL, // dcs ! NULL // resize }; /* --- 4321,4331 ---- return 1; } ! static VTermStateFallbacks state_fallbacks = { NULL, // control parse_csi, // csi parse_osc, // osc ! NULL // dcs }; /* *************** *** 4411,4417 **** value.boolean = 0; #endif vterm_state_set_termprop(state, VTERM_PROP_CURSORBLINK, &value); ! vterm_state_set_unrecognised_fallbacks(state, &parser_fallbacks, term); return OK; } --- 4408,4414 ---- value.boolean = 0; #endif vterm_state_set_termprop(state, VTERM_PROP_CURSORBLINK, &value); ! vterm_state_set_unrecognised_fallbacks(state, &state_fallbacks, term); return OK; } *** ../vim-8.2.0801/src/libvterm/doc/seqs.txt 2020-05-17 22:27:36.728262245 +0200 --- src/libvterm/doc/seqs.txt 2020-05-20 18:30:26.851856643 +0200 *************** *** 170,175 **** --- 170,176 ---- SGR 4:x = Underline style 123 SGR 5 = Blink on 123 SGR 7 = Reverse on + SGR 8 = Conceal on SGR 9 = Strikethrough on SGR 10-19 = Select font SGR 21 = Underline double *************** *** 178,183 **** --- 179,185 ---- 23 SGR 24 = Underline off 23 SGR 25 = Blink off 23 SGR 27 = Reverse off + SGR 28 = Conceal off SGR 29 = Strikethrough off SGR 30-37 = Foreground ANSI SGR 38 = Foreground alternative palette *** ../vim-8.2.0801/src/libvterm/include/vterm.h 2020-05-19 21:19:34.887367044 +0200 --- src/libvterm/include/vterm.h 2020-05-20 18:30:26.851856643 +0200 *************** *** 128,133 **** --- 128,134 ---- VTERM_ATTR_ITALIC, // bool: 3, 23 VTERM_ATTR_BLINK, // bool: 5, 25 VTERM_ATTR_REVERSE, // bool: 7, 27 + VTERM_ATTR_CONCEAL, // bool: 8, 28 VTERM_ATTR_STRIKE, // bool: 9, 29 VTERM_ATTR_FONT, // number: 10-19 VTERM_ATTR_FOREGROUND, // color: 30-39 90-97 *************** *** 314,326 **** // useful to add protocol? } VTermMouseState; VTermState *vterm_obtain_state(VTerm *vt); void vterm_state_set_callbacks(VTermState *state, const VTermStateCallbacks *callbacks, void *user); void *vterm_state_get_cbdata(VTermState *state); ! // Only invokes control, csi, osc, dcs ! void vterm_state_set_unrecognised_fallbacks(VTermState *state, const VTermParserCallbacks *fallbacks, void *user); void *vterm_state_get_unrecognised_fbdata(VTermState *state); // Initialize the state. --- 315,333 ---- // useful to add protocol? } VTermMouseState; + typedef struct { + int (*control)(unsigned char control, void *user); + int (*csi)(const char *leader, const long args[], int argcount, const char *intermed, char command, void *user); + int (*osc)(int command, VTermStringFragment frag, void *user); + int (*dcs)(const char *command, size_t commandlen, VTermStringFragment frag, void *user); + } VTermStateFallbacks; + VTermState *vterm_obtain_state(VTerm *vt); void vterm_state_set_callbacks(VTermState *state, const VTermStateCallbacks *callbacks, void *user); void *vterm_state_get_cbdata(VTermState *state); ! void vterm_state_set_unrecognised_fallbacks(VTermState *state, const VTermStateFallbacks *fallbacks, void *user); void *vterm_state_get_unrecognised_fbdata(VTermState *state); // Initialize the state. *************** *** 349,354 **** --- 356,362 ---- unsigned int italic : 1; unsigned int blink : 1; unsigned int reverse : 1; + unsigned int conceal : 1; unsigned int strike : 1; unsigned int font : 4; // 0 to 9 unsigned int dwl : 1; // On a DECDWL or DECDHL line *************** *** 395,402 **** void vterm_screen_set_callbacks(VTermScreen *screen, const VTermScreenCallbacks *callbacks, void *user); void *vterm_screen_get_cbdata(VTermScreen *screen); ! // Only invokes control, csi, osc, dcs ! void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermParserCallbacks *fallbacks, void *user); void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen); // Enable support for using the alternate screen if "altscreen" is non-zero. --- 403,409 ---- void vterm_screen_set_callbacks(VTermScreen *screen, const VTermScreenCallbacks *callbacks, void *user); void *vterm_screen_get_cbdata(VTermScreen *screen); ! void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermStateFallbacks *fallbacks, void *user); void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen); // Enable support for using the alternate screen if "altscreen" is non-zero. *************** *** 438,445 **** VTERM_ATTR_FONT_MASK = 1 << 6, VTERM_ATTR_FOREGROUND_MASK = 1 << 7, VTERM_ATTR_BACKGROUND_MASK = 1 << 8, ! VTERM_ALL_ATTRS_MASK = (1 << 9) - 1 } VTermAttrMask; int vterm_screen_get_attrs_extent(const VTermScreen *screen, VTermRect *extent, VTermPos pos, VTermAttrMask attrs); --- 445,453 ---- VTERM_ATTR_FONT_MASK = 1 << 6, VTERM_ATTR_FOREGROUND_MASK = 1 << 7, VTERM_ATTR_BACKGROUND_MASK = 1 << 8, + VTERM_ATTR_CONCEAL_MASK = 1 << 9, ! VTERM_ALL_ATTRS_MASK = (1 << 10) - 1 } VTermAttrMask; int vterm_screen_get_attrs_extent(const VTermScreen *screen, VTermRect *extent, VTermPos pos, VTermAttrMask attrs); *** ../vim-8.2.0801/src/libvterm/src/pen.c 2020-05-17 22:27:36.728262245 +0200 --- src/libvterm/src/pen.c 2020-05-20 18:30:26.851856643 +0200 *************** *** 170,175 **** --- 170,176 ---- state->pen.italic = 0; setpenattr_bool(state, VTERM_ATTR_ITALIC, 0); state->pen.blink = 0; setpenattr_bool(state, VTERM_ATTR_BLINK, 0); state->pen.reverse = 0; setpenattr_bool(state, VTERM_ATTR_REVERSE, 0); + state->pen.conceal = 0; setpenattr_bool(state, VTERM_ATTR_CONCEAL, 0); state->pen.strike = 0; setpenattr_bool(state, VTERM_ATTR_STRIKE, 0); state->pen.font = 0; setpenattr_int( state, VTERM_ATTR_FONT, 0); *************** *** 192,197 **** --- 193,199 ---- setpenattr_bool(state, VTERM_ATTR_ITALIC, state->pen.italic); setpenattr_bool(state, VTERM_ATTR_BLINK, state->pen.blink); setpenattr_bool(state, VTERM_ATTR_REVERSE, state->pen.reverse); + setpenattr_bool(state, VTERM_ATTR_CONCEAL, state->pen.conceal); setpenattr_bool(state, VTERM_ATTR_STRIKE, state->pen.strike); setpenattr_int( state, VTERM_ATTR_FONT, state->pen.font); setpenattr_col( state, VTERM_ATTR_FOREGROUND, state->pen.fg); *************** *** 293,298 **** --- 295,305 ---- setpenattr_bool(state, VTERM_ATTR_REVERSE, 1); break; + case 8: // Conceal on + state->pen.conceal = 1; + setpenattr_bool(state, VTERM_ATTR_CONCEAL, 1); + break; + case 9: // Strikethrough on state->pen.strike = 1; setpenattr_bool(state, VTERM_ATTR_STRIKE, 1); *************** *** 334,339 **** --- 341,351 ---- setpenattr_bool(state, VTERM_ATTR_REVERSE, 0); break; + case 28: // Conceal off (Reveal) + state->pen.conceal = 0; + setpenattr_bool(state, VTERM_ATTR_CONCEAL, 0); + break; + case 29: // Strikethrough off state->pen.strike = 0; setpenattr_bool(state, VTERM_ATTR_STRIKE, 0); *************** *** 433,438 **** --- 445,453 ---- if(state->pen.reverse) args[argi++] = 7; + if(state->pen.conceal) + args[argi++] = 8; + if(state->pen.strike) args[argi++] = 9; *************** *** 512,517 **** --- 527,536 ---- val->boolean = state->pen.reverse; return 1; + case VTERM_ATTR_CONCEAL: + val->boolean = state->pen.conceal; + return 1; + case VTERM_ATTR_STRIKE: val->boolean = state->pen.strike; return 1; *** ../vim-8.2.0801/src/libvterm/src/screen.c 2020-05-19 21:19:34.887367044 +0200 --- src/libvterm/src/screen.c 2020-05-20 18:33:45.439180309 +0200 *************** *** 21,26 **** --- 21,27 ---- unsigned int italic : 1; unsigned int blink : 1; unsigned int reverse : 1; + unsigned int conceal : 1; unsigned int strike : 1; unsigned int font : 4; // 0 to 9 *************** *** 420,425 **** --- 421,429 ---- case VTERM_ATTR_REVERSE: screen->pen.reverse = val->boolean; return 1; + case VTERM_ATTR_CONCEAL: + screen->pen.conceal = val->boolean; + return 1; case VTERM_ATTR_STRIKE: screen->pen.strike = val->boolean; return 1; *************** *** 544,549 **** --- 548,554 ---- dst->pen.italic = src->attrs.italic; dst->pen.blink = src->attrs.blink; dst->pen.reverse = src->attrs.reverse ^ screen->global_reverse; + dst->pen.conceal = src->attrs.conceal; dst->pen.strike = src->attrs.strike; dst->pen.font = src->attrs.font; *************** *** 553,558 **** --- 558,565 ---- if(src->width == 2 && pos.col < (new_cols-1)) (dst + 1)->chars[0] = (uint32_t) -1; } + for( ; pos.col < new_cols; pos.col++) + clearcell(screen, &new_buffer[pos.row * new_cols + pos.col]); new_row--; if(active) *************** *** 815,820 **** --- 822,828 ---- cell->attrs.italic = intcell->pen.italic; cell->attrs.blink = intcell->pen.blink; cell->attrs.reverse = intcell->pen.reverse ^ screen->global_reverse; + cell->attrs.conceal = intcell->pen.conceal; cell->attrs.strike = intcell->pen.strike; cell->attrs.font = intcell->pen.font; *************** *** 890,896 **** return screen->cbdata; } ! void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermParserCallbacks *fallbacks, void *user) { vterm_state_set_unrecognised_fallbacks(screen->state, fallbacks, user); } --- 898,904 ---- return screen->cbdata; } ! void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermStateFallbacks *fallbacks, void *user) { vterm_state_set_unrecognised_fallbacks(screen->state, fallbacks, user); } *************** *** 935,940 **** --- 943,950 ---- return 1; if((attrs & VTERM_ATTR_REVERSE_MASK) && (a->pen.reverse != b->pen.reverse)) return 1; + if((attrs & VTERM_ATTR_CONCEAL_MASK) && (a->pen.conceal != b->pen.conceal)) + return 1; if((attrs & VTERM_ATTR_STRIKE_MASK) && (a->pen.strike != b->pen.strike)) return 1; if((attrs & VTERM_ATTR_FONT_MASK) && (a->pen.font != b->pen.font)) *** ../vim-8.2.0801/src/libvterm/src/state.c 2020-05-19 21:43:41.739172477 +0200 --- src/libvterm/src/state.c 2020-05-20 18:34:22.087027529 +0200 *************** *** 1478,1483 **** --- 1478,1491 ---- state->scrollregion_bottom = -1; } + // Setting the scrolling region restores the cursor to the home position + state->pos.row = 0; + state->pos.col = 0; + if(state->mode.origin) { + state->pos.row += state->scrollregion_top; + state->pos.col += SCROLLREGION_LEFT(state); + } + break; case 0x73: // DECSLRM - DEC custom *************** *** 1499,1504 **** --- 1507,1520 ---- state->scrollregion_right = -1; } + // Setting the scrolling region restores the cursor to the home position + state->pos.row = 0; + state->pos.col = 0; + if(state->mode.origin) { + state->pos.row += state->scrollregion_top; + state->pos.col += SCROLLREGION_LEFT(state); + } + break; case 0x74: *************** *** 1979,1985 **** return state->cbdata; } ! void vterm_state_set_unrecognised_fallbacks(VTermState *state, const VTermParserCallbacks *fallbacks, void *user) { if(fallbacks) { state->fallbacks = fallbacks; --- 1995,2001 ---- return state->cbdata; } ! void vterm_state_set_unrecognised_fallbacks(VTermState *state, const VTermStateFallbacks *fallbacks, void *user) { if(fallbacks) { state->fallbacks = fallbacks; *** ../vim-8.2.0801/src/libvterm/src/vterm.c 2020-05-19 21:19:34.891367031 +0200 --- src/libvterm/src/vterm.c 2020-05-20 18:30:26.851856643 +0200 *************** *** 261,266 **** --- 261,267 ---- case VTERM_ATTR_ITALIC: return VTERM_VALUETYPE_BOOL; case VTERM_ATTR_BLINK: return VTERM_VALUETYPE_BOOL; case VTERM_ATTR_REVERSE: return VTERM_VALUETYPE_BOOL; + case VTERM_ATTR_CONCEAL: return VTERM_VALUETYPE_BOOL; case VTERM_ATTR_STRIKE: return VTERM_VALUETYPE_BOOL; case VTERM_ATTR_FONT: return VTERM_VALUETYPE_INT; case VTERM_ATTR_FOREGROUND: return VTERM_VALUETYPE_COLOR; *** ../vim-8.2.0801/src/libvterm/src/vterm_internal.h 2020-05-19 21:19:34.891367031 +0200 --- src/libvterm/src/vterm_internal.h 2020-05-20 18:30:26.851856643 +0200 *************** *** 53,58 **** --- 53,59 ---- unsigned int italic:1; unsigned int blink:1; unsigned int reverse:1; + unsigned int conceal:1; unsigned int strike:1; unsigned int font:4; // To store 0-9 }; *************** *** 73,79 **** const VTermStateCallbacks *callbacks; void *cbdata; ! const VTermParserCallbacks *fallbacks; void *fbdata; int rows; --- 74,80 ---- const VTermStateCallbacks *callbacks; void *cbdata; ! const VTermStateFallbacks *fallbacks; void *fbdata; int rows; *** ../vim-8.2.0801/src/libvterm/t/harness.c 2020-05-19 21:19:34.887367044 +0200 --- src/libvterm/t/harness.c 2020-05-20 18:30:26.851856643 +0200 *************** *** 206,212 **** NULL // resize }; ! // These callbacks are shared by State and Screen static int want_movecursor = 0; static VTermPos state_pos; --- 206,219 ---- NULL // resize }; ! static VTermStateFallbacks fallbacks = { ! parser_control, // control ! parser_csi, // csi ! parser_osc, // osc ! parser_dcs // dcs ! }; ! ! /* These callbacks are shared by State and Screen */ static int want_movecursor = 0; static VTermPos state_pos; *************** *** 319,324 **** --- 326,332 ---- int italic; int blink; int reverse; + int conceal; int strike; int font; VTermColor foreground; *************** *** 342,347 **** --- 350,358 ---- case VTERM_ATTR_REVERSE: state_pen.reverse = val->boolean; break; + case VTERM_ATTR_CONCEAL: + state_pen.conceal = val->boolean; + break; case VTERM_ATTR_STRIKE: state_pen.strike = val->boolean; break; *************** *** 552,558 **** want_settermprop = sense; break; case 'f': ! vterm_state_set_unrecognised_fallbacks(state, sense ? &parser_cbs : NULL, NULL); break; default: fprintf(stderr, "Unrecognised WANTSTATE flag '%c'\n", line[i]); --- 563,569 ---- want_settermprop = sense; break; case 'f': ! vterm_state_set_unrecognised_fallbacks(state, sense ? &fallbacks : NULL, NULL); break; default: fprintf(stderr, "Unrecognised WANTSTATE flag '%c'\n", line[i]); *** ../vim-8.2.0801/src/libvterm/t/12state_scroll.test 2017-06-24 16:44:02.000000000 +0200 --- src/libvterm/t/12state_scroll.test 2020-05-20 18:34:22.087027529 +0200 *************** *** 40,47 **** ?cursor = 20,0 !Index in DECSTBM - PUSH "\e[10H" PUSH "\e[9;10r" PUSH "\eM" ?cursor = 8,0 PUSH "\eM" --- 40,47 ---- ?cursor = 20,0 !Index in DECSTBM PUSH "\e[9;10r" + PUSH "\e[10H" PUSH "\eM" ?cursor = 8,0 PUSH "\eM" *************** *** 148,150 **** --- 148,156 ---- moverect 0..23,0..80 -> 2..25,0..80 erase 0..2,0..80 ?cursor = 0,0 + + !DECSTBM resets cursor position + PUSH "\e[5;5H" + ?cursor = 4,4 + PUSH "\e[r" + ?cursor = 0,0 *** ../vim-8.2.0801/src/version.c 2020-05-19 23:10:55.854520109 +0200 --- src/version.c 2020-05-20 18:37:15.534296601 +0200 *************** *** 748,749 **** --- 748,751 ---- { /* Add new patch number below this line */ + /**/ + 802, /**/ -- Fingers not found - Pound head on keyboard to continue. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///