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; 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 (m_insert_mode)
{ {
if ((code_point != '\n') && (size() == 0u))
{
insert_code_point('\n', false);
}
uint8_t encoded[Encoding::MAX_CODE_POINT_SIZE]; uint8_t encoded[Encoding::MAX_CODE_POINT_SIZE];
uint8_t bytes = Encoding::encode(code_point, m_encoding, encoded); uint8_t bytes = Encoding::encode(code_point, m_encoding, encoded);
m_gap_buffer->insert(m_insert_position, encoded, bytes); m_gap_buffer->insert(m_insert_position, encoded, bytes);
ssize_t lines = (code_point == '\n') ? 1 : 0; 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 enter_insert_mode(const Buffer::Iterator & position);
void exit_insert_mode(); void exit_insert_mode();
bool insert_mode() const { return m_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); void erase_code_point(const Buffer::Iterator & position);
protected: protected: