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)
|
function actions.move_to_middle(prompt_bufnr)
|
||||||
local current_picker = actions.get_current_picker(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
|
end
|
||||||
|
|
||||||
function actions.move_to_bottom(prompt_bufnr)
|
function actions.move_to_bottom(prompt_bufnr)
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ local set = setmetatable({}, {
|
|||||||
set.shift_selection = function(prompt_bufnr, change)
|
set.shift_selection = function(prompt_bufnr, change)
|
||||||
local count = vim.v.count
|
local count = vim.v.count
|
||||||
count = count == 0 and 1 or 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)
|
action_state.get_current_picker(prompt_bufnr):move_selection(change * count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,15 @@ scroller.top = function(sorting_strategy, max_results, num_results)
|
|||||||
end
|
end
|
||||||
|
|
||||||
scroller.middle = function(sorting_strategy, max_results, num_results)
|
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
|
end
|
||||||
|
|
||||||
scroller.bottom = function(sorting_strategy, max_results, num_results)
|
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()
|
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()
|
it('should handle ascending', function()
|
||||||
eq(0, p_scroller.top('ascending', 20, 1000))
|
eq(0, p_scroller.top('ascending', 20, 1000))
|
||||||
eq(19, p_scroller.bottom('ascending', 20, 1000))
|
eq(19, p_scroller.bottom('ascending', 20, 1000))
|
||||||
|
|
||||||
eq(0, p_scroller.top('ascending', 20, 10))
|
eq(0, p_scroller.top('ascending', 20, 10))
|
||||||
eq(9, p_scroller.bottom('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)
|
end)
|
||||||
|
|
||||||
it('should handle descending', function()
|
it('should handle descending', function()
|
||||||
@@ -134,6 +132,10 @@ describe('scroller', function()
|
|||||||
|
|
||||||
eq(10, p_scroller.top('descending', 20, 10))
|
eq(10, p_scroller.top('descending', 20, 10))
|
||||||
eq(19, p_scroller.bottom('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)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
Reference in New Issue
Block a user