update file search

This commit is contained in:
jujekebab 2026-01-21 19:16:54 +09:00
parent a4e786a2bd
commit a970084b32
1 changed files with 55 additions and 45 deletions

View File

@ -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,
} }