aboutsummaryrefslogtreecommitdiff
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
downloadsimple-denote.nvim-26f605ecf08800850fd02c5fee6d2b74d7ceea64.tar.gz
Initial commit
-rw-r--r--LICENSE21
-rw-r--r--README.norg2
-rw-r--r--lua/denote/config.lua13
-rw-r--r--lua/denote/init.lua84
-rw-r--r--lua/denote/util.lua93
5 files changed, 213 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8aa2645
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) [year] [fullname]
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.norg b/README.norg
new file mode 100644
index 0000000..6aee588
--- /dev/null
+++ b/README.norg
@@ -0,0 +1,2 @@
+* `denote.nvim`
+ `denote.nvim` is a plugins for creating notes without any external dependencies. Main inspiration for this project was emacs package called `Denote`.
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