diff options
Diffstat (limited to 'lua/telescope/pickers/multi.lua')
| -rw-r--r-- | lua/telescope/pickers/multi.lua | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lua/telescope/pickers/multi.lua b/lua/telescope/pickers/multi.lua new file mode 100644 index 0000000..2896c08 --- /dev/null +++ b/lua/telescope/pickers/multi.lua @@ -0,0 +1,51 @@ + +local MultiSelect = {} +MultiSelect.__index = MultiSelect + +function MultiSelect:new() + return setmetatable({ + _entries = {} + }, MultiSelect) +end + +function MultiSelect:get() + local marked_entries = {} + for entry, count in pairs(self._entries) do + table.insert(marked_entries, {count, entry}) + end + + table.sort(marked_entries, function(left, right) + return left[1] < right[1] + end) + + local selections = {} + for _, entry in ipairs(marked_entries) do + table.insert(selections, entry[2]) + end + + return selections +end + +function MultiSelect:is_selected(entry) + return self._entries[entry] +end + +local multi_select_count = 0 +function MultiSelect:add(entry) + multi_select_count = multi_select_count + 1 + self._entries[entry] = multi_select_count +end + +function MultiSelect:drop(entry) + self._entries[entry] = nil +end + +function MultiSelect:toggle(entry) + if self:is_selected(entry) then + self:drop(entry) + else + self:add(entry) + end +end + +return MultiSelect |
