diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2011-10-06 21:12:55 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2011-10-06 21:12:55 +0000 |
| commit | 571e4772b4ece9e3102f0e86be1a13c8ddbc3f66 (patch) | |
| tree | 7c1949f540ad85f53718d5db3de205129051bba3 /src/window.cc | |
| parent | cf9f8c93ecdb89a025721c11f064b04bb59e14cf (diff) | |
IncrementalInserter: support OpenLineBelow and OpenLineAbove mode
Diffstat (limited to 'src/window.cc')
| -rw-r--r-- | src/window.cc | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/window.cc b/src/window.cc index 21666dd2..dc3cc1a7 100644 --- a/src/window.cc +++ b/src/window.cc @@ -371,7 +371,29 @@ IncrementalInserter::IncrementalInserter(Window& window, Mode mode) for (auto& sel : m_window.m_selections) { - const BufferIterator& pos = mode == Mode::Append ? sel.end() : sel.begin(); + BufferIterator pos; + switch (mode) + { + case Mode::Insert: pos = sel.begin(); break; + case Mode::Append: pos = sel.end(); break; + case Mode::Change: pos = sel.begin(); break; + + case Mode::OpenLineBelow: + pos = sel.end(); + while (not pos.is_end() and *pos != '\n') + ++pos; + ++pos; + window.m_buffer.insert(pos, "\n"); + break; + + case Mode::OpenLineAbove: + pos = sel.begin(); + while (not pos.is_begin() and *pos != '\n') + --pos; + window.m_buffer.insert(pos, "\n"); + ++pos; + break; + } sel = Selection(pos, pos); } } |
