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 | |
| parent | cf9f8c93ecdb89a025721c11f064b04bb59e14cf (diff) | |
IncrementalInserter: support OpenLineBelow and OpenLineAbove mode
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cc | 2 | ||||
| -rw-r--r-- | src/window.cc | 24 | ||||
| -rw-r--r-- | src/window.hh | 4 |
3 files changed, 28 insertions, 2 deletions
diff --git a/src/main.cc b/src/main.cc index 31c2a3e2..288fcf10 100644 --- a/src/main.cc +++ b/src/main.cc @@ -504,6 +504,8 @@ std::unordered_map<char, std::function<void (Window& window, int count)>> keymap { 'c', do_change }, { 'i', [](Window& window, int count) { do_insert(window, IncrementalInserter::Mode::Insert); } }, { 'a', [](Window& window, int count) { do_insert(window, IncrementalInserter::Mode::Append); } }, + { 'o', [](Window& window, int count) { do_insert(window, IncrementalInserter::Mode::OpenLineBelow); } }, + { 'O', [](Window& window, int count) { do_insert(window, IncrementalInserter::Mode::OpenLineAbove); } }, { 'g', do_go }, 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); } } diff --git a/src/window.hh b/src/window.hh index 8b8eb3fe..dd7f593b 100644 --- a/src/window.hh +++ b/src/window.hh @@ -124,7 +124,9 @@ public: { Insert, Append, - Change + Change, + OpenLineBelow, + OpenLineAbove }; IncrementalInserter(Window& window, Mode mode = Mode::Insert); |
