Skip to content

Commit 831a6e2

Browse files
committed
Restrict cursor movement in calendar
1 parent f339a7f commit 831a6e2

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

lua/orgmode/objects/calendar.lua

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ function Calendar.open()
5555
vim.api.nvim_buf_set_var(Calendar.buf, 'indent_blankline_enabled', false)
5656
vim.api.nvim_buf_set_option(Calendar.buf, 'bufhidden', 'wipe')
5757

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>')
5862
utils.buf_keymap(Calendar.buf, 'n', '>', '<cmd>lua require("orgmode.objects.calendar").forward()<CR>')
5963
utils.buf_keymap(Calendar.buf, 'n', '<', '<cmd>lua require("orgmode.objects.calendar").backward()<CR>')
6064
utils.buf_keymap(Calendar.buf, 'n', '<CR>', '<cmd>lua require("orgmode.objects.calendar").select()<CR>')
@@ -134,6 +138,74 @@ function Calendar.backward()
134138
vim.fn.search([[\d\d]], 'b')
135139
end
136140

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+
137209
function Calendar.reset()
138210
local today = Calendar.month:set_todays_date()
139211
Calendar.month = today:set({ day = 1 })

0 commit comments

Comments
 (0)