fix: scroll misbehaving + fixed jump to middle (#547)
* fix: scroll misbehaving + fixed jump to middle * add test * fixx * fix nil
This commit is contained in:
@@ -80,7 +80,11 @@ end
|
||||
|
||||
function actions.move_to_middle(prompt_bufnr)
|
||||
local current_picker = actions.get_current_picker(prompt_bufnr)
|
||||
current_picker:set_selection(p_scroller.middle(nil, current_picker.max_results, nil))
|
||||
current_picker:set_selection(p_scroller.middle(
|
||||
current_picker.sorting_strategy,
|
||||
current_picker.max_results,
|
||||
current_picker.manager:num_results()
|
||||
))
|
||||
end
|
||||
|
||||
function actions.move_to_bottom(prompt_bufnr)
|
||||
|
||||
@@ -28,6 +28,7 @@ local set = setmetatable({}, {
|
||||
set.shift_selection = function(prompt_bufnr, change)
|
||||
local count = vim.v.count
|
||||
count = count == 0 and 1 or count
|
||||
count = a.nvim_get_mode().mode == "n" and count or 1
|
||||
action_state.get_current_picker(prompt_bufnr):move_selection(change * count)
|
||||
end
|
||||
|
||||
|
||||
@@ -81,7 +81,15 @@ scroller.top = function(sorting_strategy, max_results, num_results)
|
||||
end
|
||||
|
||||
scroller.middle = function(sorting_strategy, max_results, num_results)
|
||||
return math.floor(max_results/2)
|
||||
local mid_pos
|
||||
|
||||
if sorting_strategy == 'ascending' then
|
||||
mid_pos = math.floor(num_results / 2)
|
||||
else
|
||||
mid_pos = math.floor(max_results - num_results / 2)
|
||||
end
|
||||
|
||||
return (num_results < max_results) and mid_pos or math.floor(max_results / 2)
|
||||
end
|
||||
|
||||
scroller.bottom = function(sorting_strategy, max_results, num_results)
|
||||
|
||||
@@ -114,18 +114,16 @@ describe('scroller', function()
|
||||
|
||||
|
||||
describe('should give top, middle and bottom index', function()
|
||||
it('should handle middle index', function()
|
||||
eq(5, p_scroller.middle(nil, 11, nil))
|
||||
eq(10, p_scroller.middle(nil, 20, nil))
|
||||
eq(12, p_scroller.middle(nil, 25, nil))
|
||||
end)
|
||||
|
||||
it('should handle ascending', function()
|
||||
eq(0, p_scroller.top('ascending', 20, 1000))
|
||||
eq(19, p_scroller.bottom('ascending', 20, 1000))
|
||||
|
||||
eq(0, p_scroller.top('ascending', 20, 10))
|
||||
eq(9, p_scroller.bottom('ascending', 20, 10))
|
||||
|
||||
eq(5, p_scroller.middle('ascending', 11, 100))
|
||||
eq(10, p_scroller.middle('ascending', 20, 100))
|
||||
eq(12, p_scroller.middle('ascending', 25, 100))
|
||||
end)
|
||||
|
||||
it('should handle descending', function()
|
||||
@@ -134,6 +132,10 @@ describe('scroller', function()
|
||||
|
||||
eq(10, p_scroller.top('descending', 20, 10))
|
||||
eq(19, p_scroller.bottom('descending', 20, 10))
|
||||
|
||||
eq(25, p_scroller.middle('descending', 30, 10))
|
||||
eq(50, p_scroller.middle('descending', 60, 20))
|
||||
eq(105, p_scroller.middle('descending', 120, 30))
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user