diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2014-05-11 13:20:13 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2014-05-13 19:01:27 +0100 |
| commit | ddd8f8d392ae059298ffa6175165f6e224a009f9 (patch) | |
| tree | eabe441a025f264329c3c0e3a151c1ce5f1e5dfc /src/buffer.cc | |
| parent | a51027602544bb7d67a3313cca859bac897894b6 (diff) | |
LineChangeWatcher uses Buffer::changes_since rather than listening
Diffstat (limited to 'src/buffer.cc')
| -rw-r--r-- | src/buffer.cc | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/buffer.cc b/src/buffer.cc index 5219f1b6..c92f09b1 100644 --- a/src/buffer.cc +++ b/src/buffer.cc @@ -39,7 +39,7 @@ Buffer::Buffer(String name, Flags flags, std::vector<String> lines, pos += m_lines.back().length(); } - m_changes.push_back({ Change::Insert, {0,0}, line_count() }); + m_changes.push_back({ Change::Insert, {0,0}, line_count(), true }); if (flags & Flags::File) { @@ -78,7 +78,7 @@ void Buffer::reload(std::vector<String> lines, time_t fs_timestamp) for (auto listener : m_change_listeners) listener->on_erase(*this, {0,0}, back_coord()); - m_changes.push_back({ Change::Erase, {0,0}, back_coord() }); + m_changes.push_back({ Change::Erase, {0,0}, back_coord(), true }); m_history.clear(); m_current_undo_group.clear(); @@ -99,7 +99,7 @@ void Buffer::reload(std::vector<String> lines, time_t fs_timestamp) } m_fs_timestamp = fs_timestamp; - m_changes.push_back({ Change::Insert, {0,0}, back_coord() }); + m_changes.push_back({ Change::Insert, {0,0}, back_coord(), true }); for (auto listener : m_change_listeners) listener->on_insert(*this, {0,0}, back_coord()); @@ -459,6 +459,7 @@ ByteCoord Buffer::do_insert(ByteCoord pos, const String& content) ByteCoord begin; ByteCoord end; + bool at_end = false; // if we inserted at the end of the buffer, we have created a new // line without inserting a '\n' if (is_end(pos)) @@ -477,6 +478,7 @@ ByteCoord Buffer::do_insert(ByteCoord pos, const String& content) begin = pos.column == 0 ? pos : ByteCoord{ pos.line + 1, 0 }; end = ByteCoord{ line_count()-1, m_lines.back().length() }; + at_end = true; } else { @@ -519,7 +521,7 @@ ByteCoord Buffer::do_insert(ByteCoord pos, const String& content) end = ByteCoord{ last_line, m_lines[last_line].length() - suffix.length() }; } - m_changes.push_back({ Change::Insert, begin, end }); + m_changes.push_back({ Change::Insert, begin, end, at_end }); for (auto listener : m_change_listeners) listener->on_insert(*this, begin, end); return begin; @@ -550,7 +552,7 @@ ByteCoord Buffer::do_erase(ByteCoord begin, ByteCoord end) for (LineCount i = begin.line+1; i < line_count(); ++i) m_lines[i].start -= length; - m_changes.push_back({ Change::Erase, begin, end }); + m_changes.push_back({ Change::Erase, begin, end, is_end(begin) }); for (auto listener : m_change_listeners) listener->on_erase(*this, begin, end); return next; |
