Patch 8.2.0783
Problem: Libvterm code lags behind the upstream version.
Solution: Include revisions 728 - 729.
Files: src/Make_cyg_ming.mak, src/Make_mvc.mak, src/Makefile,
src/libvterm/src/keyboard.c, src/libvterm/t/25state_input.test,
src/libvterm/t/harness.c, src/libvterm/src/vterm.c,
src/libvterm/src/vterm_internal.h,
src/libvterm/t/26state_query.test
*** ../vim-8.2.0782/src/Make_cyg_ming.mak 2020-05-01 14:26:17.124949293
+0200
--- src/Make_cyg_ming.mak 2020-05-17 20:16:51.242595200 +0200
***************
*** 1246,1251 ****
--- 1246,1252 ----
CCCTERM = $(CC) -c $(CFLAGS) -Ilibvterm/include -DINLINE="" \
-DVSNPRINTF=vim_vsnprintf \
+ -DSNPRINTF=vim_snprintf \
-DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
-DWCWIDTH_FUNCTION=utf_uint2cells \
-DGET_SPECIAL_PTY_TYPE_FUNCTION=get_special_pty_type
*** ../vim-8.2.0782/src/Make_mvc.mak 2020-05-15 18:21:47.286058929 +0200
--- src/Make_mvc.mak 2020-05-17 20:17:05.802552868 +0200
***************
*** 1812,1817 ****
--- 1812,1818 ----
CCCTERM = $(CC) $(CFLAGS) -Ilibvterm/include -DINLINE="" \
-DVSNPRINTF=vim_vsnprintf \
+ -DSNPRINTF=vim_snprintf \
-DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
-DWCWIDTH_FUNCTION=utf_uint2cells \
-DGET_SPECIAL_PTY_TYPE_FUNCTION=get_special_pty_type \
*** ../vim-8.2.0782/src/Makefile 2020-05-11 22:13:24.793171617 +0200
--- src/Makefile 2020-05-17 20:17:12.986531988 +0200
***************
*** 3537,3542 ****
--- 3537,3543 ----
# prefix vterm_ to avoid name clashes.
CCCTERM = $(CCC_NF) $(VTERM_CFLAGS) $(ALL_CFLAGS) -DINLINE="" \
-DVSNPRINTF=vim_vsnprintf \
+ -DSNPRINTF=vim_snprintf \
-DIS_COMBINING_FUNCTION=utf_iscomposing_uint \
-DWCWIDTH_FUNCTION=utf_uint2cells
*** ../vim-8.2.0782/src/libvterm/src/keyboard.c 2019-10-10 20:30:04.000000000
+0200
--- src/libvterm/src/keyboard.c 2020-05-17 19:08:02.490010475 +0200
***************
*** 102,111 ****
static keycodes_s keycodes_fn[] = {
{ KEYCODE_NONE, 0, 0 }, // F0 - shouldn't happen
! { KEYCODE_CSI_CURSOR, 'P', 0 }, // F1
! { KEYCODE_CSI_CURSOR, 'Q', 0 }, // F2
! { KEYCODE_CSI_CURSOR, 'R', 0 }, // F3
! { KEYCODE_CSI_CURSOR, 'S', 0 }, // F4
{ KEYCODE_CSINUM, '~', 15 }, // F5
{ KEYCODE_CSINUM, '~', 17 }, // F6
{ KEYCODE_CSINUM, '~', 18 }, // F7
--- 102,111 ----
static keycodes_s keycodes_fn[] = {
{ KEYCODE_NONE, 0, 0 }, // F0 - shouldn't happen
! { KEYCODE_SS3, 'P', 0 }, // F1
! { KEYCODE_SS3, 'Q', 0 }, // F2
! { KEYCODE_SS3, 'R', 0 }, // F3
! { KEYCODE_SS3, 'S', 0 }, // F4
{ KEYCODE_CSINUM, '~', 15 }, // F5
{ KEYCODE_CSINUM, '~', 17 }, // F6
{ KEYCODE_CSINUM, '~', 18 }, // F7
*** ../vim-8.2.0782/src/libvterm/t/25state_input.test 2018-03-25
14:54:41.000000000 +0200
--- src/libvterm/t/25state_input.test 2020-05-17 19:06:12.610362364 +0200
***************
*** 111,116 ****
--- 111,128 ----
INKEY 0 Enter
output "\x0d\x0a"
+ !Unmodified F1 is SS3 P
+ INKEY 0 F1
+ output "\eOP"
+
+ !Modified F1 is CSI P
+ INKEY S F1
+ output "\e[1;2P"
+ INKEY A F1
+ output "\e[1;3P"
+ INKEY C F1
+ output "\e[1;5P"
+
!Keypad in DECKPNM
INKEY 0 KP0
output "0"
*** ../vim-8.2.0782/src/libvterm/t/harness.c 2020-04-12 14:50:22.317438970
+0200
--- src/libvterm/t/harness.c 2020-05-17 19:06:12.610362364 +0200
***************
*** 47,52 ****
--- 47,53 ----
{ "Tab", VTERM_KEY_TAB },
{ "Enter", VTERM_KEY_ENTER },
{ "KP0", VTERM_KEY_KP_0 },
+ { "F1", VTERM_KEY_FUNCTION(1) },
{ NULL, VTERM_KEY_NONE },
};
int i;
*** ../vim-8.2.0782/src/libvterm/src/vterm.c 2019-12-04 22:08:47.000000000
+0100
--- src/libvterm/src/vterm.c 2020-05-17 20:43:17.219953310 +0200
***************
*** 74,79 ****
--- 74,82 ----
return NULL;
}
+ vt->tmpbuffer_len = 64;
+ vt->tmpbuffer = vterm_allocator_malloc(vt, vt->tmpbuffer_len);
+
return vt;
}
***************
*** 135,201 ****
INTERNAL void vterm_push_output_bytes(VTerm *vt, const char *bytes, size_t
len)
{
if(len > vt->outbuffer_len - vt->outbuffer_cur) {
! DEBUG_LOG("vterm_push_output(): buffer overflow; truncating output\n");
! len = vt->outbuffer_len - vt->outbuffer_cur;
}
memcpy(vt->outbuffer + vt->outbuffer_cur, bytes, len);
vt->outbuffer_cur += len;
}
- static int outbuffer_is_full(VTerm *vt)
- {
- return vt->outbuffer_cur >= vt->outbuffer_len - 1;
- }
-
#if (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 500) \
|| defined(_ISOC99_SOURCE) || defined(_BSD_SOURCE)
# undef VSNPRINTF
# define VSNPRINTF vsnprintf
#else
# ifdef VSNPRINTF
// Use a provided vsnprintf() function.
int VSNPRINTF(char *str, size_t str_m, const char *fmt, va_list ap);
# endif
#endif
INTERNAL void vterm_push_output_vsprintf(VTerm *vt, const char *format,
va_list args)
{
! int written;
#ifndef VSNPRINTF
// When vsnprintf() is not available (C90) fall back to vsprintf().
char buffer[1024]; // 1Kbyte is enough for everybody, right?
#endif
- if(outbuffer_is_full(vt)) {
- DEBUG_LOG("vterm_push_output(): buffer overflow; truncating output\n");
- return;
- }
-
#ifdef VSNPRINTF
! written = VSNPRINTF(vt->outbuffer + vt->outbuffer_cur,
! vt->outbuffer_len - vt->outbuffer_cur,
! format, args);
!
! if(written == (int)(vt->outbuffer_len - vt->outbuffer_cur)) {
! // output was truncated
! vt->outbuffer_cur = vt->outbuffer_len - 1;
! }
! else
! vt->outbuffer_cur += written;
#else
! written = vsprintf(buffer, format, args);
!
! if(written >= (int)(vt->outbuffer_len - vt->outbuffer_cur - 1)) {
! // output was truncated
! written = vt->outbuffer_len - vt->outbuffer_cur - 1;
! }
! if (written > 0)
! {
! strncpy(vt->outbuffer + vt->outbuffer_cur, buffer, written + 1);
! vt->outbuffer_cur += written;
! }
#endif
}
--- 138,183 ----
INTERNAL void vterm_push_output_bytes(VTerm *vt, const char *bytes, size_t
len)
{
if(len > vt->outbuffer_len - vt->outbuffer_cur) {
! DEBUG_LOG("vterm_push_output_bytes(): buffer overflow; dropping
output\n");
! return;
}
memcpy(vt->outbuffer + vt->outbuffer_cur, bytes, len);
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;
#ifndef VSNPRINTF
// When vsnprintf() is not available (C90) fall back to vsprintf().
char buffer[1024]; // 1Kbyte is enough for everybody, right?
#endif
#ifdef VSNPRINTF
! len = VSNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len, format, args);
! vterm_push_output_bytes(vt, vt->tmpbuffer, len);
#else
! len = vsprintf(buffer, format, args);
! vterm_push_output_bytes(vt, buffer, len);
#endif
}
***************
*** 209,248 ****
INTERNAL void vterm_push_output_sprintf_ctrl(VTerm *vt, unsigned char ctrl,
const char *fmt, ...)
{
! size_t orig_cur = vt->outbuffer_cur;
va_list args;
if(ctrl >= 0x80 && !vt->mode.ctrl8bit)
! vterm_push_output_sprintf(vt, ESC_S "%c", ctrl - 0x40);
else
! vterm_push_output_sprintf(vt, "%c", ctrl);
va_start(args, fmt);
vterm_push_output_vsprintf(vt, fmt, args);
va_end(args);
-
- if(outbuffer_is_full(vt))
- vt->outbuffer_cur = orig_cur;
}
INTERNAL void vterm_push_output_sprintf_dcs(VTerm *vt, const char *fmt, ...)
{
! size_t orig_cur = vt->outbuffer_cur;
va_list args;
if(!vt->mode.ctrl8bit)
! vterm_push_output_sprintf(vt, ESC_S "%c", C1_DCS - 0x40);
else
! vterm_push_output_sprintf(vt, "%c", C1_DCS);
va_start(args, fmt);
vterm_push_output_vsprintf(vt, fmt, args);
va_end(args);
! vterm_push_output_sprintf_ctrl(vt, C1_ST, "");
!
! if(outbuffer_is_full(vt))
! vt->outbuffer_cur = orig_cur;
}
size_t vterm_output_get_buffer_size(const VTerm *vt)
--- 191,242 ----
INTERNAL void vterm_push_output_sprintf_ctrl(VTerm *vt, unsigned char ctrl,
const char *fmt, ...)
{
! size_t cur;
va_list args;
if(ctrl >= 0x80 && !vt->mode.ctrl8bit)
! cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len,
! ESC_S "%c", ctrl - 0x40);
else
! cur = SNPRINTF(vt->tmpbuffer, vt->tmpbuffer_len,
! "%c", ctrl);
! if(cur >= vt->tmpbuffer_len)
! return;
! vterm_push_output_bytes(vt, vt->tmpbuffer, cur);
va_start(args, fmt);
vterm_push_output_vsprintf(vt, fmt, args);
va_end(args);
}
INTERNAL void vterm_push_output_sprintf_dcs(VTerm *vt, const char *fmt, ...)
{
! 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);
! if(cur >= vt->tmpbuffer_len)
! return;
! vterm_push_output_bytes(vt, vt->tmpbuffer, cur);
va_start(args, fmt);
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);
! if(cur >= vt->tmpbuffer_len)
! return;
! vterm_push_output_bytes(vt, vt->tmpbuffer, cur);
}
size_t vterm_output_get_buffer_size(const VTerm *vt)
*** ../vim-8.2.0782/src/libvterm/src/vterm_internal.h 2019-10-10
19:44:39.000000000 +0200
--- src/libvterm/src/vterm_internal.h 2020-05-17 19:10:17.189581332 +0200
***************
*** 211,216 ****
--- 211,219 ----
size_t outbuffer_len;
size_t outbuffer_cur;
+ char *tmpbuffer;
+ size_t tmpbuffer_len;
+
VTermState *state;
VTermScreen *screen;
*** ../vim-8.2.0782/src/libvterm/t/26state_query.test 2019-08-18
20:58:44.000000000 +0200
--- src/libvterm/t/26state_query.test 2020-05-17 19:28:35.090835607 +0200
***************
*** 59,62 ****
!Truncation on attempted buffer overflow
PUSH "\e[6n" x 30
! output "\e[10;10R" x 24
--- 59,62 ----
!Truncation on attempted buffer overflow
PUSH "\e[6n" x 30
! output "\e[10;10R" x 25
*** ../vim-8.2.0782/src/version.c 2020-05-17 18:53:22.104931177 +0200
--- src/version.c 2020-05-17 20:51:43.394153355 +0200
***************
*** 748,749 ****
--- 748,751 ----
{ /* Add new patch number below this line */
+ /**/
+ 783,
/**/
--
hundred-and-one symptoms of being an internet addict:
121. You ask for e-mail adresses instead of telephone numbers.
/// Bram Moolenaar -- [email protected] -- 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 ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202005171853.04HIraG8007742%40masaka.moolenaar.net.