Search code examples
emacsorg-mode

emacs > org mode > agenda - always use current buffer


I am using many different org mode files for various projects, and I rev them by adding the date to the filename eg filename-2020-09-17.org. I realize I could use version control but in this case that is not possible, due to needing to share the file with others who are not using VC.

I would like the Agenda to always show just the items for the current file/buffer.

When I save eg the file with filename-2020-09-16.org to filename-2020-09-17.org, then the agenda still shows the old file name unless I remove it from the agenda file list and add the new file.

I realize that I can use C-c a < a but I am lazy and would rather not have to type S-, each time to get the <.

I looked at Agenda view of the current buffer

And the OP says the solution was simple but he/she/they did not provide the solution - at least I don't see it and I tried the posted code but it no works.

I also found https://www.reddit.com/r/orgmode/comments/bxwovd/agenda_for_current_buffer/ but that did not seem to meet my need.

Specifically I would like to put something in .emacs so that this would apply to all files all the time.

I also looked into a keystroke macro programs but this does not seem ideal.

Any help is appreciated.

Thanks ahead of time.


Solution

  • Here's a simple function to do what you want, but there is no error checking to make sure e.g. that you are invoking it from a buffer that is visiting an Org mode file. The idea is that you set the org-agenda-files list to contain just the file which the buffer is visiting and then you call the regular org-agenda function. Binding the modified function to the C-c a key may or may not be what you want to do, but you can try and decide for yourself:

    (defun org-agenda-current-buffer ()
       (interactive)
       (let ((org-agenda-files (list (buffer-file-name (current-buffer)))))
          (org-agenda)))
    
    (define-key global-map (kbd "C-c a") #'org-agenda-current-buffer)