From cb80ae139ba7043e8d0070fa46b305680e06fb33 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 28 Dec 2012 14:06:56 +0100 Subject: [PATCH] IncrementalInserter: fix append mode when on line end --- src/editor.cc | 15 ++++++++++++--- 1 file 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(); }