diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2020-01-16 15:31:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-16 15:31:05 +0100 |
commit | 6e78b2162382718b638c4532a155e5c3f9ed7515 (patch) | |
tree | 5868096a30a61deed1765e1c9ec93072a4d0c34b /src/nvim/mark_extended_defs.h | |
parent | 8ba3354d74a8f90ded0997100bdbe845a8c5382f (diff) | |
parent | ca1a00edd6d6345b848a28d077d6a192528f811e (diff) | |
download | rneovim-6e78b2162382718b638c4532a155e5c3f9ed7515.tar.gz rneovim-6e78b2162382718b638c4532a155e5c3f9ed7515.tar.bz2 rneovim-6e78b2162382718b638c4532a155e5c3f9ed7515.zip |
Merge pull request #11563 from bfredl/mark_madness
extmarks: mark sanity/madness
Diffstat (limited to 'src/nvim/mark_extended_defs.h')
-rw-r--r-- | src/nvim/mark_extended_defs.h | 59 |
1 files changed, 21 insertions, 38 deletions
diff --git a/src/nvim/mark_extended_defs.h b/src/nvim/mark_extended_defs.h index 565c599d06..439f7f0b36 100644 --- a/src/nvim/mark_extended_defs.h +++ b/src/nvim/mark_extended_defs.h @@ -2,53 +2,36 @@ #define NVIM_MARK_EXTENDED_DEFS_H #include "nvim/pos.h" // for colnr_T -#include "nvim/map.h" // for uint64_t -#include "nvim/lib/kbtree.h" #include "nvim/lib/kvec.h" -struct ExtmarkLine; +typedef struct { + char *text; + int hl_id; +} VirtTextChunk; -typedef struct Extmark +typedef kvec_t(VirtTextChunk) VirtText; +#define VIRTTEXT_EMPTY ((VirtText)KV_INITIAL_VALUE) + +typedef struct { uint64_t ns_id; uint64_t mark_id; - struct ExtmarkLine *line; - colnr_T col; -} Extmark; - - -// We only need to compare columns as rows are stored in a different tree. -// Marks are ordered by: position, namespace, mark_id -// This improves moving marks but slows down all other use cases (searches) -static inline int extmark_cmp(Extmark a, Extmark b) -{ - int cmp = kb_generic_cmp(a.col, b.col); - if (cmp != 0) { - return cmp; - } - cmp = kb_generic_cmp(a.ns_id, b.ns_id); - if (cmp != 0) { - return cmp; - } - return kb_generic_cmp(a.mark_id, b.mark_id); -} - - -#define markitems_cmp(a, b) (extmark_cmp((a), (b))) -KBTREE_INIT(markitems, Extmark, markitems_cmp, 10) - -typedef struct ExtmarkLine -{ - linenr_T lnum; - kbtree_t(markitems) items; -} ExtmarkLine; - -#define EXTMARKLINE_CMP(a, b) (kb_generic_cmp((a)->lnum, (b)->lnum)) -KBTREE_INIT(extmarklines, ExtmarkLine *, EXTMARKLINE_CMP, 10) - + int hl_id; // highlight group + // TODO(bfredl): virt_text is pretty larger than the rest, + // pointer indirection? + VirtText virt_text; +} ExtmarkItem; typedef struct undo_object ExtmarkUndoObject; typedef kvec_t(ExtmarkUndoObject) extmark_undo_vec_t; +// Undo/redo extmarks + +typedef enum { + kExtmarkNOOP, // Extmarks shouldn't be moved + kExtmarkUndo, // Operation should be reversable/undoable + kExtmarkNoUndo, // Operation should not be reversable + kExtmarkUndoNoRedo, // Operation should be undoable, but not redoable +} ExtmarkOp; #endif // NVIM_MARK_EXTENDED_DEFS_H |