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)
{
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);
}
}
}