diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-01-23 18:58:43 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-01-23 18:58:43 +0100 |
| commit | 28cb78bed198c69f005748813a4580467c9a669d (patch) | |
| tree | 45df86310bd4a086f71b3fe8e4bb7b9ac217527c /src/editor.cc | |
| parent | 410067282af52c8d6ba17dcf5d3f96d1c644c511 (diff) | |
Editor: refactor InsertMode::Replace
Diffstat (limited to 'src/editor.cc')
| -rw-r--r-- | src/editor.cc | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/src/editor.cc b/src/editor.cc index 4bb9f464..6ed0b8a2 100644 --- a/src/editor.cc +++ b/src/editor.cc @@ -36,8 +36,13 @@ static BufferIterator prepare_insert(Buffer& buffer, const Selection& sel, switch (mode) { case InsertMode::Insert: - case InsertMode::Replace: return sel.begin(); + case InsertMode::Replace: + { + BufferIterator pos = sel.begin(); + buffer.erase(sel.begin(), sel.end()); + return pos; + } case InsertMode::Append: { // special case for end of lines, append to current line instead @@ -74,13 +79,6 @@ void Editor::insert(const String& string, InsertMode mode) { scoped_edition edition(*this); - if (mode == InsertMode::Replace) - { - // 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, mode); @@ -97,12 +95,6 @@ void Editor::insert(const String& string, InsertMode mode) void Editor::insert(const memoryview<String>& strings, InsertMode mode) { scoped_edition edition(*this); - if (mode == InsertMode::Replace) - { - // 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; @@ -413,19 +405,18 @@ IncrementalInserter::IncrementalInserter(Editor& editor, InsertMode mode) { Buffer& buffer = *editor.m_buffer; - if (mode == InsertMode::Replace) - { - for (auto& sel : editor.m_selections) - buffer.erase(sel.begin(), sel.end()); - } - for (auto& sel : m_editor.m_selections) { utf8_it first, last; switch (mode) { case InsertMode::Insert: first = utf8_it(sel.end()) - 1; last = sel.begin(); break; - case InsertMode::Replace: first = utf8_it(sel.end()) - 1; last = sel.begin(); break; + case InsertMode::Replace: + { + buffer.erase(sel.begin(), sel.end()); + first = last = sel.begin(); + break; + } case InsertMode::Append: { first = sel.begin(); |
