Refactor options to separate file
Options were previously set ad-hoc in the initialize function, but re-set and overwritten at various places. Options now live in one central module (options.lua), where they directly access the neovim options set, and re-access them on any run. That means options can be changed while the plugin is running and it will use their newer versions, without requiring any re-initialization.
This commit is contained in:
parent
e96b454b23
commit
ece30350c2
6 changed files with 106 additions and 41 deletions
|
@ -1,18 +1,7 @@
|
||||||
local ZK = {}
|
local ZK = {}
|
||||||
|
|
||||||
local ls = require 'zettelkasten.list'
|
local ls = require 'zettelkasten.list'
|
||||||
|
local o = require 'zettelkasten.options'
|
||||||
function ZK.init(vimapi)
|
|
||||||
vim = vimapi or vim
|
|
||||||
ZK.options = {
|
|
||||||
anchor_separator = vim.g["zettel_anchor_separator"] or
|
|
||||||
vim.b["zettel_anchor_separator"] or "_",
|
|
||||||
zettel_extension = vim.g["zettel_extension"] or
|
|
||||||
vim.b["zettel_extension"] or ".md"
|
|
||||||
-- zettel_root = vim.g["zettel_root"] or vim.b["zettel_root"] or "~/documents/notes",
|
|
||||||
-- TODO zettel_anchor_pattern = regex? -> needs custom creation function in `create_anchor`
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
-- entrypoint for pressing the zettel key when the cursor
|
-- entrypoint for pressing the zettel key when the cursor
|
||||||
-- is either on an existing link (it will then
|
-- is either on an existing link (it will then
|
||||||
|
@ -42,15 +31,13 @@ end
|
||||||
-- and the text cleaned up to be useful in a link.
|
-- and the text cleaned up to be useful in a link.
|
||||||
function ZK.create_link(text, date)
|
function ZK.create_link(text, date)
|
||||||
text = text or ""
|
text = text or ""
|
||||||
local o = ZK.options
|
|
||||||
if text == "" then
|
if text == "" then
|
||||||
text = "" .. ZK.create_anchor(date)
|
text = "" .. ZK.create_anchor(date)
|
||||||
else
|
else
|
||||||
text = text:lower():gsub(" ", "-")
|
text = text:lower():gsub(" ", "-")
|
||||||
text = "" .. ZK.create_anchor(date) .. (o.anchor_separator or "_") ..
|
text = "" .. ZK.create_anchor(date) .. o.anchor().separator .. text
|
||||||
text
|
|
||||||
end
|
end
|
||||||
return text .. (o.zettel_extension or ".md")
|
return text .. o.zettel().extension
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Returns all zettel in path as a
|
-- Returns all zettel in path as a
|
||||||
|
@ -62,7 +49,6 @@ function ZK.get_zettel_list(path, recursive)
|
||||||
end
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
init = ZK.init,
|
|
||||||
zettel_link_create = ZK.zettel_link_create,
|
zettel_link_create = ZK.zettel_link_create,
|
||||||
create_anchor = ZK.create_anchor,
|
create_anchor = ZK.create_anchor,
|
||||||
create_link = ZK.create_link,
|
create_link = ZK.create_link,
|
||||||
|
|
|
@ -2,7 +2,8 @@ ZK = require 'zettelkasten.init'
|
||||||
Test_date = {year = 2019, month = 10, day = 29, hour = 16, min = 45}
|
Test_date = {year = 2019, month = 10, day = 29, hour = 16, min = 45}
|
||||||
|
|
||||||
describe("Zettelkasten", function()
|
describe("Zettelkasten", function()
|
||||||
before_each(function() ZK.init({g = {}, b = {}}) end)
|
before_each(function() _G.vim = {g = {}, b = {}} end)
|
||||||
|
after_each(function() _G.vim = nil end)
|
||||||
|
|
||||||
describe("anchor creation", function()
|
describe("anchor creation", function()
|
||||||
it("should return zettel anchor from time passed in", function()
|
it("should return zettel anchor from time passed in", function()
|
||||||
|
@ -42,21 +43,29 @@ describe("Zettelkasten", function()
|
||||||
ZK.create_link("yes indeed a space", Test_date))
|
ZK.create_link("yes indeed a space", Test_date))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it(
|
it("should add contents of g:zettel_anchor_separator variable to link",
|
||||||
"should place the contents of g:zettel_anchor_separator variable in link",
|
function()
|
||||||
function()
|
vim.g.zettel_anchor_separator = "SEP"
|
||||||
vim = {g = {zettel_anchor_separator = "SEP"}, b = {}}
|
assert.same("1910291645SEParated.md",
|
||||||
ZK.init(vim)
|
ZK.create_link("arated", Test_date))
|
||||||
assert.same("1910291645SEParated.md",
|
end)
|
||||||
ZK.create_link("arated", Test_date))
|
it("should add contents of b:zettel_anchor_separator variable to link",
|
||||||
end)
|
function()
|
||||||
|
vim.b.zettel_anchor_separator = "---"
|
||||||
|
assert.same("1910291645---arated.md",
|
||||||
|
ZK.create_link("arated", Test_date))
|
||||||
|
end)
|
||||||
|
|
||||||
it("should append the filetype set in g:zettel_extension", function()
|
it("should append the filetype set in g:zettel_extension", function()
|
||||||
vim = {g = {zettel_extension = ".something"}, b = {}}
|
vim.g.zettel_extension = ".something"
|
||||||
ZK.init(vim)
|
|
||||||
assert.same("1910291645_theworld.something",
|
assert.same("1910291645_theworld.something",
|
||||||
ZK.create_link("theworld", Test_date))
|
ZK.create_link("theworld", Test_date))
|
||||||
end)
|
end)
|
||||||
|
it("should append the filetype set in b:zettel_extension", function()
|
||||||
|
vim.b.zettel_extension = ".somethingelse"
|
||||||
|
assert.same("1910291645_theworld.somethingelse",
|
||||||
|
ZK.create_link("theworld", Test_date))
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -35,8 +35,11 @@ end
|
||||||
-- Take a list of zettel as an optional variable, without which
|
-- Take a list of zettel as an optional variable, without which
|
||||||
-- it will use the (recursive) results of the zettel_root directory.
|
-- it will use the (recursive) results of the zettel_root directory.
|
||||||
function ls.get_zettel(anchor, all)
|
function ls.get_zettel(anchor, all)
|
||||||
|
if not all then all = ls.get_anchors_and_paths('somepath') end
|
||||||
|
|
||||||
return all[anchor]
|
return all[anchor]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ls.open_zettel(anchor, all) end
|
||||||
|
|
||||||
return ls
|
return ls
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
ls = require'zettelkasten.list'
|
local ls = require 'zettelkasten.list'
|
||||||
-- these tests, I suppose, only work on unix due to the file structure
|
-- these tests, I suppose, only work on unix due to the file structure
|
||||||
|
|
||||||
local function simple_api_mock(files)
|
local function simple_api_mock(files)
|
||||||
|
@ -13,20 +13,14 @@ local function simple_api_mock(files)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
fs_scandir_next = function()
|
fs_scandir_next = function() return table.remove(files) end
|
||||||
return table.remove(files)
|
|
||||||
end
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
describe("get_anchors_and_paths", function()
|
describe("get_anchors_and_paths", function()
|
||||||
before_each(function()
|
before_each(function() get_api_mock = simple_api_mock end)
|
||||||
get_api_mock = simple_api_mock
|
after_each(function() _G.vim = nil end)
|
||||||
end)
|
|
||||||
after_each(function()
|
|
||||||
_G.vim = nil
|
|
||||||
end)
|
|
||||||
|
|
||||||
it("should return anchor-keyed table pointing to filename of zettel",
|
it("should return anchor-keyed table pointing to filename of zettel",
|
||||||
function()
|
function()
|
||||||
|
@ -136,19 +130,37 @@ describe("get_anchors_and_paths", function()
|
||||||
["2345678901"] = "2345678901 another.wiki"
|
["2345678901"] = "2345678901 another.wiki"
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.same(expected, ls.get_anchors_and_paths('mydirectory', false, vim.g))
|
assert.same(expected,
|
||||||
|
ls.get_anchors_and_paths('mydirectory', false, vim.g))
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("should default to the zettel root dir",
|
||||||
|
function() pending("not implemented") end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe("get_zettel", function()
|
describe("get_zettel", function()
|
||||||
it("should return the correct zettel by id", function()
|
it("should return the correct zettel by id", function()
|
||||||
local file_list = {
|
local file_list = {
|
||||||
["1910291645"] = "1910291645 myfile.md",
|
["1910291645"] = "1910291645 myfile.md",
|
||||||
["2345678901"] = "2345678901 another.md",
|
["2345678901"] = "2345678901 another.md"
|
||||||
}
|
}
|
||||||
_G.vim = simple_api_mock(file_list)
|
_G.vim = simple_api_mock(file_list)
|
||||||
|
|
||||||
assert.same("1910291645 myfile.md", ls.get_zettel("1910291645", file_list))
|
assert.same("1910291645 myfile.md",
|
||||||
|
ls.get_zettel("1910291645", file_list))
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("should default to the zettel root dir if no list passed in", function()
|
||||||
|
local file_list = {"1910291645 myfile.wiki", "2345678901 another.wiki"}
|
||||||
|
_G.vim = simple_api_mock(file_list)
|
||||||
|
|
||||||
|
pending("not implemented")
|
||||||
|
assert.same("1910291645 myfile.wiki", ls.get_zettel("1910291645"))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe("open_zettel", function()
|
||||||
|
it("should set the current buffer to the zettel passed in as anchor",
|
||||||
|
function() pending("not implemented") end)
|
||||||
|
end)
|
||||||
|
|
24
lua/zettelkasten/options.lua
Normal file
24
lua/zettelkasten/options.lua
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
local Opt = {}
|
||||||
|
|
||||||
|
-- setting defaults
|
||||||
|
local ZETTEL_EXTENSION = ".md"
|
||||||
|
local ANCHOR_SEPARATOR = "_"
|
||||||
|
-- TODO zettel_root = vim.g["zettel_root"] or vim.b["zettel_root"] or "~/documents/notes",
|
||||||
|
-- TODO zettel_anchor_pattern = regex? -> needs custom creation function in `create_anchor`
|
||||||
|
|
||||||
|
function Opt.zettel()
|
||||||
|
local options = {}
|
||||||
|
options.extension =
|
||||||
|
vim.g["zettel_extension"] or vim.b["zettel_extension"] or
|
||||||
|
ZETTEL_EXTENSION
|
||||||
|
return options
|
||||||
|
end
|
||||||
|
|
||||||
|
function Opt.anchor()
|
||||||
|
local options = {}
|
||||||
|
options.separator = vim.g["zettel_anchor_separator"] or
|
||||||
|
vim.b["zettel_anchor_separator"] or ANCHOR_SEPARATOR
|
||||||
|
return options
|
||||||
|
end
|
||||||
|
|
||||||
|
return Opt
|
31
lua/zettelkasten/options_spec.lua
Normal file
31
lua/zettelkasten/options_spec.lua
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
local opt = require 'zettelkasten.options'
|
||||||
|
|
||||||
|
before_each(function() _G.vim = {g = {}, b = {}} end)
|
||||||
|
after_each(function() _G.vim = nil end)
|
||||||
|
|
||||||
|
describe("zettel options", function()
|
||||||
|
|
||||||
|
it("should return the global zettel extension if set in vim", function()
|
||||||
|
_G.vim.g.zettel_extension = ".myextension"
|
||||||
|
assert.same(".myextension", opt.zettel().extension)
|
||||||
|
end)
|
||||||
|
it("should return the buffer zettel extension if set in vim", function()
|
||||||
|
_G.vim.b.zettel_extension = ".mybufextension"
|
||||||
|
assert.same(".mybufextension", opt.zettel().extension)
|
||||||
|
end)
|
||||||
|
it("should return the default zettel extension if not set in vim",
|
||||||
|
function() assert.same(".md", opt.zettel().extension) end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
describe("zettel options", function()
|
||||||
|
it("should return the global anchor separator if set in vim", function()
|
||||||
|
_G.vim.g.zettel_anchor_separator = "SEPARATE"
|
||||||
|
assert.same("SEPARATE", opt.anchor().separator)
|
||||||
|
end)
|
||||||
|
it("should return the buffer anchor separator if set in vim", function()
|
||||||
|
_G.vim.b.zettel_anchor_separator = "--"
|
||||||
|
assert.same("--", opt.anchor().separator)
|
||||||
|
end)
|
||||||
|
it("should return the default anchor separator if not set in vim",
|
||||||
|
function() assert.same("_", opt.anchor().separator) end)
|
||||||
|
end)
|
Loading…
Reference in a new issue