diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index bb0c6d6..de0b4dc 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -166,26 +166,23 @@ void Buffer::exit_insert_mode() void Buffer::insert_code_point(const Buffer::Iterator & position, uint32_t code_point, bool adjust_iterators) { - if (m_insert_mode) + Buffer::Iterator local_position = position; + if ((code_point != '\n') && (size() == 0u)) { - Buffer::Iterator local_position = position; - if ((code_point != '\n') && (size() == 0u)) + insert_code_point(position, '\n', false); + } + uint8_t encoded[Encoding::MAX_CODE_POINT_SIZE]; + uint8_t bytes = Encoding::encode(code_point, m_encoding, encoded); + m_gap_buffer->insert(local_position.offset(), encoded, bytes); + record_change(encoded, bytes, local_position.offset(), true); + ssize_t lines = (code_point == '\n') ? 1 : 0; + if (adjust_iterators) + { + for (auto iterator : m_iterators) { - insert_code_point(position, '\n', false); - } - uint8_t encoded[Encoding::MAX_CODE_POINT_SIZE]; - uint8_t bytes = Encoding::encode(code_point, m_encoding, encoded); - m_gap_buffer->insert(local_position.offset(), encoded, bytes); - record_change(encoded, bytes, local_position.offset(), true); - ssize_t lines = (code_point == '\n') ? 1 : 0; - if (adjust_iterators) - { - for (auto iterator : m_iterators) + if (*iterator >= local_position) { - if (*iterator >= local_position) - { - iterator->warp(bytes, lines); - } + iterator->warp(bytes, lines); } } }