I've noticed that my agenda views get squashed (line breaks) when my window/frame resizes, e.g. when I move the Emacs frame to a smaller monitor. Is there a way/hook to automatically reload my open agendas (I usually have a daily view and a custom agenda command open sticky) in the background when the frame resizes? I couldn't quite find the right thing in the help menu.
1 Answer
You can detect a size change when you move the frame from one monitor to another by using window-size-change-functions
(see its doc string with C-h v window-size-change-functions
). Here's a simple example that prints a message out when that happens:
(defun wscf (obj)
(message (format "%S: size change" obj)))
(add-to-list 'window-size-change-functions #'wscf)
We define a function and then add it to the list. When the size changes, the functions in the list (in this case just wscf
) are called. This function produces a message that looks something like this:
#<frame [email protected]: *Messages* 0x19c11b0>: size change
Now all you have to do is modify the function to do what you want, for example:
(defun wscf (obj)
(org-agenda-redo 'all))
Now when the size changes, the new function is called which redoes the agenda. The argument to org-agenda-redo
causes it to rebuild all agenda views (it can be anything non-nil, so t
would work just as well).
-
Works like a charm, thank you! For other users interested: It does make it a bit stutter-y when you drag-resize a window, but is perfect for my use case (maximising, tiling window manager etc.).– ChilljaSep 1, 2022 at 19:40