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 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 (iterator->offset() >= m_insert_position)
|
||||
{
|
||||
iterator->warp(bytes, lines);
|
||||
}
|
||||
}
|
||||
m_insert_position += bytes;
|
||||
}
|
||||
}
|
||||
|
@ -93,7 +93,9 @@ public:
|
||||
|
||||
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(); }
|
||||
size_t size() const { return m_gap_buffer->size(); }
|
||||
@ -113,6 +115,7 @@ protected:
|
||||
uint8_t m_tabstop;
|
||||
bool m_insert_mode;
|
||||
size_t m_insert_position;
|
||||
std::list<std::shared_ptr<Iterator>> m_iterators;
|
||||
|
||||
void common_initialization();
|
||||
bool load_from_file(const char * filename);
|
||||
|
Loading…
x
Reference in New Issue
Block a user