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);