Files
dotfiles-modules/homemanager/neovim/lua/plugins/spec/telescope-picker/find_emojis.lua
2025-10-14 12:29:46 +02:00

102 lines
2.2 KiB
Lua

local pickers = require("telescope.pickers")
local finders = require("telescope.finders")
local conf = require("telescope.config").values
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
local M = {}
local function trim(s)
return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end
local function parse_emoji_line(line)
if not line or vim.startswith(line, "#") then
return nil
end
local id_element_split = vim.split(line, ";")
local element = id_element_split[2]
if not element then
return nil
end
local state_emoji_split = vim.split(element, "#")
local qualified = state_emoji_split[1]
local emoji = state_emoji_split[2]
if not qualified or trim(qualified) ~= "fully-qualified" then
return nil
end
if not emoji then
return nil
end
local icon_description_split = vim.split(emoji, " ")
local icon = icon_description_split[2]
local description = icon_description_split[4]
if not description then
return nil
end
return {
display = trim(icon) .. " " .. trim(description),
value = trim(icon)
}
end
function M.find_emojis()
local path = vim.fn.stdpath("config") .. "/lua/plugins/spec/telescope-picker/emojis.txt"
print(path)
local file = io.open(path, "r")
if not file then
print("Emoji File not found")
return nil
end
local t = {}
for line in file:lines() do
local parsed_line = parse_emoji_line(line)
if parsed_line then
table.insert(t, parsed_line)
end
end
file:close()
local finder = finders.new_table({
results = t,
entry_maker = function(entry)
return {
value = entry.value,
display = entry.display,
ordinal = entry.display,
}
end
})
pickers.new(conf, {
prompt_title = "Find Emojis",
finder = finder,
sorter = conf.generic_sorter(t),
attach_mappings = function(prompt_bufnr, _)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
local buf = vim.api.nvim_get_current_buf()
local cursor = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_buf_set_text(buf, cursor[1] - 1, cursor[2], cursor[1] - 1, cursor[2], { selection.value })
vim.api.nvim_win_set_cursor(0, { cursor[1], cursor[2] + 1 })
end)
return true
end,
}):find()
end
return M