zettelkasten.nvim/lua/zettelkasten/list.lua

48 lines
1.6 KiB
Lua
Raw Normal View History

local ls = {}
local o = require 'zettelkasten.options'
local function isDirectory(ftype)
2020-10-29 18:00:23 +00:00
if ftype == 'directory' then return true end
return false
end
2020-10-29 18:00:23 +00:00
-- TODO transform paths:
-- * to absolute value (e.g. ~ to home, scandir needs absolute)
-- * to ensure / at the end (or no /) gets taken into account
function ls.get_anchors_and_paths(path, recursive, options)
options = options or {}
2020-10-29 18:00:23 +00:00
-- TODO check for duplicates and warn user
local zettel = {}
-- TODO let user set as option, at least remove magic var
local anchorreg = '^.*/?([%d][%d][%d][%d][%d][%d][%d][%d][%d][%d])[^/]*%' ..
o.zettel().extension .. '$'
2020-10-29 18:00:23 +00:00
local handle = vim.loop.fs_scandir(path)
while handle do
local name, ftype = vim.loop.fs_scandir_next(handle)
if not name then break end
2020-10-29 18:00:23 +00:00
if isDirectory(ftype) and recursive then
local subdir = ls.get_anchors_and_paths(path .. "/" .. name, true)
for k, v in pairs(subdir) do zettel[tostring(k)] = v end
end
2020-10-29 18:00:23 +00:00
local anchor = string.match(name, anchorreg)
if anchor then zettel[tostring(anchor)] = name end
end
2020-10-29 18:00:23 +00:00
return zettel
end
2020-10-30 12:48:17 +00:00
-- Returns the path to the zettel defined by the anchor argument.
-- Take a list of zettel as an optional variable, without which
-- it will use the (recursive) results of the zettel_root directory.
function ls.get_zettel(anchor, all)
-- TODO why is there 'somepath' here?
if not all then all = ls.get_anchors_and_paths('/home/marty/documents/notes') end
2020-10-30 12:48:17 +00:00
return all[anchor]
end
return ls