insert a \n to follow new content when inserting into an empty buffer

This commit is contained in:
Josh Holtrop 2016-12-27 15:10:45 -05:00
parent 723b96f624
commit 38d615ecc4
2 changed files with 13 additions and 6 deletions

View File

@ -162,22 +162,29 @@ void Buffer::exit_insert_mode()
m_insert_mode = false;
}
void Buffer::insert_code_point(uint32_t code_point)
void Buffer::insert_code_point(uint32_t code_point, bool adjust_iterators)
{
if (m_insert_mode)
{
if ((code_point != '\n') && (size() == 0u))
{
insert_code_point('\n', false);
}
uint8_t encoded[Encoding::MAX_CODE_POINT_SIZE];
uint8_t bytes = Encoding::encode(code_point, m_encoding, encoded);
m_gap_buffer->insert(m_insert_position, encoded, bytes);
ssize_t lines = (code_point == '\n') ? 1 : 0;
for (auto iterator : m_iterators)
if (adjust_iterators)
{
if (iterator->offset() >= m_insert_position)
for (auto iterator : m_iterators)
{
iterator->warp(bytes, lines);
if (iterator->offset() >= m_insert_position)
{
iterator->warp(bytes, lines);
}
}
m_insert_position += bytes;
}
m_insert_position += bytes;
}
}

View File

@ -105,7 +105,7 @@ public:
void enter_insert_mode(const Buffer::Iterator & position);
void exit_insert_mode();
bool insert_mode() const { return m_insert_mode; }
void insert_code_point(uint32_t code_point);
void insert_code_point(uint32_t code_point, bool adjust_iterators = true);
void erase_code_point(const Buffer::Iterator & position);
protected: