mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
fix: crashes when selection indicator exceeds the visible area while a wrong folder_offset specified (#416)
This commit is contained in:
parent
d54983143a
commit
638a360d51
2 changed files with 21 additions and 10 deletions
|
|
@ -69,30 +69,31 @@ function Folder:linemode(area)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Folder:markers(area, markers)
|
function Folder:markers(area, markers)
|
||||||
if #markers == 0 then
|
if #markers == 0 or area.w * area.h == 0 then
|
||||||
return {}
|
return {}
|
||||||
end
|
end
|
||||||
|
|
||||||
local elements = {}
|
local elements = {}
|
||||||
local append = function(last)
|
local append = function(last)
|
||||||
local p = ui.Bar(
|
local y = math.min(area.y + last[1], area.y + area.h) - 1
|
||||||
|
local bar = ui.Bar(
|
||||||
ui.Rect {
|
ui.Rect {
|
||||||
x = math.max(1, area.x) - 1,
|
x = math.max(0, area.x - 1),
|
||||||
y = area.y + last[1] - 1,
|
y = y,
|
||||||
w = 1,
|
w = 1,
|
||||||
h = 1 + last[2] - last[1],
|
h = 1 + math.min(last[2] - last[1], area.h - y),
|
||||||
},
|
},
|
||||||
ui.Position.LEFT
|
ui.Position.LEFT
|
||||||
)
|
)
|
||||||
|
|
||||||
if last[3] == 1 then
|
if last[3] == 1 then
|
||||||
p = p:style(THEME.manager.marker_copied)
|
bar = bar:style(THEME.manager.marker_copied)
|
||||||
elseif last[3] == 2 then
|
elseif last[3] == 2 then
|
||||||
p = p:style(THEME.manager.marker_cut)
|
bar = bar:style(THEME.manager.marker_cut)
|
||||||
elseif last[3] == 3 then
|
elseif last[3] == 3 then
|
||||||
p = p:style(THEME.manager.marker_selected)
|
bar = bar:style(THEME.manager.marker_selected)
|
||||||
end
|
end
|
||||||
elements[#elements + 1] = p
|
elements[#elements + 1] = bar
|
||||||
end
|
end
|
||||||
|
|
||||||
local last = { markers[1][1], markers[1][1], markers[1][2] } -- start, end, type
|
local last = { markers[1][1], markers[1][1], markers[1][2] } -- start, end, type
|
||||||
|
|
@ -153,7 +154,7 @@ function Folder:current(area)
|
||||||
markers[#markers + 1] = { i, 3 }
|
markers[#markers + 1] = { i, 3 }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return utils.flat { ui.List(area, items), self:linemode(area), table.unpack(self:markers(area, markers)) }
|
return utils.flat { ui.List(area, items), self:linemode(area), self:markers(area, markers) }
|
||||||
end
|
end
|
||||||
|
|
||||||
function Folder:preview(area)
|
function Folder:preview(area)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,16 @@ table.unpack = table.unpack or unpack
|
||||||
|
|
||||||
utils = utils or {}
|
utils = utils or {}
|
||||||
|
|
||||||
|
function utils.clamp(min, x, max)
|
||||||
|
if x < min then
|
||||||
|
return min
|
||||||
|
elseif x > max then
|
||||||
|
return max
|
||||||
|
else
|
||||||
|
return x
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function utils.flat(t)
|
function utils.flat(t)
|
||||||
local r = {}
|
local r = {}
|
||||||
for _, v in ipairs(t) do
|
for _, v in ipairs(t) do
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue