diff options
| author | TJ DeVries <devries.timothyj@gmail.com> | 2021-02-27 15:06:04 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-27 21:06:04 +0100 |
| commit | 11674ac021e39f92eb51d2884904b0300c5133a3 (patch) | |
| tree | ced317f650b35b9ea7466097a730f76740de1725 /lua/telescope/pickers/multi.lua | |
| parent | ca92ec1a830a61a0b88fff925f2146ab46e0f7c9 (diff) | |
feat: multi selection. Only integrates with send_selected_to_qflist (#551)
This will not yet work with select actions. More work is needed in that case.
Co-authored-by: Simon Hauser <Simon-Hauser@outlook.de>
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 |
