summaryrefslogtreecommitdiff
path: root/lua/telescope/pickers/multi.lua
diff options
context:
space:
mode:
authorTJ DeVries <devries.timothyj@gmail.com>2021-02-27 15:06:04 -0500
committerGitHub <noreply@github.com>2021-02-27 21:06:04 +0100
commit11674ac021e39f92eb51d2884904b0300c5133a3 (patch)
treeced317f650b35b9ea7466097a730f76740de1725 /lua/telescope/pickers/multi.lua
parentca92ec1a830a61a0b88fff925f2146ab46e0f7c9 (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.lua51
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