@@ -81,6 +81,7 @@ function Calendar.open()
81
81
vim .keymap .set (' n' , ' <' , ' <cmd>lua require("orgmode.objects.calendar").backward()<CR>' , map_opts )
82
82
vim .keymap .set (' n' , ' <CR>' , ' <cmd>lua require("orgmode.objects.calendar").select()<CR>' , map_opts )
83
83
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 )
84
85
vim .keymap .set (' n' , ' q' , ' :call nvim_win_close(win_getid(), v:true)<CR>' , map_opts )
85
86
vim .keymap .set (' n' , ' <Esc>' , ' :call nvim_win_close(win_getid(), v:true)<CR>' , map_opts )
86
87
if Calendar .clearable then
@@ -145,7 +146,9 @@ function Calendar.render()
145
146
table.insert (content , ' [<] - prev month [>] - next month' )
146
147
table.insert (content , ' [.] - today [Enter] - select day' )
147
148
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' )
149
152
end
150
153
151
154
vim .api .nvim_buf_set_lines (Calendar .buf , 0 , - 1 , true , content )
@@ -264,7 +267,7 @@ function Calendar.reset()
264
267
vim .fn .search (today :format (' %d' ), ' W' )
265
268
end
266
269
267
- function Calendar .select ()
270
+ function Calendar .get_selected_date ()
268
271
local col = vim .fn .col (' .' )
269
272
local char = vim .fn .getline (' .' ):sub (col , col )
270
273
local day = vim .trim (vim .fn .expand (' <cword>' ))
@@ -274,7 +277,11 @@ function Calendar.select()
274
277
return utils .echo_warning (' Please select valid day number.' , nil , false )
275
278
end
276
279
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 ()
278
285
local cb = Calendar .callback
279
286
Calendar .callback = nil
280
287
vim .cmd ([[ echon]] )
@@ -300,4 +307,21 @@ function Calendar.clear_date()
300
307
cb (nil , true )
301
308
end
302
309
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
+
303
327
return Calendar
0 commit comments