Skip to content

Commit 070f758

Browse files
authored
feat(calendar): date jump (#542)
1 parent 12a669f commit 070f758

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

lua/orgmode/objects/calendar.lua

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ function Calendar.open()
8181
vim.keymap.set('n', '<', '<cmd>lua require("orgmode.objects.calendar").backward()<CR>', map_opts)
8282
vim.keymap.set('n', '<CR>', '<cmd>lua require("orgmode.objects.calendar").select()<CR>', map_opts)
8383
vim.keymap.set('n', '.', '<cmd>lua require("orgmode.objects.calendar").reset()<CR>', map_opts)
84+
vim.keymap.set('n', 'i', '<cmd>lua require("orgmode.objects.calendar").read_date()<CR>', map_opts)
8485
vim.keymap.set('n', 'q', ':call nvim_win_close(win_getid(), v:true)<CR>', map_opts)
8586
vim.keymap.set('n', '<Esc>', ':call nvim_win_close(win_getid(), v:true)<CR>', map_opts)
8687
if Calendar.clearable then
@@ -145,7 +146,9 @@ function Calendar.render()
145146
table.insert(content, ' [<] - prev month [>] - next month')
146147
table.insert(content, ' [.] - today [Enter] - select day')
147148
if Calendar.clearable then
148-
table.insert(content, ' [r] Clear date')
149+
table.insert(content, ' [i] - enter date [r] - clear date')
150+
else
151+
table.insert(content, ' [i] - enter date')
149152
end
150153

151154
vim.api.nvim_buf_set_lines(Calendar.buf, 0, -1, true, content)
@@ -264,7 +267,7 @@ function Calendar.reset()
264267
vim.fn.search(today:format('%d'), 'W')
265268
end
266269

267-
function Calendar.select()
270+
function Calendar.get_selected_date()
268271
local col = vim.fn.col('.')
269272
local char = vim.fn.getline('.'):sub(col, col)
270273
local day = vim.trim(vim.fn.expand('<cword>'))
@@ -274,7 +277,11 @@ function Calendar.select()
274277
return utils.echo_warning('Please select valid day number.', nil, false)
275278
end
276279
day = tonumber(day)
277-
local selected_date = Calendar.month:set({ day = day })
280+
return Calendar.month:set({ day = day })
281+
end
282+
283+
function Calendar.select()
284+
local selected_date = Calendar.get_selected_date()
278285
local cb = Calendar.callback
279286
Calendar.callback = nil
280287
vim.cmd([[echon]])
@@ -300,4 +307,21 @@ function Calendar.clear_date()
300307
cb(nil, true)
301308
end
302309

310+
function Calendar.read_date()
311+
vim.ui.input({ prompt = 'Enter date: ' }, function(result)
312+
if result then
313+
local date = Date.from_string(result)
314+
if not date then
315+
date = Calendar.get_selected_date():adjust(result)
316+
end
317+
318+
Calendar.date = date
319+
Calendar.month = date:set({ day = 1 })
320+
Calendar.render()
321+
vim.fn.cursor(2, 0)
322+
vim.fn.search(date:format('%d'), 'W')
323+
end
324+
end)
325+
end
326+
303327
return Calendar

0 commit comments

Comments
 (0)