summaryrefslogtreecommitdiff
path: root/src/input_handler.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-12-15 14:14:52 +0000
committerMaxime Coste <frrrwww@gmail.com>2013-12-15 14:14:52 +0000
commit9b6639eb2754a72d5f6ae35055b750da10b262c1 (patch)
treec6e1ae96d6b5467e4663bbf14d7aaf46bd811f8c /src/input_handler.cc
parent4e3d551426d840eb10f8ba0ac4f448f31d09ccc6 (diff)
Remove Editor::move_selections
Diffstat (limited to 'src/input_handler.cc')
-rw-r--r--src/input_handler.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc
index 79501e59..c7f809b2 100644
--- a/src/input_handler.cc
+++ b/src/input_handler.cc
@@ -923,22 +923,22 @@ public:
erase();
else if (key == Key::Left)
{
- m_edition.editor().move_selections(-1_char, SelectMode::Replace);
+ move(-1_char);
moved = true;
}
else if (key == Key::Right)
{
- m_edition.editor().move_selections(1_char, SelectMode::Replace);
+ move(1_char);
moved = true;
}
else if (key == Key::Up)
{
- m_edition.editor().move_selections(-1_line, SelectMode::Replace);
+ move(-1_line);
moved = true;
}
else if (key == Key::Down)
{
- m_edition.editor().move_selections(1_line, SelectMode::Replace);
+ move(1_line);
moved = true;
}
else if (key.modifiers == Key::Modifiers::None)
@@ -992,6 +992,19 @@ private:
}
}
+ template<typename Type>
+ void move(Type offset)
+ {
+ auto& selections = context().editor().selections();
+ for (auto& sel : selections)
+ {
+ auto last = context().has_window() ? context().window().offset_coord(sel.last(), offset)
+ : context().buffer().offset_coord(sel.last(), offset);
+ sel.first() = sel.last() = last;
+ }
+ selections.sort_and_merge_overlapping();
+ }
+
void insert(memoryview<String> strings)
{
auto& buffer = m_edition.editor().buffer();