Mercurial > vim
diff src/libvterm/src/state.c @ 20460:c15dd3da4f47 v8.2.0784
patch 8.2.0784: libvterm code lags behind the upstream version
Commit: https://github.com/vim/vim/commit/94d729cbe8f0f788d9d7539f733cff395e73b228
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun May 17 21:50:16 2020 +0200
patch 8.2.0784: libvterm code lags behind the upstream version
Problem: Libvterm code lags behind the upstream version.
Solution: Include revisions 730 - 733.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 17 May 2020 22:00:04 +0200 |
parents | 89fade12827d |
children | d0bf39eb2b07 |
line wrap: on
line diff
--- a/src/libvterm/src/state.c +++ b/src/libvterm/src/state.c @@ -1617,6 +1617,8 @@ static int on_osc(const char *command, s static void request_status_string(VTermState *state, const char *command, size_t cmdlen) { + VTerm *vt = state->vt; + if(cmdlen == 1) switch(command[0]) { case 'm': // Query SGR @@ -1624,22 +1626,37 @@ static void request_status_string(VTermS long args[20]; int argc = vterm_state_getpen(state, args, sizeof(args)/sizeof(args[0])); int argi; - vterm_push_output_sprintf_ctrl(state->vt, C1_DCS, "1$r"); - for(argi = 0; argi < argc; argi++) - vterm_push_output_sprintf(state->vt, - argi == argc - 1 ? "%d" : - CSI_ARG_HAS_MORE(args[argi]) ? "%d:" : - "%d;", - CSI_ARG(args[argi])); - vterm_push_output_sprintf(state->vt, "m"); - vterm_push_output_sprintf_ctrl(state->vt, C1_ST, ""); + size_t cur = 0; + + cur += SNPRINTF(vt->tmpbuffer + cur, vt->tmpbuffer_len - cur, + vt->mode.ctrl8bit ? "\x90" "1$r" : ESC_S "P" "1$r"); // DCS 1$r ... + if(cur >= vt->tmpbuffer_len) + return; + + for(argi = 0; argi < argc; argi++) { + cur += SNPRINTF(vt->tmpbuffer + cur, vt->tmpbuffer_len - cur, + argi == argc - 1 ? "%ld" : + CSI_ARG_HAS_MORE(args[argi]) ? "%ld:" : + "%ld;", + CSI_ARG(args[argi])); + + if(cur >= vt->tmpbuffer_len) + return; + } + + cur += SNPRINTF(vt->tmpbuffer + cur, vt->tmpbuffer_len - cur, + vt->mode.ctrl8bit ? "m" "\x9C" : "m" ESC_S "\\"); // ... m ST + if(cur >= vt->tmpbuffer_len) + return; + + vterm_push_output_bytes(vt, vt->tmpbuffer, cur); } return; case 'r': // Query DECSTBM - vterm_push_output_sprintf_dcs(state->vt, "1$r%d;%dr", state->scrollregion_top+1, SCROLLREGION_BOTTOM(state)); + vterm_push_output_sprintf_dcs(vt, "1$r%d;%dr", state->scrollregion_top+1, SCROLLREGION_BOTTOM(state)); return; case 's': // Query DECSLRM - vterm_push_output_sprintf_dcs(state->vt, "1$r%d;%ds", SCROLLREGION_LEFT(state)+1, SCROLLREGION_RIGHT(state)); + vterm_push_output_sprintf_dcs(vt, "1$r%d;%ds", SCROLLREGION_LEFT(state)+1, SCROLLREGION_RIGHT(state)); return; } @@ -1653,11 +1670,11 @@ static void request_status_string(VTermS } if(state->mode.cursor_blink) reply--; - vterm_push_output_sprintf_dcs(state->vt, "1$r%d q", reply); + vterm_push_output_sprintf_dcs(vt, "1$r%d q", reply); return; } else if(strneq(command, "\"q", 2)) { - vterm_push_output_sprintf_dcs(state->vt, "1$r%d\"q", state->protected_cell ? 1 : 2); + vterm_push_output_sprintf_dcs(vt, "1$r%d\"q", state->protected_cell ? 1 : 2); return; } }