1 -------------------------------------------------------------------------------
2 -- Tools to deal with notes
3 -------------------------------------------------------------------------------
6 local Util = require('util')
7 local Configuration = require('configuration')
9 -------------------------------------------------------------------------------
11 -------------------------------------------------------------------------------
12 local function open_or_create_from_template(type, file_path)
14 local journal_file = io.open(file_path, 'r')
15 if not journal_file then
16 local template_contents = Configuration.load_template(type)
18 journal_file = io.open(file_path, 'w')
19 journal_file:write(template_contents)
22 vim.cmd('edit ' .. file_path)
25 local function open_periodic_note(type, filename)
26 local file_directory_path = Configuration.path_for(Configuration.configuration.periodic_locations[type])
28 Util.ensure_directory_exists(file_directory_path)
29 local file_path = Util.join(file_directory_path, filename)
31 open_or_create_from_template(type, file_path)
34 -------------------------------------------------------------------------------
36 -------------------------------------------------------------------------------
38 --- Opens the daily note
39 function Notes.open_daily(date)
40 date = date or os.date('%Y-%m-%d')
41 local filename = date .. '.md'
42 open_periodic_note('daily', filename)
45 --- Opens the weekly note
46 function Notes.open_weekly()
47 local filename = os.date('%Y-w%V')
48 open_periodic_note('weekly', filename)
51 --- Opens the monthly note
52 function Notes.open_monthly()
53 local filename = os.date('%Y-%m') .. '.md'
54 open_periodic_note('monthly', filename)
57 --- Opens the seasonal note
58 function Notes.open_seasonal()
59 local year = os.date('%Y')
60 local month = tonumber(os.date('%m'))
61 local season = math.ceil(month / 3)
63 local filename = year .. '-s' .. season .. '.md'
64 open_periodic_note('seasonal', filename)
67 --- Opens the yearly note
68 function Notes.open_yearly()
69 local filename = os.date('%Y') .. '.md'
70 open_periodic_note('yearly', filename)
73 --- Opens an arbitrary note
75 local success, module = pcall(require, 'fzf-lua')
77 local notes_path = Configuration.path_for()
78 Util.ensure_directory_exists(notes_path)
79 module.files({ cwd = notes_path })
81 api.nvim_err_writeln('This feature requires optional dependency fzf-lua')