167 lines
9 KiB
Plaintext
167 lines
9 KiB
Plaintext
<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 webpage–the 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> |