diff --git a/lua/orgmode/objects/calendar.lua b/lua/orgmode/objects/calendar.lua
index 8a440ae84..7c3f4d907 100644
--- a/lua/orgmode/objects/calendar.lua
+++ b/lua/orgmode/objects/calendar.lua
@@ -130,6 +130,12 @@ function Calendar:open()
vim.keymap.set('n', '', function()
return self:cursor_left()
end, map_opts)
+ vim.keymap.set('n', '0', function()
+ return self:beginning()
+ end, map_opts)
+ vim.keymap.set('n', '$', function()
+ return self:ending()
+ end, map_opts)
vim.keymap.set('n', '', function()
return self:cursor_right()
end, map_opts)
@@ -436,6 +442,27 @@ function Calendar:cursor_left()
self:render()
end
+function Calendar:beginning()
+ if self.select_state ~= SelState.DAY then
+ return
+ end
+ local line = vim.fn.line('.')
+ vim.fn.cursor(line, vim.fn.getline('.'):match('^%s*'):len() + 1)
+ self.date = self:get_selected_date()
+ self:render()
+end
+
+function Calendar:ending()
+ if self.select_state ~= SelState.DAY then
+ return
+ end
+ local line = vim.fn.line('.')
+ local line_no_trailing_space = vim.fn.getline('.'):gsub('%s*$', '')
+ vim.fn.cursor(line, line_no_trailing_space:len())
+ self.date = self:get_selected_date()
+ self:render()
+end
+
---@param direction string
---@param step_size number
---@param current number