summaryrefslogtreecommitdiff
path: root/src/window.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2011-10-06 21:12:55 +0000
committerMaxime Coste <frrrwww@gmail.com>2011-10-06 21:12:55 +0000
commit571e4772b4ece9e3102f0e86be1a13c8ddbc3f66 (patch)
tree7c1949f540ad85f53718d5db3de205129051bba3 /src/window.cc
parentcf9f8c93ecdb89a025721c11f064b04bb59e14cf (diff)
IncrementalInserter: support OpenLineBelow and OpenLineAbove mode
Diffstat (limited to 'src/window.cc')
-rw-r--r--src/window.cc24
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);
}
}