update file search
This commit is contained in:
parent
a4e786a2bd
commit
a970084b32
|
|
@ -1,10 +1,10 @@
|
||||||
return {
|
return {
|
||||||
"obsidian-nvim/obsidian.nvim",
|
'obsidian-nvim/obsidian.nvim',
|
||||||
version = "*", -- use latest release, remove to use latest commit
|
version = '*', -- use latest release, remove to use latest commit
|
||||||
ft = "markdown",
|
ft = 'markdown',
|
||||||
dependencies = {
|
dependencies = {
|
||||||
"nvim-lua/plenary.nvim",
|
'nvim-lua/plenary.nvim',
|
||||||
"nvim-telescope/telescope.nvim",
|
'nvim-telescope/telescope.nvim',
|
||||||
},
|
},
|
||||||
---@module 'obsidian'
|
---@module 'obsidian'
|
||||||
---@type obsidian.config
|
---@type obsidian.config
|
||||||
|
|
@ -12,53 +12,65 @@ return {
|
||||||
legacy_commands = false, -- this will be removed in the next major release
|
legacy_commands = false, -- this will be removed in the next major release
|
||||||
workspaces = {
|
workspaces = {
|
||||||
{
|
{
|
||||||
name = "main",
|
name = 'main',
|
||||||
path = "~/Documents/obsidian_git/Obsidian_vault/",
|
path = '~/Documents/obsidian_git/Obsidian_vault/',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
daily_notes = {
|
daily_notes = {
|
||||||
folder = "Journals",
|
folder = 'Journals',
|
||||||
date_format = "%Y%m%d",
|
date_format = '%Y%m%d',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
config = function(_, opts)
|
config = function(_, opts)
|
||||||
require("obsidian").setup(opts)
|
require('obsidian').setup(opts)
|
||||||
|
|
||||||
local vault_path = vim.fn.expand("~/Documents/obsidian_git/Obsidian_vault/")
|
local vault_path = vim.fn.expand '~/Documents/obsidian_git/Obsidian_vault/'
|
||||||
|
|
||||||
-- Custom function to search by alias
|
-- Custom function to search by alias and filename
|
||||||
local function search_by_alias()
|
local function search_by_alias()
|
||||||
local pickers = require("telescope.pickers")
|
local pickers = require 'telescope.pickers'
|
||||||
local finders = require("telescope.finders")
|
local finders = require 'telescope.finders'
|
||||||
local conf = require("telescope.config").values
|
local conf = require('telescope.config').values
|
||||||
local actions = require("telescope.actions")
|
local actions = require 'telescope.actions'
|
||||||
local action_state = require("telescope.actions.state")
|
local action_state = require 'telescope.actions.state'
|
||||||
|
|
||||||
-- Collect all files with their aliases
|
-- Collect all files with their aliases
|
||||||
local entries = {}
|
local entries = {}
|
||||||
local scandir = require("plenary.scandir")
|
local scandir = require 'plenary.scandir'
|
||||||
local files = scandir.scan_dir(vault_path, { hidden = false, depth = 10, add_dirs = false })
|
local files = scandir.scan_dir(vault_path, { hidden = false, depth = 10, add_dirs = false })
|
||||||
|
|
||||||
for _, file in ipairs(files) do
|
for _, file in ipairs(files) do
|
||||||
if file:match("%.md$") then
|
if file:match '%.md$' then
|
||||||
local f = io.open(file, "r")
|
local rel_path = file:gsub(vault_path, '')
|
||||||
|
local filename = vim.fn.fnamemodify(file, ':t:r')
|
||||||
|
|
||||||
|
-- Always add an entry for the filename
|
||||||
|
table.insert(entries, {
|
||||||
|
alias = nil,
|
||||||
|
filename = filename,
|
||||||
|
path = file,
|
||||||
|
display = filename .. ' (' .. rel_path .. ')',
|
||||||
|
ordinal = filename,
|
||||||
|
})
|
||||||
|
|
||||||
|
local f = io.open(file, 'r')
|
||||||
if f then
|
if f then
|
||||||
local content = f:read("*a")
|
local content = f:read '*a'
|
||||||
f:close()
|
f:close()
|
||||||
|
|
||||||
-- Parse YAML frontmatter
|
-- Parse YAML frontmatter
|
||||||
local frontmatter = content:match("^%-%-%-\n(.-)\n%-%-%-")
|
local frontmatter = content:match '^%-%-%-\n(.-)\n%-%-%-'
|
||||||
if frontmatter then
|
if frontmatter then
|
||||||
-- Extract aliases (supports both list and inline formats)
|
-- Extract aliases (supports both list and inline formats)
|
||||||
local aliases = {}
|
local aliases = {}
|
||||||
|
|
||||||
-- Match "aliases: [alias1, alias2]" format
|
-- Match "aliases: [alias1, alias2]" format
|
||||||
local inline_aliases = frontmatter:match("aliases:%s*%[(.-)%]")
|
local inline_aliases = frontmatter:match 'aliases:%s*%[(.-)%]'
|
||||||
if inline_aliases then
|
if inline_aliases then
|
||||||
for alias in inline_aliases:gmatch("[^,]+") do
|
for alias in inline_aliases:gmatch '[^,]+' do
|
||||||
alias = alias:match("^%s*(.-)%s*$") -- trim
|
alias = alias:match '^%s*(.-)%s*$' -- trim
|
||||||
alias = alias:gsub('^"(.-)"$', "%1"):gsub("^'(.-)'$", "%1") -- remove quotes
|
alias = alias:gsub('^"(.-)"$', '%1'):gsub("^'(.-)'$", '%1') -- remove quotes
|
||||||
if alias ~= "" then
|
if alias ~= '' then
|
||||||
table.insert(aliases, alias)
|
table.insert(aliases, alias)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -68,27 +80,25 @@ return {
|
||||||
-- aliases:
|
-- aliases:
|
||||||
-- - alias1
|
-- - alias1
|
||||||
-- - alias2
|
-- - alias2
|
||||||
local list_section = frontmatter:match("aliases:%s*\n(.-)\n%w")
|
local list_section = frontmatter:match 'aliases:%s*\n(.-)\n%w' or frontmatter:match 'aliases:%s*\n(.-)$'
|
||||||
or frontmatter:match("aliases:%s*\n(.-)$")
|
|
||||||
if list_section then
|
if list_section then
|
||||||
for alias in list_section:gmatch("%s*%-%s*([^\n]+)") do
|
for alias in list_section:gmatch '%s*%-%s*([^\n]+)' do
|
||||||
alias = alias:match("^%s*(.-)%s*$")
|
alias = alias:match '^%s*(.-)%s*$'
|
||||||
alias = alias:gsub('^"(.-)"$', "%1"):gsub("^'(.-)'$", "%1")
|
alias = alias:gsub('^"(.-)"$', '%1'):gsub("^'(.-)'$", '%1')
|
||||||
if alias ~= "" then
|
if alias ~= '' then
|
||||||
table.insert(aliases, alias)
|
table.insert(aliases, alias)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Add entries for each alias
|
-- Add entries for each alias
|
||||||
local rel_path = file:gsub(vault_path, "")
|
|
||||||
local filename = vim.fn.fnamemodify(file, ":t:r")
|
|
||||||
for _, alias in ipairs(aliases) do
|
for _, alias in ipairs(aliases) do
|
||||||
table.insert(entries, {
|
table.insert(entries, {
|
||||||
alias = alias,
|
alias = alias,
|
||||||
filename = filename,
|
filename = filename,
|
||||||
path = file,
|
path = file,
|
||||||
display = alias .. " -> " .. rel_path,
|
display = alias .. ' -> ' .. rel_path,
|
||||||
|
ordinal = alias .. ' ' .. filename,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -98,26 +108,26 @@ return {
|
||||||
|
|
||||||
pickers
|
pickers
|
||||||
.new({}, {
|
.new({}, {
|
||||||
prompt_title = "Search Obsidian Aliases",
|
prompt_title = 'Search Obsidian (Alias & Filename)',
|
||||||
finder = finders.new_table({
|
finder = finders.new_table {
|
||||||
results = entries,
|
results = entries,
|
||||||
entry_maker = function(entry)
|
entry_maker = function(entry)
|
||||||
return {
|
return {
|
||||||
value = entry,
|
value = entry,
|
||||||
display = entry.display,
|
display = entry.display,
|
||||||
ordinal = entry.alias .. " " .. entry.filename,
|
ordinal = entry.ordinal,
|
||||||
path = entry.path,
|
path = entry.path,
|
||||||
}
|
}
|
||||||
end,
|
end,
|
||||||
}),
|
},
|
||||||
sorter = conf.generic_sorter({}),
|
sorter = conf.generic_sorter {},
|
||||||
previewer = conf.file_previewer({}),
|
previewer = conf.file_previewer {},
|
||||||
attach_mappings = function(prompt_bufnr, map)
|
attach_mappings = function(prompt_bufnr, map)
|
||||||
actions.select_default:replace(function()
|
actions.select_default:replace(function()
|
||||||
actions.close(prompt_bufnr)
|
actions.close(prompt_bufnr)
|
||||||
local selection = action_state.get_selected_entry()
|
local selection = action_state.get_selected_entry()
|
||||||
if selection then
|
if selection then
|
||||||
vim.cmd("edit " .. vim.fn.fnameescape(selection.path))
|
vim.cmd('edit ' .. vim.fn.fnameescape(selection.path))
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
return true
|
return true
|
||||||
|
|
@ -127,7 +137,7 @@ return {
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Set up keymaps
|
-- Set up keymaps
|
||||||
vim.keymap.set("n", "<leader>oa", search_by_alias, { desc = "[O]bsidian search by [A]lias" })
|
vim.keymap.set('n', '<leader>oa', search_by_alias, { desc = '[O]bsidian search by [A]lias' })
|
||||||
vim.keymap.set("n", "<leader>od", "<cmd>Obsidian today<cr>", { desc = "[O]bsidian [D]aily note (today)" })
|
vim.keymap.set('n', '<leader>od', '<cmd>Obsidian today<cr>', { desc = '[O]bsidian [D]aily note (today)' })
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue