Fix adapt_view_pos when the cursor is not on a display atom by itself
This commit is contained in:
parent
2cbb0bb27f
commit
4f4a626754
|
@ -96,6 +96,8 @@ public:
|
||||||
return m_type == BufferRange or m_type == ReplacedBufferRange;
|
return m_type == BufferRange or m_type == ReplacedBufferRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Buffer& buffer() const { kak_assert(m_buffer); return *m_buffer; }
|
||||||
|
|
||||||
Type type() const { return m_type; }
|
Type type() const { return m_type; }
|
||||||
|
|
||||||
void trim_begin(CharCount count);
|
void trim_begin(CharCount count);
|
||||||
|
|
|
@ -129,12 +129,26 @@ static CharCount adapt_view_pos(const DisplayBuffer& display_buffer,
|
||||||
{
|
{
|
||||||
if (atom.begin() <= pos and atom.end() > pos)
|
if (atom.begin() <= pos and atom.end() > pos)
|
||||||
{
|
{
|
||||||
if (buffer_column < view_pos)
|
CharCount pos_beg, pos_end;
|
||||||
return buffer_column;
|
if (atom.type() == DisplayAtom::BufferRange)
|
||||||
|
{
|
||||||
|
auto& buf = atom.buffer();
|
||||||
|
pos_beg = buffer_column
|
||||||
|
+ utf8::distance(buf.iterator_at(atom.begin()),
|
||||||
|
buf.iterator_at(pos));
|
||||||
|
pos_end = pos_beg+1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pos_beg = buffer_column;
|
||||||
|
pos_end = pos_beg + atom.length();
|
||||||
|
}
|
||||||
|
|
||||||
auto last_column = buffer_column + atom.length();
|
if (pos_beg < view_pos)
|
||||||
if (last_column >= view_pos + view_size - non_buffer_column)
|
return pos_beg;
|
||||||
return last_column - view_size + non_buffer_column;
|
|
||||||
|
if (pos_end >= view_pos + view_size - non_buffer_column)
|
||||||
|
return pos_end - view_size + non_buffer_column;
|
||||||
}
|
}
|
||||||
buffer_column += atom.length();
|
buffer_column += atom.length();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user