@@ -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' )
265268end
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 )
301308end
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+
303327return Calendar
0 commit comments