Fix buffer location of column highlighter's past-eol atoms

Using buffer end was confusing Window::display_position that
assumes display atom buffer locations are always increasing.
This commit is contained in:
Maxime Coste 2022-07-11 18:17:51 +10:00
parent ce75867e44
commit 50cacc0758
3 changed files with 9 additions and 4 deletions

View File

@ -134,7 +134,7 @@ DisplayLine::iterator DisplayLine::insert(iterator it, DisplayAtom atom)
return res; return res;
} }
void DisplayLine::push_back(DisplayAtom atom) DisplayAtom& DisplayLine::push_back(DisplayAtom atom)
{ {
if (atom.has_buffer_range()) if (atom.has_buffer_range())
{ {
@ -142,6 +142,7 @@ void DisplayLine::push_back(DisplayAtom atom)
m_range.end = std::max(m_range.end, atom.end()); m_range.end = std::max(m_range.end, atom.end());
} }
m_atoms.push_back(std::move(atom)); m_atoms.push_back(std::move(atom));
return m_atoms.back();
} }
DisplayLine::iterator DisplayLine::erase(iterator beg, iterator end) DisplayLine::iterator DisplayLine::erase(iterator beg, iterator end)

View File

@ -142,7 +142,7 @@ public:
} }
iterator erase(iterator beg, iterator end); iterator erase(iterator beg, iterator end);
void push_back(DisplayAtom atom); DisplayAtom& push_back(DisplayAtom atom);
// remove first_col from the begining of the line, and make sure // remove first_col from the begining of the line, and make sure
// the line is less that col_count character // the line is less that col_count character

View File

@ -647,8 +647,12 @@ std::unique_ptr<Highlighter> create_column_highlighter(HighlighterParameters par
auto remaining_col = column; auto remaining_col = column;
bool found = false; bool found = false;
auto first_buf = find_if(line, [](auto& atom) { return atom.has_buffer_range(); }); auto first_buf = find_if(line, [](auto& atom) { return atom.has_buffer_range(); });
BufferCoord last_pos{};
for (auto atom_it = first_buf; atom_it != line.end(); ++atom_it) for (auto atom_it = first_buf; atom_it != line.end(); ++atom_it)
{ {
if (atom_it->has_buffer_range())
last_pos = atom_it->end();
const auto atom_len = atom_it->length(); const auto atom_len = atom_it->length();
if (remaining_col < atom_len) if (remaining_col < atom_len)
{ {
@ -666,8 +670,8 @@ std::unique_ptr<Highlighter> create_column_highlighter(HighlighterParameters par
continue; continue;
if (remaining_col > 0) if (remaining_col > 0)
line.push_back({buffer, buffer.end_coord(), buffer.end_coord(), String{' ', remaining_col}}); line.push_back({buffer, last_pos, last_pos, String{' ', remaining_col}});
line.push_back({" ", face}); line.push_back({buffer, last_pos, last_pos, " "}).face = face;
} }
}; };