diff options
| author | Maxime Coste <mawww@kakoune.org> | 2017-01-13 13:45:46 +0000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2017-01-13 13:52:55 +0000 |
| commit | e7e72747edfcba76f7fc36e2e345577ffeb47eab (patch) | |
| tree | c3fff0f3d12dd95ca1a5e34406c5b9924493714f /src/highlighters.cc | |
| parent | 5ad44995036274989f82f62b9ff2135687b00394 (diff) | |
Update ranges highlighter options according to buffer changes
Diffstat (limited to 'src/highlighters.cc')
| -rw-r--r-- | src/highlighters.cc | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/highlighters.cc b/src/highlighters.cc index fdb85c69..00f47297 100644 --- a/src/highlighters.cc +++ b/src/highlighters.cc @@ -2,6 +2,7 @@ #include "assert.hh" #include "buffer_utils.hh" +#include "changes.hh" #include "context.hh" #include "containers.hh" #include "command_manager.hh" @@ -992,6 +993,9 @@ HighlighterAndId create_flag_lines_highlighter(HighlighterParameters params) return {"hlflags_" + params[1], make_simple_highlighter(func) }; } +BufferCoord& get_first(RangeAndFace& r) { return std::get<0>(r).begin; } +BufferCoord& get_last(RangeAndFace& r) { return std::get<0>(r).end; } + HighlighterAndId create_ranges_highlighter(HighlighterParameters params) { if (params.size() != 1) @@ -1011,8 +1015,25 @@ HighlighterAndId create_ranges_highlighter(HighlighterParameters params) auto& buffer = context.buffer(); if (range_and_faces.prefix != buffer.timestamp()) { - // TODO: update ranges to current timestamp - return; + auto changes = buffer.changes_since(range_and_faces.prefix); + auto change_it = changes.begin(); + while (change_it != changes.end()) + { + auto forward_end = forward_sorted_until(change_it, changes.end()); + auto backward_end = backward_sorted_until(change_it, changes.end()); + + if (forward_end >= backward_end) + { + update_forward({ change_it, forward_end }, ranges); + change_it = forward_end; + } + else + { + update_backward({ change_it, backward_end }, ranges); + change_it = backward_end; + } + } + range_and_faces.prefix = buffer.timestamp(); } for (auto& range : ranges) |
