diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-12-18 19:12:15 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-12-18 19:12:15 +0100 |
| commit | 6cc4ec796edfb62e693f4b582fdd90db5f2557a8 (patch) | |
| tree | 11fcce20f9b9e879f7b67ad97e4606fb16318516 /src/editor.cc | |
| parent | cf7e6bdd078718f31c58127acd5b135886b3cd4f (diff) | |
editor: support select mode on select(BufferIterator)
Diffstat (limited to 'src/editor.cc')
| -rw-r--r-- | src/editor.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/editor.cc b/src/editor.cc index 02baf5f5..9ed99a93 100644 --- a/src/editor.cc +++ b/src/editor.cc @@ -200,9 +200,18 @@ void Editor::remove_selection(int index) m_selections.erase(m_selections.begin() + index); } -void Editor::select(const BufferIterator& iterator) +void Editor::select(const BufferIterator& iterator, SelectMode mode) { - m_selections = SelectionList{ {iterator, iterator} }; + if (mode == SelectMode::Replace) + m_selections = SelectionList{ {iterator, iterator} }; + else if (mode == SelectMode::Extend) + { + for (auto& sel : m_selections) + sel.last() = iterator; + merge_overlapping(m_selections); + } + else if (mode == SelectMode::Append) + assert(false); } void Editor::select(SelectionList selections) |
