aboutsummaryrefslogtreecommitdiff
path: root/lua/denote
diff options
context:
space:
mode:
authorHumanEntity <human_entity@icloud.com>2023-12-22 20:56:41 +0100
committerHumanEntity <human_entity@icloud.com>2023-12-22 20:56:41 +0100
commit26f605ecf08800850fd02c5fee6d2b74d7ceea64 (patch)
tree8fe1ec4d6918653b319f73f519c259637afa628f /lua/denote
downloadsimple-denote.nvim-26f605ecf08800850fd02c5fee6d2b74d7ceea64.tar.gz
Initial commit
Diffstat (limited to 'lua/denote')
-rw-r--r--lua/denote/config.lua13
-rw-r--r--lua/denote/init.lua84
-rw-r--r--lua/denote/util.lua93
3 files changed, 190 insertions, 0 deletions
diff --git a/lua/denote/config.lua b/lua/denote/config.lua
new file mode 100644
index 0000000..f6ec007
--- /dev/null
+++ b/lua/denote/config.lua
@@ -0,0 +1,13 @@
+local M = {
+ config = {
+ filename = {
+ ext = "norg",
+ date_sep = "_",
+ name_sep = "-",
+ tag_sep = "=",
+ },
+ vault_dir = "~/.denote/",
+ },
+}
+
+return M
diff --git a/lua/denote/init.lua b/lua/denote/init.lua
new file mode 100644
index 0000000..18f57c1
--- /dev/null
+++ b/lua/denote/init.lua
@@ -0,0 +1,84 @@
+local M = {}
+local U = require("denote.util")
+
+local function splitlines(str)
+ local result = {}
+ for line in string.gmatch(str .. "\n", "(.-)\n") do
+ table.insert(result, line)
+ end
+ return result
+end
+
+local function splitspace(str)
+ local chunks = {}
+ for substring in str:gmatch("%S+") do
+ table.insert(chunks, #chunks, substring)
+ end
+ return chunks
+end
+
+function M.note()
+ local name = ""
+ local tags = nil
+
+ vim.ui.input({ prompt = "Note name: " }, function(input)
+ name = input
+ end)
+
+ vim.ui.input({ prompt = "Enter tags: " }, function(input)
+ if input ~= "" then
+ tags = splitspace(input)
+ end
+ end)
+
+ U.note(name, tags)
+end
+
+function M.search()
+ local date = nil
+ local name = nil
+
+ vim.ui.input({ prompt = "Date: " }, function(input)
+ local split = splitspace(input)
+ if split[0] then
+ date = {}
+ date.year = split[0]
+ if split[1] then
+ date.month = split[1]
+ if split[2] then
+ date.day = split[2]
+ end
+ end
+ end
+ end)
+ vim.ui.input({ prompt = "Name: " }, function(input)
+ name = input
+ end)
+
+ local status = U.search(date, name, function(input)
+ if input then
+ vim.cmd("e " .. U.config.vault_dir .. "/" .. input)
+ end
+ if date then
+ print(date.year, " ", date.month, " ", date.day)
+ print("FSD")
+ end
+ end)
+ -- print(date)
+ -- if date then
+ -- print(date.year, " ", date.month, " ", date.day)
+ -- print("FSD")
+ -- end
+
+ if not status then
+ print("Error opening file")
+ end
+end
+
+function M.setup(config)
+ if config then
+ U.config = config
+ end
+end
+
+return M
diff --git a/lua/denote/util.lua b/lua/denote/util.lua
new file mode 100644
index 0000000..3bd7cec
--- /dev/null
+++ b/lua/denote/util.lua
@@ -0,0 +1,93 @@
+local M = require("denote.config")
+
+function M.file(name, tags)
+ local file = ""
+
+ local date = tostring(os.date("%Y%m%d"))
+
+ local tags_str = ""
+
+ if tags then
+ for i, tag in pairs(tags) do
+ tags_str = tags_str .. tag
+ if i == #tags - 1 then
+ tags_str = tags_str .. M.config.filename.tag_sep
+ end
+ end
+ end
+
+ file = date .. M.config.filename.date_sep .. M.config.filename.date_sep .. name
+ if tags then
+ file = file .. M.config.filename.name_sep .. M.config.filename.name_sep .. tags_str
+ end
+
+ return file .. "." .. M.config.filename.ext
+end
+
+function M.note(name, tags)
+ local filename = M.config.vault_dir .. M.file(name, tags)
+
+ -- Echo template
+
+ vim.cmd("!mkdir -p " .. M.config.vault_dir)
+ vim.cmd("e " .. filename)
+end
+
+function M.search(date, name, func)
+ local items = {}
+ local matcher = ""
+
+ if date then
+ if date.year then
+ matcher = date.year
+ else
+ matcher = "%d%d%d%d"
+ end
+ if date.month then
+ matcher = matcher .. date.month
+ else
+ matcher = "%d%d"
+ end
+ if date.day then
+ matcher = matcher .. date.day
+ else
+ matcher = "%d%d"
+ end
+
+ matcher = matcher .. M.config.filename.date_sep .. M.config.filename.date_sep
+ else
+ matcher = "%d+" .. M.config.filename.date_sep .. M.config.filename.date_sep
+ end
+
+ if name then
+ matcher = matcher .. name
+ else
+ matcher = matcher .. ".+"
+ end
+
+ -- matcher = matcher .. M.config.filename.name_sep .. "?" .. M.config.filename.name_sep .. "?" .. ".-"
+
+ for file in io.popen("ls " .. M.config.vault_dir):lines() do
+ local matched = file:match(matcher)
+
+ if matched then
+ print("file " .. file)
+ items[#items + 1] = file
+ end
+ end
+
+ if not items or #items == 0 then
+ return nil
+ end
+
+ vim.ui.select(items, {
+ prompt = "Select note",
+ -- format_item = function(item)
+ -- return "" .. item
+ -- end,
+ }, func)
+
+ return true
+end
+
+return M