diff options
| -rw-r--r-- | LICENSE | 21 | ||||
| -rw-r--r-- | README.norg | 2 | ||||
| -rw-r--r-- | lua/denote/config.lua | 13 | ||||
| -rw-r--r-- | lua/denote/init.lua | 84 | ||||
| -rw-r--r-- | lua/denote/util.lua | 93 |
5 files changed, 213 insertions, 0 deletions
@@ -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 |
