Mercurial > vim
diff src/libvterm/src/vterm.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 | ffadba5f898c |
children | 9ad473b50471 |
line wrap: on
line diff
--- a/src/libvterm/src/vterm.c +++ b/src/libvterm/src/vterm.c @@ -64,6 +64,9 @@ VTerm *vterm_new_with_allocator(int rows return NULL; } + vt->outfunc = NULL; + vt->outdata = NULL; + vt->outbuffer_len = 200; vt->outbuffer_cur = 0; vt->outbuffer = vterm_allocator_malloc(vt, vt->outbuffer_len); @@ -135,8 +138,19 @@ void vterm_set_utf8(VTerm *vt, int is_ut vt->mode.utf8 = is_utf8; } +void vterm_output_set_callback(VTerm *vt, VTermOutputCallback *func, void *user) +{ + vt->outfunc = func; + vt->outdata = user; +} + INTERNAL void vterm_push_output_bytes(VTerm *vt, const char *bytes, size_t len) { + if(vt->outfunc) { + (vt->outfunc)(bytes, len, vt->outdata); + return; + } + if(len > vt->outbuffer_len - vt->outbuffer_cur) { DEBUG_LOG("vterm_push_output_bytes(): buffer overflow; dropping output\n"); return; @@ -146,24 +160,6 @@ INTERNAL void vterm_push_output_bytes(VT vt->outbuffer_cur += len; } -#if (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 500) \ - || defined(_ISOC99_SOURCE) || defined(_BSD_SOURCE) -# undef VSNPRINTF -# define VSNPRINTF vsnprintf -# undef SNPRINTF -# define SNPRINTF snprintf -#else -# ifdef VSNPRINTF -// Use a provided vsnprintf() function. -int VSNPRINTF(char *str, size_t str_m, const char *fmt, va_list ap); -# endif -# ifdef SNPRINTF -// Use a provided snprintf() function. -int SNPRINTF(char *str, size_t str_m, const char *fmt, ...); -# endif -#endif - - INTERNAL void vterm_push_output_vsprintf(VTerm *vt, const char *format, va_list args) { size_t len; @@ -214,12 +210,9 @@ INTERNAL void vterm_push_output_sprintf_ size_t cur; va_list args; - if(!vt->mode.ctrl8bit) - cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len, - ESC_S "%c", C1_DCS - 0x40); - else - cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len, - "%c", C1_DCS); + cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len, + vt->mode.ctrl8bit ? "\x90" : ESC_S "P"); // DCS + if(cur >= vt->tmpbuffer_len) return; vterm_push_output_bytes(vt, vt->tmpbuffer, cur); @@ -228,12 +221,8 @@ INTERNAL void vterm_push_output_sprintf_ vterm_push_output_vsprintf(vt, fmt, args); va_end(args); - if(!vt->mode.ctrl8bit) - cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len, - ESC_S "%c", C1_ST - 0x40); - else - cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len, - "%c", C1_ST); + cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len, + vt->mode.ctrl8bit ? "\x9C" : ESC_S "\\"); // ST if(cur >= vt->tmpbuffer_len) return; vterm_push_output_bytes(vt, vt->tmpbuffer, cur);