From e1eec8903a2a15efe0f71809794601c34aaadfb1 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 17 Jan 2014 23:39:01 +0000 Subject: [PATCH] only highlight actually displayed regions --- src/highlighters.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/highlighters.cc b/src/highlighters.cc index e1862cf2..170b5cec 100644 --- a/src/highlighters.cc +++ b/src/highlighters.cc @@ -525,9 +525,14 @@ public: void operator()(const Context& context, DisplayBuffer& display_buffer) { + auto range = display_buffer.range(); auto& regions = update_cache_ifn(context.buffer()); - for (auto& region : regions) - m_func(context, display_buffer, region.begin, region.end); + auto begin = std::lower_bound(regions.begin(), regions.end(), range.first, + [](const Region& r, const BufferCoord& c) { return r.end < c; }); + auto end = std::lower_bound(begin, regions.end(), range.second, + [](const Region& r, const BufferCoord& c) { return r.begin < c; }); + for (; begin != end; ++begin) + m_func(context, display_buffer, begin->begin, begin->end); } private: Regex m_begin;