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 -- Br...@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 ///