changeset 11715:d7430b56c9ed v8.0.0740

patch 8.0.0740: cannot resize a terminal window by the command commit https://github.com/vim/vim/commit/e906ae85b291ccc7da842b7ac609c697bb582e1f Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jul 21 21:10:01 2017 +0200 patch 8.0.0740: cannot resize a terminal window by the command Problem: Cannot resize a terminal window by the command running in it. Solution: Add support for the window size escape sequence. Make BS work.
author Christian Brabandt <cb@256bit.org>
date Fri, 21 Jul 2017 21:15:04 +0200
parents 454976193d51
children 0539c81284db
files src/libvterm/src/state.c src/terminal.c src/version.c
diffstat 3 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/libvterm/src/state.c
+++ b/src/libvterm/src/state.c
@@ -9,6 +9,8 @@
 # define DEBUG_GLYPH_COMBINE
 #endif
 
+static int on_resize(int rows, int cols, void *user);
+
 /* Some convenient wrappers to make callback functions easier */
 
 static void putglyph(VTermState *state, const uint32_t chars[], int width, VTermPos pos)
@@ -1396,6 +1398,14 @@ static int on_csi(const char *leader, co
 
     break;
 
+  case 0x74:
+    switch(CSI_ARG(args[0])) {
+      case 8: /* CSI 8 ; rows ; cols t  set size */
+	if (argcount == 3)
+	  on_resize(CSI_ARG(args[1]), CSI_ARG(args[2]), state);
+    }
+    break;
+
   case INTERMED('\'', 0x7D): /* DECIC */
     count = CSI_ARG_COUNT(args[0]);
 
@@ -1534,7 +1544,7 @@ static void request_status_string(VTermS
       switch(state->mode.cursor_shape) {
         case VTERM_PROP_CURSORSHAPE_BLOCK:     reply = 2; break;
         case VTERM_PROP_CURSORSHAPE_UNDERLINE: reply = 4; break;
-        case VTERM_PROP_CURSORSHAPE_BAR_LEFT:  reply = 6; break;
+	default: /* VTERM_PROP_CURSORSHAPE_BAR_LEFT */  reply = 6; break;
       }
       if(state->mode.cursor_blink)
         reply--;
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -572,7 +572,8 @@ term_convert_key(int c, char *buf)
     {
 	case CAR:		key = VTERM_KEY_ENTER; break;
 	case ESC:		key = VTERM_KEY_ESCAPE; break;
-	case K_BS:		key = VTERM_KEY_BACKSPACE; break;
+				/* VTERM_KEY_BACKSPACE becomes 0x7f DEL */
+	case K_BS:		c = BS; break;
 	case K_DEL:		key = VTERM_KEY_DEL; break;
 	case K_DOWN:		key = VTERM_KEY_DOWN; break;
 	case K_END:		key = VTERM_KEY_END; break;
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    740,
+/**/
     739,
 /**/
     738,