diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-11-23 19:13:47 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-11-23 19:13:47 +0100 |
| commit | 84db1e2b8cd9fa156522acd844fa9348274e1576 (patch) | |
| tree | df0fd4f2dad6d7003e707ccdd47d96d5f4827eb0 /src/editor.cc | |
| parent | dca05ecc73f6ff8801e718fb4f957de5e821f201 (diff) | |
Editor: fix replacement beheviour just before end of line
Diffstat (limited to 'src/editor.cc')
| -rw-r--r-- | src/editor.cc | 18 |
1 files changed, 14 insertions, 4 deletions
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<String>& 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(); } } |
