20250118.1737193804
This commit is contained in:
parent
ba81851219
commit
ed1f856b78
17 changed files with 43 additions and 398 deletions
|
@ -1,63 +0,0 @@
|
|||
local mapvimkey = require("utils.keymapper").mapvimkey
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.InsertMarkdownURL()
|
||||
local url = vim.fn.getreg("+")
|
||||
if url == "" then
|
||||
return
|
||||
end
|
||||
local cmd = "curl -L " .. vim.fn.shellescape(url) .. " 2>/dev/null"
|
||||
local handle = io.popen(cmd)
|
||||
if not handle then
|
||||
return
|
||||
end
|
||||
local html = handle:read("*a")
|
||||
handle:close()
|
||||
local title = ""
|
||||
local pattern = "<title[^>]*>(.-)</title>"
|
||||
local m = string.match(html, pattern)
|
||||
if m then
|
||||
title = m
|
||||
end
|
||||
if title ~= "" then
|
||||
title = title:gsub("%[", "(")
|
||||
title = title:gsub("%]", ")")
|
||||
local markdownLink = "[" .. title .. "](" .. url .. ")"
|
||||
vim.api.nvim_put({ markdownLink }, "", true, true)
|
||||
-- vim.api.nvim_command("call append(line('.'), '" .. markdownLink .. "')")
|
||||
else
|
||||
print("Title not found for link")
|
||||
end
|
||||
end
|
||||
|
||||
-- inserting zettelkasten link with an id
|
||||
function M.insert_zk_id()
|
||||
local handle = io.popen("eton zk id")
|
||||
local id = handle:read("*a")
|
||||
handle:close()
|
||||
|
||||
id = id:gsub("%s+", "")
|
||||
|
||||
local insert_text = string.format("[](%s.md)", id)
|
||||
vim.api.nvim_put({ insert_text }, "c", true, true)
|
||||
|
||||
vim.api.nvim_feedkeys("i", "n", true)
|
||||
end
|
||||
|
||||
function M.get_relative_path(from, to)
|
||||
local from_dir = vim.fn.fnamemodify(from, ":p:h")
|
||||
local to_file = vim.fn.fnamemodify(to, ":p")
|
||||
local from_parts = vim.split(from_dir, "/")
|
||||
local to_parts = vim.split(to_file, "/")
|
||||
|
||||
while #from_parts > 0 and #to_parts > 0 and from_parts[1] == to_parts[1] do
|
||||
table.remove(from_parts, 1)
|
||||
table.remove(to_parts, 1)
|
||||
end
|
||||
|
||||
local relative_path = string.rep("../", #from_parts) .. table.concat(to_parts, "/")
|
||||
return relative_path
|
||||
end
|
||||
|
||||
return M
|
|
@ -1,140 +0,0 @@
|
|||
local finders = require("telescope.finders")
|
||||
local previewers = require("telescope.previewers")
|
||||
local action_state = require("telescope.actions.state")
|
||||
local conf = require("telescope.config").values
|
||||
local pickers = require("telescope.pickers")
|
||||
local actions = require("telescope.actions")
|
||||
local helpers = require("utils.helpers")
|
||||
|
||||
local M = {}
|
||||
|
||||
local function paste_titled_link()
|
||||
return function(prompt_bufnr)
|
||||
actions.close(prompt_bufnr)
|
||||
local current_file = vim.fn.expand("%:p")
|
||||
local selection = action_state.get_selected_entry()
|
||||
local parts = vim.split(selection.value, ":")
|
||||
local filename_part = parts[1]
|
||||
-- local filename_and_category = vim.split(filename_part, "/")
|
||||
local relative_path = helpers.get_relative_path(current_file, filename_part)
|
||||
local title = parts[#parts]:match("^%s*(.-)%s*$")
|
||||
-- remove `#` from header name if it regular wiki
|
||||
title = title:gsub("^%s*#%s*", "")
|
||||
relative_path = relative_path:gsub(" ", "%%20")
|
||||
local link = "[" .. title .. "](" .. relative_path .. ")"
|
||||
vim.api.nvim_put({ link }, "", true, true)
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- local function paste_link()
|
||||
-- return function(prompt_bufnr)
|
||||
-- actions.close(prompt_bufnr)
|
||||
-- local selection = action_state.get_selected_entry()
|
||||
-- print(selection.value)
|
||||
-- local filename_part = vim.split(selection.value, ":")[1]
|
||||
-- local link = "[[../" .. filename_part .. "]]"
|
||||
-- vim.api.nvim_put({ link }, "", true, true)
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
-- M.copy_filename_to_clipboard = function(prompt_bufnr)
|
||||
-- local selection = action_state.get_selected_entry()
|
||||
-- local filename_part = vim.split(selection.value, ":")[1]
|
||||
-- vim.fn.setreg("*", filename_part)
|
||||
-- vim.fn.setreg("+", filename_part)
|
||||
-- print("Copied filename: " .. filename_part)
|
||||
-- actions.close(prompt_bufnr)
|
||||
-- end
|
||||
|
||||
M.search_raw_title = function(opts)
|
||||
opts = opts or {}
|
||||
local search_dir = opts.search_dir or "."
|
||||
|
||||
pickers
|
||||
.new(opts, {
|
||||
prompt_title = "Search ETON",
|
||||
finder = finders.new_job(function(prompt)
|
||||
if not prompt then
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Adjust the rg command to search for raw_title in all files
|
||||
local cmd = {
|
||||
"rg",
|
||||
"--no-heading",
|
||||
"--color=never",
|
||||
"--with-filename",
|
||||
"--line-number",
|
||||
"-i",
|
||||
"-m",
|
||||
"1",
|
||||
"title:.*" .. prompt,
|
||||
search_dir,
|
||||
}
|
||||
if opts.type ~= "zettel" then
|
||||
cmd[9] = "^#.*" .. prompt
|
||||
end
|
||||
|
||||
return cmd
|
||||
end, opts.entry_maker or function(entry)
|
||||
local filename, lnum, header
|
||||
|
||||
if opts.type ~= "zettel" then
|
||||
filename, lnum, header = entry:match("([^:]+):(%d+):#%s*(.*)")
|
||||
else
|
||||
filename, lnum, header = entry:match("([^:]+):(%d+):title:(.*)")
|
||||
end
|
||||
|
||||
if not filename then
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Получаем только базовое имя файла
|
||||
local basename = filename:match("^.+/(.+)$") or filename
|
||||
|
||||
return {
|
||||
value = entry,
|
||||
ordinal = basename .. " " .. (header or ""),
|
||||
display = basename .. " - " .. (header or ""),
|
||||
filename = filename,
|
||||
lnum = tonumber(lnum),
|
||||
}
|
||||
end),
|
||||
previewer = previewers.new_buffer_previewer({
|
||||
define_preview = function(self, entry, status)
|
||||
conf.buffer_previewer_maker(entry.filename, self.state.bufnr, {
|
||||
bufname = self.state.bufname,
|
||||
winid = self.state.winid,
|
||||
preview = self.state.preview,
|
||||
})
|
||||
-- vim.api.nvim_buf_call(self.state.bufnr, function()
|
||||
-- vim.fn.cursor(entry.lnum, 0)
|
||||
-- vim.cmd("normal! zz")
|
||||
-- end)
|
||||
end,
|
||||
}),
|
||||
sorter = conf.generic_sorter(opts),
|
||||
attach_mappings = function(_, map)
|
||||
-- map("n", "<c-i>", paste_titled_link())
|
||||
-- map("i", "<c-i>", paste_titled_link())
|
||||
map("n", "<c-u>", paste_titled_link())
|
||||
map("i", "<c-u>", paste_titled_link())
|
||||
actions.select_default:replace(function()
|
||||
local selection = action_state.get_selected_entry()
|
||||
actions.close(_)
|
||||
vim.cmd("vsplit " .. selection.filename)
|
||||
vim.fn.cursor(selection.lnum, 0)
|
||||
end)
|
||||
return true
|
||||
end,
|
||||
})
|
||||
:find()
|
||||
end
|
||||
|
||||
-- vim.api.nvim_create_user_command("SearchZettelTitle", function()
|
||||
-- M.search_raw_title({ search_dir = "/Users/fz0x1/Dropbox/TextSync/PKM/00-zettelkasten/" })
|
||||
-- end, {})
|
||||
-- mapvimkey("<leader>fm", "SearchZettelTitle", "Search by zettel title")
|
||||
|
||||
return M
|
|
@ -1,44 +0,0 @@
|
|||
local options = require("core.options")
|
||||
|
||||
local M = {}
|
||||
|
||||
local function generate_id(length)
|
||||
local chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||
local id = ""
|
||||
for i = 1, length do
|
||||
local rand = math.random(#chars)
|
||||
id = id .. chars:sub(rand, rand)
|
||||
end
|
||||
return id
|
||||
end
|
||||
|
||||
local function file_exists(directory, filename)
|
||||
local filepath = directory .. "/" .. filename
|
||||
local file = io.open(filepath, "r")
|
||||
if file then
|
||||
io.close(file)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local function generate_unique_id(directory, length)
|
||||
local id
|
||||
repeat
|
||||
id = generate_id(length)
|
||||
until not file_exists(directory, id .. ".md")
|
||||
return id
|
||||
end
|
||||
|
||||
function M.insert_link_with_unique_id()
|
||||
local id_length = 8
|
||||
|
||||
local unique_id = generate_unique_id(options.resources_dir, id_length)
|
||||
|
||||
local link = string.format("[name](%s.md)", unique_id)
|
||||
|
||||
vim.api.nvim_put({ link }, "c", true, true)
|
||||
end
|
||||
|
||||
return M
|
Loading…
Add table
Add a link
Reference in a new issue