diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-12-28 14:06:56 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-12-28 14:06:56 +0100 |
| commit | cb80ae139ba7043e8d0070fa46b305680e06fb33 (patch) | |
| tree | e73a5a0d96a4ead6d76e283c0119cca592110c91 /src/editor.cc | |
| parent | 28cf772debe6fb8eeb9d23dcb5fd56285e708583 (diff) | |
IncrementalInserter: fix append mode when on line end
Diffstat (limited to 'src/editor.cc')
| -rw-r--r-- | src/editor.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/editor.cc b/src/editor.cc index 8896681c..067847aa 100644 --- a/src/editor.cc +++ b/src/editor.cc @@ -385,7 +385,16 @@ IncrementalInserter::IncrementalInserter(Editor& editor, InsertMode mode) { case InsertMode::Insert: first = utf8_it(sel.end()) - 1; last = sel.begin(); break; case InsertMode::Replace: first = utf8_it(sel.end()) - 1; last = sel.begin(); break; - case InsertMode::Append: first = sel.begin(); last = sel.end(); break; + case InsertMode::Append: + { + first = sel.begin(); + last = std::max(sel.first(), sel.last()); + // special case for end of lines, append to current line instead + auto coord = last.underlying_iterator().coord(); + if (coord.column != buffer.line_length(coord.line) - 1) + ++last; + break; + } case InsertMode::OpenLineBelow: case InsertMode::AppendAtLineEnd: @@ -435,8 +444,8 @@ IncrementalInserter::~IncrementalInserter() { for (auto& sel : m_editor.m_selections) { - if (m_mode == InsertMode::Append) - sel = Selection(sel.first(), utf8::previous(sel.last())); + if (m_mode == InsertMode::Append and sel.last().column() > 0) + sel.last() = utf8::previous(sel.last()); sel.avoid_eol(); } |
