summaryrefslogtreecommitdiff
path: root/src/window.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-12-02 19:56:17 +0000
committerMaxime Coste <frrrwww@gmail.com>2014-12-02 19:56:17 +0000
commitdef4221ac7d1850f1024217a098da8e1c368fdfd (patch)
treedad5559627d713260f557b747c01d83959aedbe7 /src/window.cc
parent8208e75294b4eb016ae578f9ae132d9f8dfe4785 (diff)
Pass a BufferRange to highlighters, fix subregions
Regions highlighter can now correctly be applied to only subrange of the buffer, fixing some corner cases in recursive regions.
Diffstat (limited to 'src/window.cc')
-rw-r--r--src/window.cc22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/window.cc b/src/window.cc
index c7eaf686..0e345834 100644
--- a/src/window.cc
+++ b/src/window.cc
@@ -13,9 +13,9 @@ namespace Kakoune
{
// Implementation in highlighters.cc
-void highlight_selections(const Context& context, HighlightFlags flags, DisplayBuffer& display_buffer);
-void expand_tabulations(const Context& context, HighlightFlags flags, DisplayBuffer& display_buffer);
-void expand_unprintable(const Context& context, HighlightFlags flags, DisplayBuffer& display_buffer);
+void highlight_selections(const Context& context, HighlightFlags flags, DisplayBuffer& display_buffer, BufferRange range);
+void expand_tabulations(const Context& context, HighlightFlags flags, DisplayBuffer& display_buffer, BufferRange range);
+void expand_unprintable(const Context& context, HighlightFlags flags, DisplayBuffer& display_buffer, BufferRange range);
Window::Window(Buffer& buffer)
: Scope(buffer),
@@ -80,8 +80,9 @@ void Window::update_display_buffer(const Context& context)
}
m_display_buffer.compute_range();
- m_highlighters.highlight(context, HighlightFlags::Highlight, m_display_buffer);
- m_builtin_highlighters.highlight(context, HighlightFlags::Highlight, m_display_buffer);
+ BufferRange range{{0,0}, buffer().end_coord()};
+ m_highlighters.highlight(context, HighlightFlags::Highlight, m_display_buffer, range);
+ m_builtin_highlighters.highlight(context, HighlightFlags::Highlight, m_display_buffer, range);
// cut the start of the line before m_position.column
for (auto& line : lines)
@@ -180,8 +181,9 @@ void Window::scroll_to_keep_selection_visible_ifn(const Context& context)
lines.emplace_back(AtomList{ {buffer(), cursor.line, cursor.line+1} });
display_buffer.compute_range();
- m_highlighters.highlight(context, HighlightFlags::MoveOnly, display_buffer);
- m_builtin_highlighters.highlight(context, HighlightFlags::MoveOnly, display_buffer);
+ BufferRange range{cursor.line, cursor.line + 1};
+ m_highlighters.highlight(context, HighlightFlags::MoveOnly, display_buffer, range);
+ m_builtin_highlighters.highlight(context, HighlightFlags::MoveOnly, display_buffer, range);
// now we can compute where the cursor is in display columns
// (this is only valid if highlighting one line and multiple lines put
@@ -262,10 +264,12 @@ ByteCoordAndTarget Window::offset_coord(ByteCoordAndTarget coord, LineCount offs
lines.emplace_back(AtomList{ {buffer(), line, line+1} });
display_buffer.compute_range();
+ BufferRange range{ std::min(line, coord.line), std::max(line,coord.line)+1};
+
InputHandler hook_handler{{ *m_buffer, Selection{} } };
hook_handler.context().set_window(*this);
- m_highlighters.highlight(hook_handler.context(), HighlightFlags::MoveOnly, display_buffer);
- m_builtin_highlighters.highlight(hook_handler.context(), HighlightFlags::MoveOnly, display_buffer);
+ m_highlighters.highlight(hook_handler.context(), HighlightFlags::MoveOnly, display_buffer, range);
+ m_builtin_highlighters.highlight(hook_handler.context(), HighlightFlags::MoveOnly, display_buffer, range);
CharCount column = coord.target == -1 ? find_display_column(lines[0], buffer(), coord) : coord.target;
return { find_buffer_coord(lines[1], buffer(), column), column };