From 1adb01c120d04bdbf25cd4ea6151ecd5f2de3a72 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Fri, 6 Jul 2018 14:39:50 +0200 Subject: ui: use line-based rather than char-based updates in screen.c Add ext_newgrid and ext_hlstate extensions. These use predefined highlights and line-segment based updates, for efficiency and simplicity.. The ext_hlstate extension in addition allows semantic identification of builtin and syntax highlights. Reimplement the old char-based updates in the remote UI layer, for compatibility. For the moment, this is still the default. The bulitin TUI uses the new line-based protocol. cmdline uses curwin cursor position when ext_cmdline is active. --- src/nvim/ui.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/nvim/ui.h') diff --git a/src/nvim/ui.h b/src/nvim/ui.h index 9e98ff9f15..584d8a77c6 100644 --- a/src/nvim/ui.h +++ b/src/nvim/ui.h @@ -5,13 +5,18 @@ #include #include -#include "api/private/defs.h" +#include "nvim/globals.h" +#include "nvim/api/private/defs.h" +#include "nvim/highlight_defs.h" typedef enum { kUICmdline = 0, kUIPopupmenu, kUITabline, kUIWildmenu, +#define kUIGlobalCount (kUIWildmenu+1) + kUINewgrid, + kUIHlState, kUIExtCount, } UIExtension; @@ -19,7 +24,9 @@ EXTERN const char *ui_ext_names[] INIT(= { "ext_cmdline", "ext_popupmenu", "ext_tabline", - "ext_wildmenu" + "ext_wildmenu", + "ext_newgrid", + "ext_hlstate", }); @@ -30,9 +37,17 @@ struct ui_t { bool ui_ext[kUIExtCount]; ///< Externalized widgets int width, height; void *data; + #ifdef INCLUDE_GENERATED_DECLARATIONS # include "ui_events.generated.h" #endif + + // For perfomance and simplicity, we use the dense screen representation + // in the bridge and the TUI. The remote_ui module will translate this + // in to the public grid_line format. + void (*raw_line)(UI *ui, Integer grid, Integer row, Integer startcol, + Integer endcol, Integer clearcol, Integer clearattr, + const schar_T *chunk, const sattr_T *attrs); void (*event)(UI *ui, char *name, Array args, bool *args_consumed); void (*stop)(UI *ui); void (*inspect)(UI *ui, Dictionary *info); -- cgit