neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

ui_defs.h (2608B)


      1 #pragma once
      2 
      3 #include <stdbool.h>
      4 #include <stddef.h>
      5 #include <stdint.h>
      6 
      7 #include "nvim/api/private/defs.h"
      8 #include "nvim/msgpack_rpc/packer_defs.h"
      9 
     10 /// Keep in sync with ui_ext_names[] in ui.h
     11 typedef enum {
     12  kUICmdline = 0,
     13  kUIPopupmenu,
     14  kUITabline,
     15  kUIWildmenu,
     16  kUIMessages,
     17 #define kUIGlobalCount kUILinegrid
     18  kUILinegrid,
     19  kUIMultigrid,
     20  kUIHlState,
     21  kUITermColors,
     22  kUIFloatDebug,
     23  kUIExtCount,
     24 } UIExtension;
     25 
     26 enum {
     27  kLineFlagWrap = 1,
     28  kLineFlagInvalid = 2,
     29 };
     30 
     31 typedef int LineFlags;
     32 
     33 typedef struct {
     34  bool rgb;
     35  bool override;  ///< Force highest-requested UI capabilities.
     36  bool composed;
     37  bool ui_ext[kUIExtCount];  ///< UI capabilities/extensions.
     38  int width;
     39  int height;
     40  int pum_nlines;  ///< actual nr. lines shown in PUM
     41  bool pum_pos;  ///< UI reports back pum position?
     42  double pum_row;
     43  double pum_col;
     44  double pum_height;
     45  double pum_width;
     46 
     47  // TUI fields.
     48  char *term_name;
     49  char *term_background;  ///< Deprecated. No longer needed since background color detection happens
     50                          ///< in Lua. To be removed in a future release.
     51  int term_colors;
     52  bool stdin_tty;
     53  bool stdout_tty;
     54 
     55  uint64_t channel_id;
     56 
     57 #define UI_BUF_SIZE ARENA_BLOCK_SIZE  ///< total buffer size for pending msgpack data.
     58  /// guaranteed size available for each new event (so packing of simple events
     59  /// and the header of grid_line will never fail)
     60 #define EVENT_BUF_SIZE 256
     61 
     62 // Fields related to packing
     63  PackerBuffer packer;
     64 
     65  const char *cur_event;  ///< name of current event (might get multiple arglists)
     66 
     67  // We start packing the two outermost msgpack arrays before knowing the total
     68  // number of elements. Thus track the location where array size will need
     69  // to be written in the msgpack buffer, once the specific array is finished.
     70  char *nevents_pos;
     71  char *ncalls_pos;
     72  uint32_t nevents;  ///< number of distinct events (top-level args to "redraw"
     73  uint32_t ncalls;  ///< number of calls made to the current event (plus one for the name!)
     74  bool flushed_events;  ///< events where sent to client without "flush" event
     75  bool incomplete_event;  ///< incomplete event might be pending
     76 
     77  size_t ncells_pending;  ///< total number of cells since last buffer flush
     78 
     79  int hl_id;  // Current highlight for legacy put event.
     80  Integer cursor_row, cursor_col;  // Intended visible cursor position.
     81 
     82  // Position of legacy cursor, used both for drawing and visible user cursor.
     83  Integer client_row, client_col;
     84  bool wildmenu_active;
     85 } RemoteUI;
     86 
     87 typedef struct {
     88  const char *name;
     89  void (*fn)(Array args);
     90 } UIClientHandler;