Buffer: allow insert_code_point() to be called outside of insert mode

This commit is contained in:
Josh Holtrop 2017-01-07 13:22:05 -05:00
parent 21320d9ea7
commit 348d11e992

View File

@ -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) 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; insert_code_point(position, '\n', false);
if ((code_point != '\n') && (size() == 0u)) }
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); if (*iterator >= local_position)
}
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) iterator->warp(bytes, lines);
{
iterator->warp(bytes, lines);
}
} }
} }
} }