diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-06-04 14:05:27 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-06-04 18:53:13 +0200 |
| commit | cf1f26ac9111b9cacf2833cb56a2e86cd69c4f18 (patch) | |
| tree | 4cbf38aa77e96f64c6ff6f39844a3bd6466aef32 /src/editor.cc | |
| parent | cc70e3ed708e231e581dfba94ada9fe7d7cad89c (diff) | |
fix Editor::move_selections(LineCount...) on buffer bounds
Diffstat (limited to 'src/editor.cc')
| -rw-r--r-- | src/editor.cc | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/editor.cc b/src/editor.cc index 0e4b3cf2..d3fbbe8b 100644 --- a/src/editor.cc +++ b/src/editor.cc @@ -199,11 +199,10 @@ void Editor::move_selections(LineCount offset, SelectMode mode) kak_assert(mode == SelectMode::Replace or mode == SelectMode::Extend); for (auto& sel : m_selections) { - auto pos = sel.last(); - CharCount column = m_buffer->char_distance(pos.line, pos); - pos.line += offset; - auto last = std::min(m_buffer->char_advance(pos.line, column), - m_buffer->char_prev(pos.line+1)); + CharCount column = m_buffer->char_distance(sel.last().line, sel.last()); + auto line = clamp(sel.last().line + offset, 0_line, m_buffer->line_count()-1); + column = std::min(column, m_buffer->line_content(line).char_length()-1); + BufferCoord last = m_buffer->char_advance(line, column); sel.first() = mode == SelectMode::Extend ? sel.first() : last; sel.last() = last; avoid_eol(*m_buffer, sel); |
