diff src/libvterm/src/state.c @ 13531:9f857e6310b6 v8.0.1639

patch 8.0.1639: libvterm code lags behind master commit https://github.com/vim/vim/commit/b5b49a3b430ea0aaf8cce6b7bc0e444f0211ddfb Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 25 16:20:37 2018 +0200 patch 8.0.1639: libvterm code lags behind master Problem: Libvterm code lags behind master. Solution: Sync to head, solve merge problems.
author Christian Brabandt <cb@256bit.org>
date Sun, 25 Mar 2018 16:30:06 +0200
parents a62b0bbc8834
children 2449b6ce1456
line wrap: on
line diff
--- a/src/libvterm/src/state.c
+++ b/src/libvterm/src/state.c
@@ -268,7 +268,7 @@ static int on_text(const char bytes[], s
   if(!npoints)
   {
     vterm_allocator_free(state->vt, codepoints);
-    return 0;
+    return eaten;
   }
 
   if(state->gsingle_set && npoints)
@@ -781,6 +781,10 @@ static void set_dec_mode(VTermState *sta
                         VTERM_PROP_MOUSE_MOVE);
     break;
 
+  case 1004:
+    state->mode.report_focus = val;
+    break;
+
   case 1005:
     state->mouse_protocol = val ? MOUSE_UTF8 : MOUSE_X10;
     break;
@@ -861,6 +865,10 @@ static void request_dec_mode(VTermState 
       reply = state->mouse_flags == (MOUSE_WANT_CLICK|MOUSE_WANT_MOVE);
       break;
 
+    case 1004:
+      reply = state->mode.report_focus;
+      break;
+
     case 1005:
       reply = state->mouse_protocol == MOUSE_UTF8;
       break;
@@ -1728,6 +1736,7 @@ void vterm_state_reset(VTermState *state
   state->mode.origin          = 0;
   state->mode.leftrightmargin = 0;
   state->mode.bracketpaste    = 0;
+  state->mode.report_focus    = 0;
 
   state->vt->mode.ctrl8bit   = 0;
 
@@ -1882,11 +1891,26 @@ int vterm_state_set_termprop(VTermState 
     if(val->number == VTERM_PROP_MOUSE_MOVE)
       state->mouse_flags |= MOUSE_WANT_MOVE;
     return 1;
+
+  case VTERM_N_PROPS:
+    return 0;
   }
 
   return 0;
 }
 
+void vterm_state_focus_in(VTermState *state)
+{
+  if(state->mode.report_focus)
+    vterm_push_output_sprintf_ctrl(state->vt, C1_CSI, "I");
+}
+
+void vterm_state_focus_out(VTermState *state)
+{
+  if(state->mode.report_focus)
+    vterm_push_output_sprintf_ctrl(state->vt, C1_CSI, "O");
+}
+
 const VTermLineInfo *vterm_state_get_lineinfo(const VTermState *state, int row)
 {
   return state->lineinfo + row;