diff --git a/src/window.cc b/src/window.cc index 0e9991628..aa9f28242 100644 --- a/src/window.cc +++ b/src/window.cc @@ -234,7 +234,7 @@ ByteCoord find_buffer_coord(const DisplayLine& line, const Buffer& buffer, } } -CharCoord Window::display_position(ByteCoord coord) +CharCoord Window::display_position(ByteCoord coord) const { LineCount l = 0; for (auto& line : m_display_buffer.lines()) @@ -247,6 +247,13 @@ CharCoord Window::display_position(ByteCoord coord) return { 0, 0 }; } +ByteCoord Window::buffer_coord(CharCoord coord) const +{ + if (0_line <= coord.line and coord.line < m_display_buffer.lines().size()) + return find_buffer_coord(m_display_buffer.lines()[(int)coord.line], buffer(), coord.column); + return { 0, 0 }; +} + ByteCoord Window::offset_coord(ByteCoord coord, CharCount offset) { return buffer().offset_coord(coord, offset); diff --git a/src/window.hh b/src/window.hh index 54973d2b9..0ad70a549 100644 --- a/src/window.hh +++ b/src/window.hh @@ -31,7 +31,8 @@ public: void scroll(CharCount offset); void update_display_buffer(const Context& context); - CharCoord display_position(ByteCoord coord); + CharCoord display_position(ByteCoord coord) const; + ByteCoord buffer_coord(CharCoord coord) const; Highlighter& highlighters() { return m_highlighters; }