@@ -164,11 +164,12 @@ function Calendar:open()
164
164
vim .keymap .set (' n' , ' t' , function ()
165
165
self :set_time ()
166
166
end , map_opts )
167
- if self :has_time () then
168
- vim .keymap .set (' n' , ' T' , function ()
169
- self :clear_time ()
170
- end , map_opts )
171
- end
167
+ vim .keymap .set (' n' , ' T' , function ()
168
+ self :clear_time ()
169
+ end , map_opts )
170
+ vim .keymap .set (' n' , ' d' , function ()
171
+ self :set_day ()
172
+ end , map_opts )
172
173
self :jump_day ()
173
174
return Promise .new (function (resolve )
174
175
self .callback = resolve
@@ -235,8 +236,8 @@ function Calendar:render()
235
236
table.insert (content , ' [i] - enter date' )
236
237
end
237
238
238
- if self :has_time () or self . select_state ~= SelState . DAY then
239
- if self . select_state == SelState . DAY then
239
+ if self :has_time () or self : _time_picker_active () then
240
+ if not self : _time_picker_active () then
240
241
table.insert (content , ' [t] - enter time [T] - clear time' )
241
242
else
242
243
table.insert (content , ' [d] - select day [T] - clear time' )
@@ -345,17 +346,10 @@ function Calendar:rerender_time()
345
346
vim .api .nvim_set_option_value (' modifiable' , true , { buf = self .buf })
346
347
vim .api .nvim_buf_set_lines (self .buf , 8 , 9 , true , { self :render_time () })
347
348
if self :has_time () then
348
- local map_opts = { buffer = self .buf , silent = true , nowait = true }
349
- vim .keymap .set (' n' , ' T' , function ()
350
- self :clear_time ()
351
- end , map_opts )
352
- vim .keymap .set (' n' , ' d' , function ()
353
- self :set_day ()
354
- end , map_opts )
355
- if self .select_state == SelState .DAY then
356
- vim .api .nvim_buf_set_lines (self .buf , 13 , 14 , true , { ' [t] - select day [T] - clear time' })
357
- else
349
+ if self :_time_picker_active () then
358
350
vim .api .nvim_buf_set_lines (self .buf , 13 , 14 , true , { ' [d] - select day [T] - clear time' })
351
+ else
352
+ vim .api .nvim_buf_set_lines (self .buf , 13 , 14 , true , { ' [t] - enter time [T] - clear time' })
359
353
end
360
354
self :_apply_hl (' Normal' , 8 , 0 , - 1 )
361
355
self :_apply_hl (' Comment' , 13 , 0 , - 1 )
373
367
374
368
--- @private
375
369
function Calendar :_ensure_day ()
376
- if self . select_state ~= SelState . DAY then
370
+ if self : _time_picker_active () then
377
371
self :set_day ()
378
372
end
379
373
end
@@ -397,7 +391,7 @@ function Calendar:backward()
397
391
end
398
392
399
393
function Calendar :cursor_right ()
400
- if self . select_state ~= SelState . DAY then
394
+ if self : _time_picker_active () then
401
395
if self .select_state == SelState .HOUR then
402
396
self :set_min_big ()
403
397
elseif self .select_state == SelState .MIN_BIG then
@@ -420,7 +414,7 @@ function Calendar:cursor_right()
420
414
end
421
415
422
416
function Calendar :cursor_left ()
423
- if self . select_state ~= SelState . DAY then
417
+ if self : _time_picker_active () then
424
418
if self .select_state == SelState .HOUR then
425
419
self :set_min_small ()
426
420
elseif self .select_state == SelState .MIN_BIG then
@@ -443,7 +437,7 @@ function Calendar:cursor_left()
443
437
end
444
438
445
439
function Calendar :beginning ()
446
- if self . select_state ~= SelState . DAY then
440
+ if self : _time_picker_active () then
447
441
return
448
442
end
449
443
local line = vim .fn .line (' .' )
@@ -453,7 +447,7 @@ function Calendar:beginning()
453
447
end
454
448
455
449
function Calendar :ending ()
456
- if self . select_state ~= SelState . DAY then
450
+ if self : _time_picker_active () then
457
451
return
458
452
end
459
453
local line = vim .fn .line (' .' )
@@ -495,7 +489,7 @@ local function step_hour(direction, current, count)
495
489
end
496
490
497
491
function Calendar :cursor_up ()
498
- if self . select_state ~= SelState . DAY then
492
+ if self : _time_picker_active () then
499
493
-- to avoid unexpectedly changing the day we cache it ...
500
494
local day = self .date .day
501
495
if self .select_state == SelState .HOUR then
@@ -537,7 +531,7 @@ function Calendar:cursor_up()
537
531
end
538
532
539
533
function Calendar :cursor_down ()
540
- if self . select_state ~= SelState . DAY then
534
+ if self : _time_picker_active () then
541
535
local day = self .date .day
542
536
if self .select_state == SelState .HOUR then
543
537
self .date = self .date :subtract (step_hour (' down' , self .date , vim .v .count1 ))
586
580
587
581
--- @return OrgDate ?
588
582
function Calendar :get_selected_date ()
589
- if self . select_state ~= SelState . DAY then
583
+ if self : _time_picker_active () then
590
584
return self .date
591
585
end
592
586
local col = vim .fn .col (' .' )
608
602
609
603
function Calendar :select ()
610
604
local selected_date
611
- if self . select_state == SelState . DAY then
605
+ if not self : _time_picker_active () then
612
606
selected_date = self :get_selected_date ()
613
607
else
614
608
selected_date = self .date :set ({
@@ -670,17 +664,22 @@ function Calendar:set_time()
670
664
if self .date .date_only then
671
665
self .date = self .date :set ({ date_only = false }):set_current_time ()
672
666
end
673
- -- self:rerender_time()
674
667
self :set_sel_hour ()
675
668
self :render () -- because we want to highlight the currently selected date, we have to render everything
676
669
end
677
670
678
671
function Calendar :set_day ()
672
+ if not self :_time_picker_active () then
673
+ return
674
+ end
679
675
self :set_sel_day ()
680
676
self :rerender_time ()
681
677
end
682
678
683
679
function Calendar :clear_time ()
680
+ if not self :has_time () then
681
+ return
682
+ end
684
683
self .date = self .date :set ({ hour = 0 , min = 0 , date_only = true })
685
684
self :set_sel_day ()
686
685
self :rerender_time ()
@@ -712,4 +711,8 @@ function Calendar:jump_day()
712
711
vim .fn .search (search_day , ' W' )
713
712
end
714
713
714
+ function Calendar :_time_picker_active ()
715
+ return self .select_state ~= SelState .DAY
716
+ end
717
+
715
718
return Calendar
0 commit comments