summaryrefslogtreecommitdiff
path: root/src/buffer.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2017-04-27 20:23:23 +0100
committerMaxime Coste <mawww@kakoune.org>2017-05-07 16:26:14 +0100
commit5ee21ec932d1da0f1fbae8ee1f13b967b8014307 (patch)
tree85caa9c6bcec24a1cec917910fe72a36a560d349 /src/buffer.cc
parent57c2b32d2082d67f1d2c1a168cf88a0677c73e18 (diff)
Respect tabstop in Buffer::offset_coord
Diffstat (limited to 'src/buffer.cc')
-rw-r--r--src/buffer.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/buffer.cc b/src/buffer.cc
index 06805e73..6d9321d6 100644
--- a/src/buffer.cc
+++ b/src/buffer.cc
@@ -2,6 +2,7 @@
#include "assert.hh"
#include "buffer_manager.hh"
+#include "buffer_utils.hh"
#include "client.hh"
#include "containers.hh"
#include "context.hh"
@@ -176,21 +177,21 @@ BufferCoord Buffer::clamp(BufferCoord coord) const
return coord;
}
-BufferCoord Buffer::offset_coord(BufferCoord coord, CharCount offset)
+BufferCoord Buffer::offset_coord(BufferCoord coord, CharCount offset, ColumnCount)
{
StringView line = m_lines[coord.line];
auto target = utf8::advance(&line[coord.column], offset < 0 ? line.begin() : line.end()-1, offset);
return {coord.line, (int)(target - line.begin())};
}
-BufferCoordAndTarget Buffer::offset_coord(BufferCoordAndTarget coord, LineCount offset)
+BufferCoordAndTarget Buffer::offset_coord(BufferCoordAndTarget coord, LineCount offset, ColumnCount tabstop)
{
- auto column = coord.target == -1 ? m_lines[coord.line].column_count_to(coord.column) : coord.target;
+ auto column = coord.target == -1 ? get_column(*this, tabstop, coord) : coord.target;
auto line = Kakoune::clamp(coord.line + offset, 0_line, line_count()-1);
StringView content = m_lines[line];
auto final_column = std::max(0_col, std::min(column, content.column_length() - 2));
- return {line, content.byte_count_to(final_column), column};
+ return {line, get_byte_to_column(*this, tabstop, {line, final_column}), column};
}
String Buffer::string(BufferCoord begin, BufferCoord end) const