feat: Add scroll_strategy = 'cycle'

This commit is contained in:
TJ DeVries
2020-10-08 22:47:22 -04:00
parent 1222cc5b42
commit 3cf3acc4d5
3 changed files with 21 additions and 7 deletions

View File

@@ -83,6 +83,7 @@ function Picker:new(opts)
sorting_strategy = get_default(opts.sorting_strategy, config.values.sorting_strategy),
selection_strategy = get_default(opts.selection_strategy, config.values.selection_strategy),
scroll_strategy = get_default(opts.scroll_strategy, config.values.scroll_strategy),
get_window_options = opts.get_window_options,
layout_strategy = layout_strategy,
@@ -639,14 +640,28 @@ function Picker:reset_selection()
self.multi_select = {}
end
function Picker:_handle_scroll_strategy(row)
if self.scroll_strategy == "cycle" then
if row >= self.max_results then
row = 0
elseif row < 0 then
row = self.max_results - 1
end
else
if row >= self.max_results then
row = self.max_results - 1
elseif row < 0 then
row = 0
end
end
return row
end
function Picker:set_selection(row)
-- TODO: Loop around behavior?
-- TODO: Scrolling past max results
if row >= self.max_results then
row = self.max_results - 1
elseif row < 0 then
row = 0
end
row = self:_handle_scroll_strategy(row)
if not self:can_select_row(row) then
log.debug("Cannot select row:", row, self.manager:num_results(), self.max_results)