summaryrefslogtreecommitdiff
path: root/src/buffer.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-08-15 18:06:59 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-08-15 18:06:59 +0200
commit390d4ccdfc18d6f9e9827014fc7b7f4bbc2381dc (patch)
treebc68b75f70fb07538d3d911f8d7fd596564368bc /src/buffer.cc
parent260b30e6d90eee942e965d3d96038fb6632b763a (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.cc10
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;
}