summaryrefslogtreecommitdiff
path: root/src/editor.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-12-28 14:06:56 +0100
committerMaxime Coste <frrrwww@gmail.com>2012-12-28 14:06:56 +0100
commitcb80ae139ba7043e8d0070fa46b305680e06fb33 (patch)
treee73a5a0d96a4ead6d76e283c0119cca592110c91 /src/editor.cc
parent28cf772debe6fb8eeb9d23dcb5fd56285e708583 (diff)
IncrementalInserter: fix append mode when on line end
Diffstat (limited to 'src/editor.cc')
-rw-r--r--src/editor.cc15
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();
}