Check entire selection to trigger `DocView:scroll_to_make_visible`

This is needed for example when a selection has both `line1` and `col1`
at 1, and the left arrow is pressed: `line2` and `col2` change, while
`line1` and `col1` don't, but we still want to scroll.
This commit is contained in:
Guldoman 2022-02-11 06:04:58 +01:00
parent 59ba759167
commit 5526041da3
No known key found for this signature in database
GPG Key ID: C08A498EC7F1AFDD
2 changed files with 10 additions and 6 deletions

View File

@ -279,8 +279,10 @@ local commands = {
["doc:select-all"] = function() ["doc:select-all"] = function()
doc():set_selection(1, 1, math.huge, math.huge) doc():set_selection(1, 1, math.huge, math.huge)
-- avoid triggering DocView:scroll_to_make_visible -- avoid triggering DocView:scroll_to_make_visible
dv().last_line = 1 dv().last_line1 = 1
dv().last_col = 1 dv().last_col1 = 1
dv().last_line2 = #doc().lines
dv().last_col2 = #doc().lines[#doc().lines]
end, end,
["doc:select-lines"] = function() ["doc:select-lines"] = function()

View File

@ -284,13 +284,15 @@ end
function DocView:update() function DocView:update()
-- scroll to make caret visible and reset blink timer if it moved -- scroll to make caret visible and reset blink timer if it moved
local line, col = self.doc:get_selection() local line1, col1, line2, col2 = self.doc:get_selection()
if (line ~= self.last_line or col ~= self.last_col) and self.size.x > 0 then if (line1 ~= self.last_line1 or col1 ~= self.last_col1 or
line2 ~= self.last_line2 or col2 ~= self.last_col2) and self.size.x > 0 then
if core.active_view == self then if core.active_view == self then
self:scroll_to_make_visible(line, col) self:scroll_to_make_visible(line1, col1)
end end
core.blink_reset() core.blink_reset()
self.last_line, self.last_col = line, col self.last_line1, self.last_col1 = line1, col1
self.last_line2, self.last_col2 = line2, col2
end end
-- update blink timer -- update blink timer