diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-12-12 23:56:53 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-12-14 14:38:17 +0000 |
| commit | db048a079267ecea1c0aff5080a027afed16ae46 (patch) | |
| tree | 0ec1b8a0fb20d9e126372b1b9115b80d4943e252 /src/editor.cc | |
| parent | 894ee0297ea60c043a711fbbb5612eff8a68c3ee (diff) | |
MultiSelectors now transforms the whole selection
Diffstat (limited to 'src/editor.cc')
| -rw-r--r-- | src/editor.cc | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/src/editor.cc b/src/editor.cc index b3572333..2e39bacf 100644 --- a/src/editor.cc +++ b/src/editor.cc @@ -282,26 +282,7 @@ struct nothing_selected : public runtime_error void Editor::multi_select(const MultiSelector& selector) { - SelectionList new_selections; - for (auto& sel : m_selections) - { - SelectionList res = selector(*m_buffer, sel); - new_selections.reserve(new_selections.size() + res.size()); - for (auto& new_sel : res) - { - // preserve captures when selectors captures nothing. - if (new_sel.captures().empty()) - new_selections.emplace_back(new_sel.first(), new_sel.last(), - sel.captures()); - else - new_selections.push_back(std::move(new_sel)); - } - } - if (new_selections.empty()) - throw nothing_selected(); - new_selections.set_main_index(new_selections.size() - 1); - new_selections.sort_and_merge_overlapping(); - m_selections = std::move(new_selections); + m_selections = selector(*m_buffer, std::move(m_selections)); check_invariant(); } |
