From 84db1e2b8cd9fa156522acd844fa9348274e1576 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 23 Nov 2012 19:13:47 +0100 Subject: Editor: fix replacement beheviour just before end of line --- src/editor.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/editor.cc') diff --git a/src/editor.cc b/src/editor.cc index e188ad87..380c07ba 100644 --- a/src/editor.cc +++ b/src/editor.cc @@ -64,12 +64,17 @@ void Editor::insert(const String& string, InsertMode mode) { scoped_edition edition(*this); if (mode == InsertMode::Replace) - erase(); + { + // do not call Editor::erase as we do not want to avoid end of lines + for (auto& sel : m_selections) + m_buffer->erase(sel.begin(), sel.end()); + } for (auto& sel : m_selections) { BufferIterator pos = prepare_insert(*m_buffer, sel.selection, mode); m_buffer->insert(pos, string); + sel.selection.avoid_eol(); } } @@ -77,16 +82,21 @@ void Editor::insert(const memoryview& strings, InsertMode mode) { scoped_edition edition(*this); if (mode == InsertMode::Replace) - erase(); - + { + // do not call Editor::erase as we do not want to avoid end of lines + for (auto& sel : m_selections) + m_buffer->erase(sel.begin(), sel.end()); + } if (strings.empty()) return; for (size_t i = 0; i < selections().size(); ++i) { - BufferIterator pos = prepare_insert(*m_buffer, m_selections[i].selection, mode); + Selection& sel = m_selections[i].selection; + BufferIterator pos = prepare_insert(*m_buffer, sel, mode); size_t index = std::min(i, strings.size()-1); m_buffer->insert(pos, strings[index]); + sel.avoid_eol(); } } -- cgit v1.2.3