@@ -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,76 @@ 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
+ local move_to
178
+ if first_num > col then
179
+ move_to = first_num
180
+ else
181
+ move_to = col
182
+ end
183
+ vim .fn .cursor (line - 1 , move_to )
184
+ end
185
+ end
186
+
187
+ function Calendar .cursor_down ()
188
+ for i = 1 , vim .v .count1 do
189
+ local line , col = vim .fn .line (' .' ), vim .fn .col (' .' )
190
+ if line <= 1 then
191
+ vim .fn .cursor (line + 1 , col )
192
+ return
193
+ end
194
+
195
+ local next_line = vim .fn .getline (line + 1 )
196
+ local _ , last_num = next_line :find (' .*%d%d' )
197
+ if last_num == nil then
198
+ return
199
+ end
200
+
201
+ local move_to
202
+ if last_num < col then
203
+ move_to = last_num
204
+ else
205
+ move_to = col
206
+ end
207
+ vim .fn .cursor (line + 1 , move_to )
208
+ end
209
+ end
210
+
137
211
function Calendar .reset ()
138
212
local today = Calendar .month :set_todays_date ()
139
213
Calendar .month = today :set ({ day = 1 })
0 commit comments