Mercurial > vim
diff src/terminal.c @ 20488:1d595fada804 v8.2.0798
patch 8.2.0798: libvterm code lags behind the upstream version
Commit: https://github.com/vim/vim/commit/be593bf135f6967335b14ba188bd5f8f32175c75
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue May 19 21:20:04 2020 +0200
patch 8.2.0798: libvterm code lags behind the upstream version
Problem: Libvterm code lags behind the upstream version.
Solution: Include revisions 755 - 758.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 19 May 2020 21:30:07 +0200 |
parents | 28d82a342331 |
children | 4f6904d8b258 |
line wrap: on
line diff
--- a/src/terminal.c +++ b/src/terminal.c @@ -2998,22 +2998,27 @@ handle_settermprop( void *user) { term_T *term = (term_T *)user; + char_u *strval = NULL; switch (prop) { case VTERM_PROP_TITLE: + strval = vim_strnsave((char_u *)value->string.str, + (int)value->string.len); + if (strval == NULL) + break; vim_free(term->tl_title); // a blank title isn't useful, make it empty, so that "running" is // displayed - if (*skipwhite((char_u *)value->string) == NUL) + if (*skipwhite(strval) == NUL) term->tl_title = NULL; // Same as blank else if (term->tl_arg0_cmd != NULL - && STRNCMP(term->tl_arg0_cmd, (char_u *)value->string, + && STRNCMP(term->tl_arg0_cmd, strval, (int)STRLEN(term->tl_arg0_cmd)) == 0) term->tl_title = NULL; // Empty corrupted data of winpty - else if (STRNCMP(" - ", (char_u *)value->string, 4) == 0) + else if (STRNCMP(" - ", strval, 4) == 0) term->tl_title = NULL; #ifdef MSWIN else if (!enc_utf8 && enc_codepage > 0) @@ -3022,8 +3027,8 @@ handle_settermprop( int length = 0; MultiByteToWideChar_alloc(CP_UTF8, 0, - (char*)value->string, (int)STRLEN(value->string), - &ret, &length); + (char*)value->string.str, + (int)value->string.len, &ret, &length); if (ret != NULL) { WideCharToMultiByte_alloc(enc_codepage, 0, @@ -3034,7 +3039,10 @@ handle_settermprop( } #endif else - term->tl_title = vim_strsave((char_u *)value->string); + { + term->tl_title = vim_strsave(strval); + strval = NULL; + } VIM_CLEAR(term->tl_status_text); if (term == curbuf->b_term) maketitle(); @@ -3057,7 +3065,11 @@ handle_settermprop( break; case VTERM_PROP_CURSORCOLOR: - cursor_color_copy(&term->tl_cursor_color, (char_u*)value->string); + strval = vim_strnsave((char_u *)value->string.str, + (int)value->string.len); + if (strval == NULL) + break; + cursor_color_copy(&term->tl_cursor_color, strval); may_set_cursor_props(term); break; @@ -3069,6 +3081,8 @@ handle_settermprop( default: break; } + vim_free(strval); + // Always return 1, otherwise vterm doesn't store the value internally. return 1; } @@ -4181,7 +4195,7 @@ handle_call_command(term_T *term, channe * We recognize a terminal API command. */ static int -parse_osc(const char *command, size_t cmdlen, void *user) +parse_osc(int command, VTermStringFragment frag, void *user) { term_T *term = (term_T *)user; js_read_T reader; @@ -4190,10 +4204,10 @@ parse_osc(const char *command, size_t cm : term->tl_job->jv_channel; // We recognize only OSC 5 1 ; {command} - if (cmdlen < 3 || STRNCMP(command, "51;", 3) != 0) - return 0; // not handled - - reader.js_buf = vim_strnsave((char_u *)command + 3, (int)(cmdlen - 3)); + if (command != 51) + return 0; + + reader.js_buf = vim_strnsave((char_u *)frag.str, (int)(frag.len)); if (reader.js_buf == NULL) return 1; reader.js_fill = NULL;