emacs/var/elfeed/db/data/71/712cd2029557269cc80e52e6654c222507736148
2022-01-03 12:49:32 -06:00

171 lines
9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<p>Raw link: <a href="https://www.youtube.com/watch?v=UqtBXrzXPgQ">https://www.youtube.com/watch?v=UqtBXrzXPgQ</a></p>
<p>This video a demonstration of how to make use of the user option
<code>org-agenda-custom-commands</code> to produce bespoke agenda views that only
include the information one needs. It makes Org agenda buffers even
more powerful, esepcially if one wishes to have a consistent
presentation with specific types of content.</p>
<p>The configurations one may include are the same as those of the standard
agenda. One can keep a default value for each of those variables but
otherwise override it for the custom view[s]. A comprehensive list is
available in <a href="https://protesilaos.com/emacs/dotemacs">my dotemacs</a>,
specifically <a href="https://protesilaos.com/emacs/dotemacs#h:4e8347de-415e-4804-b383-d61499e05ca1">the section on Org mode</a>
(you may want to just clone my dotfiles repo instead of viewing the
corresponding webpagethe link to it is towards the top of the
dotemacs page).</p>
<p>Below I include the code I am currently using and was presented in the
video (note that this is valid as of 2021-12-09 14:36 +0200, but I may
change it afterwards):</p>
<pre><code class="language-elisp">;; This is the expanded view of my code (which is further below):
(setq org-agenda-custom-commands
`(("A" "Daily agenda and top priority tasks"
((tags-todo "*"
((org-agenda-skip-function '(org-agenda-skip-if nil '(timestamp)))
(org-agenda-skip-function
`(org-agenda-skip-entry-if
'notregexp ,(format "\\[#%s\\]" (char-to-string org-priority-highest))))
(org-agenda-block-separator nil)
(org-agenda-overriding-header "Important tasks without a date\n")))
(agenda "" ((org-agenda-span 1)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-scheduled-past-days 0)
;; We don't need the `org-agenda-date-today'
;; highlight because that only has a practical
;; utility in multi-day views.
(org-agenda-day-face-function (lambda (date) 'org-agenda-date))
(org-agenda-format-date "%A %-e %B %Y")
(org-agenda-overriding-header "\nToday's agenda\n")))
(agenda "" ((org-agenda-start-on-weekday nil)
(org-agenda-start-day "+1d")
(org-agenda-span 3)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "\nNext three days\n")))
(agenda "" ((org-agenda-time-grid nil)
(org-agenda-start-on-weekday nil)
;; We don't want to replicate the previous section's
;; three days, so we start counting from the day after.
(org-agenda-start-day "+4d")
(org-agenda-span 14)
(org-agenda-show-all-dates nil)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-agenda-entry-types '(:deadline))
(org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "\nUpcoming deadlines (+14d)\n")))))
("P" "Plain text daily agenda and top priorities"
((tags-todo "*"
((org-agenda-skip-function '(org-agenda-skip-if nil '(timestamp)))
(org-agenda-skip-function
`(org-agenda-skip-entry-if
'notregexp ,(format "\\[#%s\\]" (char-to-string org-priority-highest))))
(org-agenda-block-separator nil)
(org-agenda-overriding-header "Important tasks without a date\n")))
(agenda "" ((org-agenda-span 1)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-scheduled-past-days 0)
;; We don't need the `org-agenda-date-today'
;; highlight because that only has a practical
;; utility in multi-day views.
(org-agenda-day-face-function (lambda (date) 'org-agenda-date))
(org-agenda-format-date "%A %-e %B %Y")
(org-agenda-overriding-header "\nToday's agenda\n")))
(agenda "" ((org-agenda-start-on-weekday nil)
(org-agenda-start-day "+1d")
(org-agenda-span 3)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "\nNext three days\n")))
(agenda "" ((org-agenda-time-grid nil)
(org-agenda-start-on-weekday nil)
;; We don't want to replicate the previous section's
;; three days, so we start counting from the day after.
(org-agenda-start-day "+4d")
(org-agenda-span 14)
(org-agenda-show-all-dates nil)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-agenda-entry-types '(:deadline))
(org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "\nUpcoming deadlines (+14d)\n"))))
((org-agenda-with-colors nil)
(org-agenda-prefix-format "%t %s")
(org-agenda-current-time-string ,(car (last org-agenda-time-grid)))
(org-agenda-fontify-priorities nil)
(org-agenda-remove-tags t))
("agenda.txt"))))
;; And this is what I actually use. The `defvar' is stored in my
;; prot-org.el file. In the video I explain why I use this style.
(defvar prot-org-custom-daily-agenda
;; NOTE 2021-12-08: Specifying a match like the following does not
;; work.
;;
;; tags-todo "+PRIORITY=\"A\""
;;
;; So we match everything and then skip entries with
;; `org-agenda-skip-function'.
`((tags-todo "*"
((org-agenda-skip-function '(org-agenda-skip-if nil '(timestamp)))
(org-agenda-skip-function
`(org-agenda-skip-entry-if
'notregexp ,(format "\\[#%s\\]" (char-to-string org-priority-highest))))
(org-agenda-block-separator nil)
(org-agenda-overriding-header "Important tasks without a date\n")))
(agenda "" ((org-agenda-span 1)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-scheduled-past-days 0)
;; We don't need the `org-agenda-date-today'
;; highlight because that only has a practical
;; utility in multi-day views.
(org-agenda-day-face-function (lambda (date) 'org-agenda-date))
(org-agenda-format-date "%A %-e %B %Y")
(org-agenda-overriding-header "\nToday's agenda\n")))
(agenda "" ((org-agenda-start-on-weekday nil)
(org-agenda-start-day "+1d")
(org-agenda-span 3)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "\nNext three days\n")))
(agenda "" ((org-agenda-time-grid nil)
(org-agenda-start-on-weekday nil)
;; We don't want to replicate the previous section's
;; three days, so we start counting from the day after.
(org-agenda-start-day "+4d")
(org-agenda-span 14)
(org-agenda-show-all-dates nil)
(org-deadline-warning-days 0)
(org-agenda-block-separator nil)
(org-agenda-entry-types '(:deadline))
(org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
(org-agenda-overriding-header "\nUpcoming deadlines (+14d)\n"))))
"Custom agenda for use in `org-agenda-custom-commands'.")
(setq org-agenda-custom-commands
`(("A" "Daily agenda and top priority tasks"
,prot-org-custom-daily-agenda)
("P" "Plain text daily agenda and top priorities"
,prot-org-custom-daily-agenda
((org-agenda-with-colors nil)
(org-agenda-prefix-format "%t %s")
(org-agenda-current-time-string ,(car (last org-agenda-time-grid)))
(org-agenda-fontify-priorities nil)
(org-agenda-remove-tags t))
("agenda.txt"))))
</code></pre>