diff options
Diffstat (limited to 'src/display_buffer.cc')
| -rw-r--r-- | src/display_buffer.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/display_buffer.cc b/src/display_buffer.cc index e6ae2a34..3a1449d7 100644 --- a/src/display_buffer.cc +++ b/src/display_buffer.cc @@ -92,15 +92,22 @@ DisplayLine::iterator DisplayLine::split(iterator it, BufferCoord pos) return m_atoms.insert(it, std::move(atom)); } -DisplayLine::iterator DisplayLine::split(iterator it, ColumnCount pos) +DisplayLine::iterator DisplayLine::split(iterator it, ColumnCount count) { - kak_assert(it->type() == DisplayAtom::Text); - kak_assert(pos > 0); - kak_assert(pos < it->length()); + kak_assert(count > 0); + kak_assert(count < it->length()); - DisplayAtom atom(it->m_text.substr(0, pos).str()); - it->m_text = it->m_text.substr(pos).str(); - return m_atoms.insert(it, std::move(atom)); + if (it->type() == DisplayAtom::Text or it->type() == DisplayAtom::ReplacedRange) + { + DisplayAtom atom = *it; + atom.m_text = atom.m_text.substr(0, count).str(); + it->m_text = it->m_text.substr(count).str(); + return m_atoms.insert(it, std::move(atom)); + } + auto pos = utf8::advance(get_iterator(it->buffer(), it->begin()), + get_iterator(it->buffer(), it->end()), + count).coord(); + return split(it, pos); } DisplayLine::iterator DisplayLine::insert(iterator it, DisplayAtom atom) |
