diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-08-15 18:06:59 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-08-15 18:06:59 +0200 |
| commit | 390d4ccdfc18d6f9e9827014fc7b7f4bbc2381dc (patch) | |
| tree | bc68b75f70fb07538d3d911f8d7fd596564368bc /src/buffer.cc | |
| parent | 260b30e6d90eee942e965d3d96038fb6632b763a (diff) | |
Buffer::{iterator_at,clamp} takes an optional avoid_eol parameter
when avoid_eol is true, clamping does avoid end-of-line if possible
Diffstat (limited to 'src/buffer.cc')
| -rw-r--r-- | src/buffer.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/buffer.cc b/src/buffer.cc index 76a2009d..6bf82020 100644 --- a/src/buffer.cc +++ b/src/buffer.cc @@ -55,9 +55,10 @@ Buffer::~Buffer() assert(m_change_listeners.empty()); } -BufferIterator Buffer::iterator_at(const BufferCoord& line_and_column) const +BufferIterator Buffer::iterator_at(const BufferCoord& line_and_column, + bool avoid_eol) const { - return BufferIterator(*this, clamp(line_and_column)); + return BufferIterator(*this, clamp(line_and_column, avoid_eol)); } BufferCoord Buffer::line_and_column_at(const BufferIterator& iterator) const @@ -78,14 +79,15 @@ BufferSize Buffer::line_length(BufferPos line) const return end - m_lines[line].start; } -BufferCoord Buffer::clamp(const BufferCoord& line_and_column) const +BufferCoord Buffer::clamp(const BufferCoord& line_and_column, + bool avoid_eol) const { if (m_lines.empty()) return BufferCoord(); BufferCoord result(line_and_column.line, line_and_column.column); result.line = Kakoune::clamp<int>(0, m_lines.size() - 1, result.line); - int max_col = std::max(0, line_length(result.line) - 2); + int max_col = std::max(0, line_length(result.line) - (avoid_eol ? 2 : 1)); result.column = Kakoune::clamp<int>(0, max_col, result.column); return result; } |
