diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2011-09-28 14:23:43 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2011-09-28 14:23:43 +0000 |
| commit | 43fb64a91359c078b9692cfc87f0b035d3f25f5f (patch) | |
| tree | b1c9a61d0e1f3f79900838bf9bc09dcc4d084717 /src/window.cc | |
| parent | 309b722df94a365d71198afc6803b3d0f42c0d47 (diff) | |
Window: selection behaviour now depends on a window state
more vi-like behaviour, hit the v key to toggle append selection mode,
this means much more keys become available for mapping, as caps are now
longer reserved to append mode.
Diffstat (limited to 'src/window.cc')
| -rw-r--r-- | src/window.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/window.cc b/src/window.cc index 85ab632d..0631416f 100644 --- a/src/window.cc +++ b/src/window.cc @@ -37,6 +37,7 @@ Window::Window(Buffer& buffer) : m_buffer(buffer), m_position(0, 0), m_dimensions(0, 0), + m_select_mode(SelectMode::Normal), m_current_inserter(nullptr) { m_selections.push_back(Selection(buffer.begin(), buffer.begin())); @@ -153,11 +154,11 @@ void Window::empty_selections() m_selections.push_back(std::move(sel)); } -void Window::select(bool append, const Selector& selector) +void Window::select(const Selector& selector) { check_invariant(); - if (not append) + if (m_select_mode == SelectMode::Normal) { Selection sel = selector(m_selections.back().last()); m_selections.clear(); @@ -183,7 +184,16 @@ BufferString Window::selection_content() const void Window::move_cursor(const WindowCoord& offset) { - move_cursor_to(cursor_position() + offset); + if (m_select_mode == SelectMode::Normal) + move_cursor_to(cursor_position() + offset); + else + { + for (auto& sel : m_selections) + { + WindowCoord pos = line_and_column_at(sel.last()); + sel = Selection(sel.first(), iterator_at(pos + offset)); + } + } } void Window::move_cursor_to(const WindowCoord& new_pos) |
