From 38d615ecc47e1c791e6402d2302678b822c10399 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 27 Dec 2016 15:10:45 -0500 Subject: [PATCH] insert a \n to follow new content when inserting into an empty buffer --- src/core/Buffer.cc | 17 ++++++++++++----- src/core/Buffer.h | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index 1e7caef..741516f 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -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; } } diff --git a/src/core/Buffer.h b/src/core/Buffer.h index e37ef74..6dfdee6 100644 --- a/src/core/Buffer.h +++ b/src/core/Buffer.h @@ -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: