Warp all cursors at/after the insert point when inserting a code point
This commit is contained in:
parent
59b8fc5e31
commit
cadd5bac36
@ -169,6 +169,14 @@ void Buffer::insert_code_point(uint32_t code_point)
|
|||||||
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;
|
||||||
|
for (auto iterator : m_iterators)
|
||||||
|
{
|
||||||
|
if (iterator->offset() >= m_insert_position)
|
||||||
|
{
|
||||||
|
iterator->warp(bytes, lines);
|
||||||
|
}
|
||||||
|
}
|
||||||
m_insert_position += bytes;
|
m_insert_position += bytes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,9 @@ public:
|
|||||||
|
|
||||||
std::shared_ptr<Iterator> add_iterator()
|
std::shared_ptr<Iterator> add_iterator()
|
||||||
{
|
{
|
||||||
return std::make_shared<Iterator>(this);
|
std::shared_ptr<Iterator> iterator = std::make_shared<Iterator>(this);
|
||||||
|
m_iterators.push_back(iterator);
|
||||||
|
return iterator;
|
||||||
}
|
}
|
||||||
auto get_string() { return m_gap_buffer->get_string(); }
|
auto get_string() { return m_gap_buffer->get_string(); }
|
||||||
size_t size() const { return m_gap_buffer->size(); }
|
size_t size() const { return m_gap_buffer->size(); }
|
||||||
@ -113,6 +115,7 @@ protected:
|
|||||||
uint8_t m_tabstop;
|
uint8_t m_tabstop;
|
||||||
bool m_insert_mode;
|
bool m_insert_mode;
|
||||||
size_t m_insert_position;
|
size_t m_insert_position;
|
||||||
|
std::list<std::shared_ptr<Iterator>> m_iterators;
|
||||||
|
|
||||||
void common_initialization();
|
void common_initialization();
|
||||||
bool load_from_file(const char * filename);
|
bool load_from_file(const char * filename);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user