@@ -55,6 +55,10 @@ function Calendar.open()
55
55
vim .api .nvim_buf_set_var (Calendar .buf , ' indent_blankline_enabled' , false )
56
56
vim .api .nvim_buf_set_option (Calendar .buf , ' bufhidden' , ' wipe' )
57
57
58
+ utils .buf_keymap (Calendar .buf , ' n' , ' j' , ' <cmd>lua require("orgmode.objects.calendar").cursor_down()<cr>' )
59
+ utils .buf_keymap (Calendar .buf , ' n' , ' k' , ' <cmd>lua require("orgmode.objects.calendar").cursor_up()<cr>' )
60
+ utils .buf_keymap (Calendar .buf , ' n' , ' h' , ' <cmd>lua require("orgmode.objects.calendar").cursor_left()<cr>' )
61
+ utils .buf_keymap (Calendar .buf , ' n' , ' l' , ' <cmd>lua require("orgmode.objects.calendar").cursor_right()<cr>' )
58
62
utils .buf_keymap (Calendar .buf , ' n' , ' >' , ' <cmd>lua require("orgmode.objects.calendar").forward()<CR>' )
59
63
utils .buf_keymap (Calendar .buf , ' n' , ' <' , ' <cmd>lua require("orgmode.objects.calendar").backward()<CR>' )
60
64
utils .buf_keymap (Calendar .buf , ' n' , ' <CR>' , ' <cmd>lua require("orgmode.objects.calendar").select()<CR>' )
@@ -134,6 +138,74 @@ function Calendar.backward()
134
138
vim .fn .search ([[ \d\d]] , ' b' )
135
139
end
136
140
141
+ function Calendar .cursor_right ()
142
+ for i = 1 , vim .v .count1 do
143
+ local line , col = vim .fn .line (' .' ), vim .fn .col (' .' )
144
+ local curr_line = vim .fn .getline (' .' )
145
+ local offset = curr_line :sub (col + 1 , # curr_line ):find (' %d%d' )
146
+ if offset ~= nil then
147
+ vim .fn .cursor (line , col + offset )
148
+ end
149
+ end
150
+ end
151
+
152
+ function Calendar .cursor_left ()
153
+ for i = 1 , vim .v .count1 do
154
+ local line , col = vim .fn .line (' .' ), vim .fn .col (' .' )
155
+ local curr_line = vim .fn .getline (' .' )
156
+ local _ , offset = curr_line :sub (1 , col - 1 ):find (' .*%d%d' )
157
+ if offset ~= nil then
158
+ vim .fn .cursor (line , offset )
159
+ end
160
+ end
161
+ end
162
+
163
+ function Calendar .cursor_up ()
164
+ for i = 1 , vim .v .count1 do
165
+ local line , col = vim .fn .line (' .' ), vim .fn .col (' .' )
166
+ if line > 9 then
167
+ vim .fn .cursor (line - 1 , col )
168
+ return
169
+ end
170
+
171
+ local prev_line = vim .fn .getline (line - 1 )
172
+ local first_num = prev_line :find (' %d%d' )
173
+ if first_num == nil then
174
+ return
175
+ end
176
+
177
+ if first_num > col then
178
+ move_to = first_num
179
+ else
180
+ move_to = col
181
+ end
182
+ vim .fn .cursor (line - 1 , move_to )
183
+ end
184
+ end
185
+
186
+ function Calendar .cursor_down ()
187
+ for i = 1 , vim .v .count1 do
188
+ local line , col = vim .fn .line (' .' ), vim .fn .col (' .' )
189
+ if line <= 1 then
190
+ vim .fn .cursor (line + 1 , col )
191
+ return
192
+ end
193
+
194
+ local next_line = vim .fn .getline (line + 1 )
195
+ local _ , last_num = next_line :find (' .*%d%d' )
196
+ if last_num == nil then
197
+ return
198
+ end
199
+
200
+ if last_num < col then
201
+ move_to = last_num
202
+ else
203
+ move_to = col
204
+ end
205
+ vim .fn .cursor (line + 1 , move_to )
206
+ end
207
+ end
208
+
137
209
function Calendar .reset ()
138
210
local today = Calendar .month :set_todays_date ()
139
211
Calendar .month = today :set ({ day = 1 })
0 commit comments