]> granicus.if.org Git - vim/commitdiff
patch 8.0.0763: libvterm can be improved v8.0.0763
authorBram Moolenaar <Bram@vim.org>
Sun, 23 Jul 2017 20:07:27 +0000 (22:07 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 23 Jul 2017 20:07:27 +0000 (22:07 +0200)
Problem:    Libvterm can be improved.
Solution:   Various small improvements, more comments.

src/libvterm/README
src/libvterm/include/vterm.h
src/libvterm/include/vterm_keycodes.h
src/libvterm/src/keyboard.c
src/libvterm/src/parser.c
src/libvterm/src/screen.c
src/libvterm/src/state.c
src/version.c

index ef74b011aa0715f2d628721936306c961cbbd8d6..8d4de39338f5d4ab3bb433cd49b9f028a858b92d 100644 (file)
@@ -1,13 +1,12 @@
 This is a MODIFIED version of libvterm.
 
 The original can be found:
-On the original site (tar archive and Bazaar repository):
+- on the original site (tar archive and Bazaar repository):
        http://www.leonerd.org.uk/code/libvterm/
-Cloned on Github:
+- cloned on Github:
        https://github.com/neovim/libvterm
 
 Modifications:
 - Add a .gitignore file.
 - Convert from C99 to C90.
 - Other changes to support embedding in Vim.
-- 
index 1aa646337b3fda608e5ce9f12ff8b3ac021653bb..5bc47e5131c649d7d2c7363b0e2013b8f7bd86f3 100644 (file)
@@ -160,7 +160,9 @@ VTerm *vterm_new_with_allocator(int rows, int cols, VTermAllocatorFunctions *fun
 /* Free and cleanup a terminal and all its data. */
 void   vterm_free(VTerm* vt);
 
+/* Get the current size of the terminal and store in "rowsp" and "colsp". */
 void vterm_get_size(const VTerm *vt, int *rowsp, int *colsp);
+
 void vterm_set_size(VTerm *vt, int rows, int cols);
 
 int  vterm_get_utf8(const VTerm *vt);
@@ -195,14 +197,14 @@ void vterm_mouse_button(VTerm *vt, int button, bool pressed, VTermModifier mod);
  *
  * Don't confuse this with the final byte of the CSI escape; 'a' in this case.
  */
-#define CSI_ARG_FLAG_MORE (1<<31)
-#define CSI_ARG_MASK      (~(1<<31))
+#define CSI_ARG_FLAG_MORE (1<<30)
+#define CSI_ARG_MASK      (~(1<<30))
 
 #define CSI_ARG_HAS_MORE(a) ((a) & CSI_ARG_FLAG_MORE)
 #define CSI_ARG(a)          ((a) & CSI_ARG_MASK)
 
 /* Can't use -1 to indicate a missing argument; use this instead */
-#define CSI_ARG_MISSING ((1UL<<31)-1)
+#define CSI_ARG_MISSING ((1<<30)-1)
 
 #define CSI_ARG_IS_MISSING(a) (CSI_ARG(a) == CSI_ARG_MISSING)
 #define CSI_ARG_OR(a,def)     (CSI_ARG(a) == CSI_ARG_MISSING ? (def) : CSI_ARG(a))
@@ -248,7 +250,9 @@ void *vterm_state_get_cbdata(VTermState *state);
 void  vterm_state_set_unrecognised_fallbacks(VTermState *state, const VTermParserCallbacks *fallbacks, void *user);
 void *vterm_state_get_unrecognised_fbdata(VTermState *state);
 
+/* Initialize the state. */
 void vterm_state_reset(VTermState *state, int hard);
+
 void vterm_state_get_cursorpos(const VTermState *state, VTermPos *cursorpos);
 void vterm_state_get_default_colors(const VTermState *state, VTermColor *default_fg, VTermColor *default_bg);
 void vterm_state_get_palette_color(const VTermState *state, int index, VTermColor *col);
@@ -295,6 +299,7 @@ typedef struct {
   int (*sb_popline)(int cols, VTermScreenCell *cells, void *user);
 } VTermScreenCallbacks;
 
+/* Return the screen of the vterm. */
 VTermScreen *vterm_obtain_screen(VTerm *vt);
 
 /*
@@ -317,9 +322,15 @@ typedef enum {
   VTERM_DAMAGE_SCROLL   /* entire screen + scrollrect */
 } VTermDamageSize;
 
+/* Invoke the relevant callbacks to update the screen. */
 void vterm_screen_flush_damage(VTermScreen *screen);
+
 void vterm_screen_set_damage_merge(VTermScreen *screen, VTermDamageSize size);
 
+/*
+ * Reset the screen.  Also invokes vterm_state_reset().
+ * Must be called before the terminal can be used.
+ */
 void   vterm_screen_reset(VTermScreen *screen, int hard);
 
 /* Neither of these functions NUL-terminate the buffer */
index c575254a47341f64c170dfeeea2b9507de73e21d..7a77916960ad5cea3ff0ab7e5915144d76d0908c 100644 (file)
@@ -28,9 +28,11 @@ typedef enum {
   VTERM_KEY_PAGEUP,
   VTERM_KEY_PAGEDOWN,
 
+  /* F1 is VTERM_KEY_FUNCTION(1), F2 VTERM_KEY_FUNCTION(2), etc. */
   VTERM_KEY_FUNCTION_0   = 256,
   VTERM_KEY_FUNCTION_MAX = VTERM_KEY_FUNCTION_0 + 255,
 
+  /* keypad keys */
   VTERM_KEY_KP_0,
   VTERM_KEY_KP_1,
   VTERM_KEY_KP_2,
index e154a08a7415320a14b5f85329da08cc99419ede..e99039d841063ea46cf3cb5c544ef7d59e7993bf 100644 (file)
@@ -68,6 +68,7 @@ typedef struct {
   int csinum;
 } keycodes_s;
 
+/* Order here must be exactly the same as VTermKey enum! */
 static keycodes_s keycodes[] = {
   { KEYCODE_NONE,       0, 0 }, /* NONE */
 
index 380f916510c368e0d27f0b273899be1a1f3e8e23..74556dce4b2f41efc5f93f4a9dae641ffd4f6555 100644 (file)
@@ -190,7 +190,7 @@ static size_t do_string(VTerm *vt, const char *str_frag, size_t len)
 size_t vterm_input_write(VTerm *vt, const char *bytes, size_t len)
 {
   size_t pos = 0;
-  const char *string_start;
+  const char *string_start = NULL;  /* init to avoid gcc warning */
 
   switch(vt->parser_state) {
   case NORMAL:
index ef13f3dccec899ef9045b03a8df6fd49da844f4d..a174e8657c61e39a274679e143a1c55c58e6840a 100644 (file)
@@ -819,14 +819,9 @@ int vterm_screen_is_eol(const VTermScreen *screen, VTermPos pos)
 
 VTermScreen *vterm_obtain_screen(VTerm *vt)
 {
-  VTermScreen *screen;
-  if(vt->screen)
-    return vt->screen;
-
-  screen = screen_new(vt);
-  vt->screen = screen;
-
-  return screen;
+  if(!vt->screen)
+    vt->screen = screen_new(vt);
+  return vt->screen;
 }
 
 void vterm_screen_enable_altscreen(VTermScreen *screen, int altscreen)
index 1b7e89d316f9a422a24e9e5a48c8354d819b6351..0c685309d0207bcb3ed6f8056f1574a12c1a3842 100644 (file)
@@ -1194,6 +1194,7 @@ static int on_csi(const char *leader, const long args[], int argcount, const cha
     break;
 
   case LEADER('>', 0x63): /* DEC secondary Device Attributes */
+    /* This returns xterm version number 100. */
     vterm_push_output_sprintf_ctrl(state->vt, C1_CSI, ">%d;%d;%dc", 0, 100, 0);
     break;
 
index c344072812c0c66d6e8f3b52a467814926fc10db..e2ab84c3c88ac62e5eb253710762ceeaa3c336ce 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    763,
 /**/
     762,
 /**/