Remove references to prot-org

I will copy over everything from my own config as and when I need it.
This commit is contained in:
Vedang Manerikar 2024-11-17 19:36:38 +05:30
parent 03024fa9d4
commit 416d8242c2
2 changed files with 176 additions and 582 deletions

View file

@ -3357,9 +3357,6 @@ done at a specific time, such as coaching sessions ([[#h:f8f06938-0dfe-45c3-b4cf
(with-eval-after-load 'org-agenda
(appt-activate 1)
;; NOTE 2021-12-07: In my `prot-org.el' (see further below), I add
;; `org-agenda-to-appt' to various relevant hooks.
;;
;; Create reminders for tasks with a due date when this file is read.
(org-agenda-to-appt)))
#+end_src
@ -3433,14 +3430,8 @@ on how I use Org.
:map narrow-map
("b" . org-narrow-to-block)
("e" . org-narrow-to-element)
("s" . org-narrow-to-subtree)
:map ctl-x-x-map
("i" . prot-org-id-headlines)
("h" . prot-org-ox-html))
("s" . org-narrow-to-subtree))
:config
;; My custom extras, which I use for the agenda and a few other Org features.
(require 'prot-org)
;;;; general settings
(setq org-ellipsis "⮧")
(setq org-adapt-indentation nil) ; No, non, nein, όχι!
@ -3555,10 +3546,6 @@ the capture phase ([[#h:f8f06938-0dfe-45c3-b4cf-996d36cba82d][The =unravel-org.e
(setq org-refile-allow-creating-parent-nodes 'confirm)
(setq org-refile-use-cache t)
(setq org-reverse-note-order nil)
;; ;; NOTE 2023-04-07: Leaving this here for demo purposes.
;; (setq org-todo-keywords
;; '((sequence "TODO(t)" "MAYBE(m)" "WAIT(w@/!)" "|" "CANCEL(c@)" "DONE(d!)")
;; (sequence "COACH(k)" "|" "COACHED(K!)")))
(setq org-todo-keywords
'((sequence "TODO(t)" "|" "CANCEL(c@)" "DONE(d!)")))
@ -3639,6 +3626,7 @@ mistakes or figure out intent in the absence of further clarification
:CUSTOM_ID: h:da8ce883-7f21-4a6e-a41f-d668ad762b41
:END:
#+begin_quote
One of the nice things about Org is its flexible linking mechanism. It
can produce links to a variety of file types or buffers and even
navigate to a section therein.
@ -3650,30 +3638,7 @@ file, as documented in the manual. Evaluate this inside of Emacs:
#+begin_example emacs-lisp
(info "(org) Search Options")
#+end_example
Links to buffers are also common and valuable. For example, we can
have a link to a page produced by the ~man~ command, which gives us
quick access to the documentation of some program. When Org follows
that link, it opens the buffer in the appropriate major mode. For me,
the most common scenario is a link to an email, which I typically
associate with a task that shows up in my agenda:
- [[#h:f8f06938-0dfe-45c3-b4cf-996d36cba82d][The =unravel-org.el= Org capture templates (~org-capture~)]]
- [[#h:49890997-448e-408d-bebe-2003259bb125][The =unravel-notmuch.el= glue code for ~org-capture~ (=ol-notmuch.el=)]]
Org supports lots of link types out-of-the-box, though more can be
added by packages. My Denote does this: it defines a =denote= link
type which behaves the same way as the =file= type except that it uses
the identifier of the file instead of its full path (so eve if the
file is renamed, the link will work for as long as the identifier
remains the same).
Links can be generated automatically as part of an ~org-capture~
template. The command ~org-store-link~ produces one manually, storing
it to a special data structure from which it can be retrieved later
for insertion with the command ~org-insert-link~. The latter command
can also create new links, simply by receiving data that is different
from what was already stored.
#+end_quote
I bind ~org-store-link~ in main section of the Org configuration:
[[#h:e03df1e0-b43e-49b5-978e-6a511165617c][The =unravel-org.el= section with basic Org settings]].
@ -3683,8 +3648,6 @@ I bind ~org-store-link~ in main section of the Org configuration:
(use-package org
:ensure nil
:config
(require 'prot-org) ; for the above commands
(setq org-link-context-for-files t)
(setq org-link-keep-stored-after-insertion nil)
(setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id))
@ -3695,19 +3658,7 @@ I bind ~org-store-link~ in main section of the Org configuration:
:CUSTOM_ID: h:1f5a0d46-5202-48dd-8048-b48ce17f3df8
:END:
This document benefits from Org's ability to combine prose with code,
by placing the latter inside of a block that is delimited by
=#+BEGIN_SRC= and =#+END_SRC= lines.
Code blocks can use the syntax highlighting ("fontification" in Emacs
parlance) of a given major mode. They can also have optional
parameters passed to their header, which expand the capabilities of
the block. For instance, the following code block with my actual
configuration uses the fontification of the ~emacs-lisp-mode~ and has
a =:tangle= parameter with a value of a file system path. When I
invoke the command ~org-babel-tangle~, the contents of this block will
be added to that file, creating the file if necessary.
#+begin_quote
More generally, Org is capable of evaluating code blocks and passing
their return value to other code blocks. It is thus possible to write
a fully fledged program as an Org document. This paradigm is known as
@ -3736,24 +3687,7 @@ something like the following:
;; Settings here
)
#+end_example
I seldom need to work with Org Babel, so I do not load any language
automatically. Note that Emacs Lisp is loaded by default.
To evaluate a code block, we type Org's omnipotent =C-c C-c=. The
results will be produced below the code block. There is an optional
parameter that controls how---or even if---the results are displayed.
There are many other types of block apart from =SRC=. Those do
different things, such as:
- =#+BEGIN_QUOTE= :: Treat the contents as a block quote or equivalent.
- =#+BEGIN_VERSE= :: Do not reflow any like breaks (for poetry and such).
- =#+BEGIN_EXPORT= :: Evaluate the code for the given export target
(like =html= or =latex=), optionally replacing it with its results
or keeping both of them ([[#h:bd11d4d8-6e9f-4536-87a4-4018783bf8f5][The =unravel-org.el= Org export settings]]).
This is a wonderful world of possibilities!
#+end_quote
#+begin_src emacs-lisp :tangle "unravel-modules/unravel-org.el"
;;;; code blocks
@ -3774,20 +3708,6 @@ This is a wonderful world of possibilities!
:CUSTOM_ID: h:bd11d4d8-6e9f-4536-87a4-4018783bf8f5
:END:
Org is a capable authoring tool in no small part because it can be
converted to other file formats. A typical example is to write a
technical document in Org and then export it to a PDF. Another
use-case is what I commonly do with the Emacs packages I maintain,
which I export to an Info manual (texinfo format) and an HTML web
page.
The default set of export targets is specified in the value of the
user option ~org-export-backends~. It is one of those rare cases where
it has to be evaluated before the package is loaded. Other than that,
we can load an export backend by finding the correspond =ox-FORMAT.el=
file and either ~require~ it or load it with ~use-package~, like what
I showed for Org Babel ([[#h:1f5a0d46-5202-48dd-8048-b48ce17f3df8][The =unravel-org.el= Org code block settings]]).
#+begin_src emacs-lisp :tangle "unravel-modules/unravel-org.el"
;;;; export
(use-package org
@ -3810,154 +3730,20 @@ I showed for Org Babel ([[#h:1f5a0d46-5202-48dd-8048-b48ce17f3df8][The =unravel-
:CUSTOM_ID: h:f8f06938-0dfe-45c3-b4cf-996d36cba82d
:END:
#+begin_quote
The ~org-capture~ command allows us to quickly store data in some
structured way. This is done with the help of a templating system
where we can, for example, record the date the entry was recorded,
prompt for user input, automatically use the email's subject as the
title of the task, and the like. The documentation string of
~org-capture-templates~ covers the technicalities.
I use two Org files for my tasks. The one is =tasks.org=, which
contains the bulk of my entries. The other is =coach.org=, which is
specific to my coaching work: https://protesilaos.com/coach.
The =tasks.org= consists of several top-level headings. Each contains
subheadings I need to review. You will notice how most of my
entries in ~org-capture-templates~ involve this file. With Org, it is
perfectly fine to work in a single file because we can fold headings
or narrow to them with ~org-narrow-to-subtree~. Furthermore, we can
navigate directly to a heading using minibuffer completion, such as
with the general purpose command ~prot-search-outline~
([[#h:b902e6a3-cdd2-420f-bc99-3d973c37cd20][The =unravel-search.el= extras provided by the =prot-search.el= library]]).
Despite the fact that Org copes well with large files, I still choose
to keep my coaching work in a separate file as a contingency plan.
Because =coach.org= includes information about appointments, I need to
be able to read it with ease from anywhere. This includes different
types of hardware, but also any kind of generic text editor or
terminal pager. I do not want to depend on features like folding,
narrowing, and the like, in times when something has gone awry.
Granted, this has never happened, though the idea makes sense.
Besides, two files are not hard to manage in this case. The
=coach.org= has a simple structure: each appointment is stored as a
top-level heading.
As for my workflow, here is an overview:
- When I want to capture data that I am not yet sure about, I add it
to the =tasks.org= "Unprocessed" heading. I periodically review
those to decide if I want to do something with them or not. If I do
not want them, I delete them. Otherwise, I file them under another
heading in the same file using the ~org-refile~ command ([[#h:024dd541-0061-4a10-b10b-b17dcd4794b9][The =unravel-org.el= Org to-do and refile settings]]).
Not everything goes into the "Unprocessed" headings, as I often
known in advance what an item is about. This is just a fallback for
those cases when I need more information to decide on the
appropriate action.
- Tasks that have an inherent time component are given a =SCHEDULED=
or =DEADLINE= timestamp (set those on demand with the commands
~org-schedule~ and ~org-deadline~, respectively). These are the only
tasks I want to see on my daily agenda ([[#h:7fe87b83-2815-4617-a5f9-d3417dd9d248][The =unravel-org.el= Org agenda settings]]).
The difference between =SCHEDULED= and =DEADLINE= is that the former
has no strict start or end time and so is flexible, while the latter
is more rigid. For example, "visit the vet today" does not have a
strict time associated with it because the doctor often deals with
emergency situations and thus their agenda is fluid. While a
coaching session of mine like "work on Emacs with PERSON" has to
start at the agreed upon time.
- I do not arbitrarily assign timestamps to tasks. If something does
not have a scheduled date or a deadline, then it does not belong on
the agenda. Otherwise, those arbitrarily defined "events" accumulate
in the agenda and crowd out the actual time-sensitive tasks. As a
result, the cognitive load is heavier and things will not be done.
So when I want to do something at some point, but have no specific
plan for it, I add is to the =tasks.org= "Wishlist". When I have
free time, I review my wishlist and pick something to work on from
there depending on my available time and mood. This keeps my
workflow both focused and stress-free.
- Finally, my =coach.org= only has time-sensitive appointments with a
=DEADLINE= associated with them. I organise the rest of my
activities in the given day based on those.
#+end_quote
#+begin_src emacs-lisp :tangle "unravel-modules/unravel-org.el"
;;;; capture
(use-package org-capture
:ensure nil
:bind ("C-c c" . org-capture)
:config
(require 'prot-org)
(setq org-capture-templates
`(("u" "Unprocessed" entry
(file+headline "tasks.org" "Unprocessed")
,(concat "* %^{Title}\n"
":PROPERTIES:\n"
":CAPTURED: %U\n"
":END:\n\n"
"%a\n%i%?")
:empty-lines-after 1)
;; ("e" "Email note (unprocessed)" entry ; Also see `org-capture-templates-contexts'
;; (file+headline "tasks.org" "Unprocessed")
;; ,(concat "* TODO %:subject :mail:\n"
;; ":PROPERTIES:\n"
;; ":CAPTURED: %U\n"
;; ":END:\n\n"
;; "%a\n%i%?")
;; :empty-lines-after 1)
("w" "Add to the wishlist (may do some day)" entry
(file+headline "tasks.org" "Wishlist")
,(concat "* %^{Title}\n"
":PROPERTIES:\n"
":CAPTURED: %U\n"
":END:\n\n"
"%a%?")
:empty-lines-after 1)
("c" "Clock in and do immediately" entry
(file+headline "tasks.org" "Clocked tasks")
,(concat "* TODO %^{Title}\n"
":PROPERTIES:\n"
":EFFORT: %^{Effort estimate in minutes|5|10|15|30|45|60|90|120}\n"
":END:\n\n"
"%a\n")
:prepend t
:clock-in t
:clock-keep t
:immediate-finish t
:empty-lines-after 1)
("t" "Time-sensitive task" entry
(file+headline "tasks.org" "Tasks with a date")
,(concat "* TODO %^{Title} %^g\n"
"%^{How time sensitive it is||SCHEDULED|DEADLINE}: %^t\n"
":PROPERTIES:\n"
":CAPTURED: %U\n"
":END:\n\n"
"%a%?")
:empty-lines-after 1)
("p" "Private lesson or service" entry
(file "coach.org")
#'prot-org-capture-coach
:prepend t
:empty-lines 1)
("P" "Private service clocked" entry
(file+headline "coach.org" "Clocked services")
#'prot-org-capture-coach-clock
:prepend t
:clock-in t
:clock-keep t
:immediate-finish t
:empty-lines 1)))
;; NOTE 2024-11-10: I realised that I was not using this enough, so
;; I decided to simplify my setup. Keeping it here, in case I need
;; it again.
;; (setq org-capture-templates-contexts
;; '(("e" ((in-mode . "notmuch-search-mode")
;; (in-mode . "notmuch-show-mode")
;; (in-mode . "notmuch-tree-mode")))))
)
;;;; capture
(use-package org-capture
:ensure nil
:bind ("C-c c" . org-capture))
#+end_src
** The =unravel-org.el= Org agenda settings
@ -3968,263 +3754,189 @@ As for my workflow, here is an overview:
[ Watch Prot's talk: [[https://protesilaos.com/codelog/2021-12-09-emacs-org-block-agenda/][Demo of my custom Org block agenda]] (2021-12-09). It has
changed a bit since then, but the idea is the same. ]
With the Org agenda, we can visualise the tasks we have collected in
our Org files or, more specifically, in the list of files specified in
the user option ~org-agenda-files~. In my workflow, only the files in
the ~org-directory~ can feed data into the agenda. Though Org provides
commands to add/remove the current file on demand: ~org-remove-file~,
and ~org-agenda-file-to-front~. If I ever need to write a task that is
specific to a certain file or buffer, then I use Org's linking
mechanism to point to the relevant context, but otherwise store my
task in the usual place ([[#h:f8f06938-0dfe-45c3-b4cf-996d36cba82d][The =unravel-org.el= Org capture templates (~org-capture~)]]).
By default, Org provides many so-called "views" for the agenda. One of
the them is the daily/weekly agenda. Others show only the headings
with =TODO= keywords, or some other kind of search criteria. I
personally never use those views. I have my own custom agenda view,
which consolidates in a single buffer the following blocks on data, in
this order ([[#h:9974eac8-2167-45c4-90e0-12dd877403da][The =prot-org.el= library]]).:
- Important tasks without a date :: When I add a top priority to
something, but there is no inherent deadline to it.
- Pending scheduled tasks :: Tasks with a =SCHEDULED= date may
sometimes not be done when they ought to. So they need to be closer
to the top for me to do them as soon as I can.
- Today's agenda :: What I am actually working on. Because I only
assign a timestamp to tasks that are indeed time-sensitive, this
always reflects the commitments I have for the day.
- Next three days :: Like the above, but for the near future.
- Upcoming deadlines (+14d) :: These are the deadlines I need to be
aware of for the 14 days after the next three days I am only
informed about.
The Org agenda has lots of other extras, such as to filter the view.
Though I never use them. My custom agenda does exactly what I need
from it and thus keeps me focused.
#+begin_src emacs-lisp :tangle "unravel-modules/unravel-org.el"
;;;; agenda
(use-package org-agenda
:ensure nil
:bind
;; I bind `org-agenda' to C-c A, so this one puts me straight into my
;; custom block agenda.
( :map global-map
("C-c A" . org-agenda)
("C-c a" . (lambda ()
"Call Org agenda with `prot-org-custom-daily-agenda' configuration."
(interactive)
(org-agenda nil "A"))))
:config
;;;;; Custom agenda blocks
;;;; agenda
(use-package org-agenda
:ensure nil
:bind
("C-c a" . org-agenda)
:config
(setq org-agenda-format-date #'prot-org-agenda-format-date-aligned)
;;;;; Basic agenda setup
(setq org-agenda-files `(,org-directory))
(setq org-agenda-span 'week)
(setq org-agenda-start-on-weekday 1) ; Monday
(setq org-agenda-confirm-kill t)
(setq org-agenda-show-all-dates t)
(setq org-agenda-show-outline-path nil)
(setq org-agenda-window-setup 'current-window)
(setq org-agenda-skip-comment-trees t)
(setq org-agenda-menu-show-matcher t)
(setq org-agenda-menu-two-columns nil)
(setq org-agenda-sticky nil)
(setq org-agenda-custom-commands-contexts nil)
(setq org-agenda-max-entries nil)
(setq org-agenda-max-todos nil)
(setq org-agenda-max-tags nil)
(setq org-agenda-max-effort nil)
;; Check the variable `prot-org-custom-daily-agenda' in prot-org.el
(setq org-agenda-custom-commands
`(("A" "Daily agenda and top priority tasks"
,prot-org-custom-daily-agenda
((org-agenda-fontify-priorities nil)
(org-agenda-prefix-format " %t %s")
(org-agenda-dim-blocked-tasks nil)))
("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"))))
;;;;; General agenda view options
;; NOTE 2021-12-07: Check further below my `org-agenda-custom-commands'
(setq org-agenda-prefix-format
'((agenda . " %i %-12:c%?-12t% s")
(todo . " %i %-12:c")
(tags . " %i %-12:c")
(search . " %i %-12:c")))
(setq org-agenda-sorting-strategy
'(((agenda habit-down time-up priority-down category-keep)
(todo priority-down category-keep)
(tags priority-down category-keep)
(search category-keep))))
(setq org-agenda-breadcrumbs-separator "->")
(setq org-agenda-todo-keyword-format "%-1s")
(setq org-agenda-fontify-priorities 'cookies)
(setq org-agenda-category-icon-alist nil)
(setq org-agenda-remove-times-when-in-prefix nil)
(setq org-agenda-remove-timeranges-from-blocks nil)
(setq org-agenda-compact-blocks nil)
(setq org-agenda-block-separator ?—)
;;;;; Basic agenda setup
(setq org-default-notes-file (make-temp-file "emacs-org-notes-")) ; send it to oblivion
(setq org-agenda-files `(,org-directory))
(setq org-agenda-span 'week)
(setq org-agenda-start-on-weekday 1) ; Monday
(setq org-agenda-confirm-kill t)
(setq org-agenda-show-all-dates t)
(setq org-agenda-show-outline-path nil)
(setq org-agenda-window-setup 'current-window)
(setq org-agenda-skip-comment-trees t)
(setq org-agenda-menu-show-matcher t)
(setq org-agenda-menu-two-columns nil)
(setq org-agenda-sticky nil)
(setq org-agenda-custom-commands-contexts nil)
(setq org-agenda-max-entries nil)
(setq org-agenda-max-todos nil)
(setq org-agenda-max-tags nil)
(setq org-agenda-max-effort nil)
;;;;; Agenda marks
(setq org-agenda-bulk-mark-char "#")
(setq org-agenda-persistent-marks nil)
;;;;; General agenda view options
;; NOTE 2021-12-07: Check further below my `org-agenda-custom-commands'
(setq org-agenda-prefix-format
'((agenda . " %i %-12:c%?-12t% s")
(todo . " %i %-12:c")
(tags . " %i %-12:c")
(search . " %i %-12:c")))
(setq org-agenda-sorting-strategy
'(((agenda habit-down time-up priority-down category-keep)
(todo priority-down category-keep)
(tags priority-down category-keep)
(search category-keep))))
(setq org-agenda-breadcrumbs-separator "->")
(setq org-agenda-todo-keyword-format "%-1s")
(setq org-agenda-fontify-priorities 'cookies)
(setq org-agenda-category-icon-alist nil)
(setq org-agenda-remove-times-when-in-prefix nil)
(setq org-agenda-remove-timeranges-from-blocks nil)
(setq org-agenda-compact-blocks nil)
(setq org-agenda-block-separator ?—)
;;;;; Agenda diary entries
(setq org-agenda-insert-diary-strategy 'date-tree)
(setq org-agenda-insert-diary-extract-time nil)
(setq org-agenda-include-diary nil)
;; I do not want the diary, but there is no way to disable it
;; altogether. This creates a diary file in the /tmp directory.
(setq diary-file (make-temp-file "emacs-diary-"))
(setq org-agenda-diary-file 'diary-file) ; TODO 2023-05-20: review Org diary substitute
;;;;; Agenda marks
(setq org-agenda-bulk-mark-char "#")
(setq org-agenda-persistent-marks nil)
;;;;; Agenda follow mode
(setq org-agenda-start-with-follow-mode nil)
(setq org-agenda-follow-indirect t)
;;;;; Agenda diary entries
(setq org-agenda-insert-diary-strategy 'date-tree)
(setq org-agenda-insert-diary-extract-time nil)
(setq org-agenda-include-diary nil)
;; I do not want the diary, but there is no way to disable it
;; altogether. This creates a diary file in the /tmp directory.
(setq diary-file (make-temp-file "emacs-diary-"))
(setq org-agenda-diary-file 'diary-file) ; TODO 2023-05-20: review Org diary substitute
;;;;; Agenda multi-item tasks
(setq org-agenda-dim-blocked-tasks t)
(setq org-agenda-todo-list-sublevels t)
;;;;; Agenda follow mode
(setq org-agenda-start-with-follow-mode nil)
(setq org-agenda-follow-indirect t)
;;;;; Agenda filters and restricted views
(setq org-agenda-persistent-filter nil)
(setq org-agenda-restriction-lock-highlight-subtree t)
;;;;; Agenda multi-item tasks
(setq org-agenda-dim-blocked-tasks t)
(setq org-agenda-todo-list-sublevels t)
;;;;; Agenda items with deadline and scheduled timestamps
(setq org-agenda-include-deadlines t)
(setq org-deadline-warning-days 0)
(setq org-agenda-skip-scheduled-if-done nil)
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
(setq org-agenda-skip-timestamp-if-deadline-is-shown t)
(setq org-agenda-skip-deadline-if-done nil)
(setq org-agenda-skip-deadline-prewarning-if-scheduled 1)
(setq org-agenda-skip-scheduled-delay-if-deadline nil)
(setq org-agenda-skip-additional-timestamps-same-entry nil)
(setq org-agenda-skip-timestamp-if-done nil)
(setq org-agenda-search-headline-for-time nil)
(setq org-scheduled-past-days 365)
(setq org-deadline-past-days 365)
(setq org-agenda-move-date-from-past-immediately-to-today t)
(setq org-agenda-show-future-repeats t)
(setq org-agenda-prefer-last-repeat nil)
(setq org-agenda-timerange-leaders
'("" "(%d/%d): "))
(setq org-agenda-scheduled-leaders
'("Scheduled: " "Sched.%2dx: "))
(setq org-agenda-inactive-leader "[")
(setq org-agenda-deadline-leaders
'("Deadline: " "In %3d d.: " "%2d d. ago: "))
;; Time grid
(setq org-agenda-time-leading-zero t)
(setq org-agenda-timegrid-use-ampm nil)
(setq org-agenda-use-time-grid t)
(setq org-agenda-show-current-time-in-grid t)
(setq org-agenda-current-time-string (concat "Now " (make-string 70 ?.)))
(setq org-agenda-time-grid
'((daily today require-timed)
( 0500 0600 0700 0800 0900 1000
1100 1200 1300 1400 1500 1600
1700 1800 1900 2000 2100 2200)
"" ""))
(setq org-agenda-default-appointment-duration nil)
;;;;; Agenda filters and restricted views
(setq org-agenda-persistent-filter nil)
(setq org-agenda-restriction-lock-highlight-subtree t)
;;;;; Agenda global to-do list
(setq org-agenda-todo-ignore-with-date t)
(setq org-agenda-todo-ignore-timestamp t)
(setq org-agenda-todo-ignore-scheduled t)
(setq org-agenda-todo-ignore-deadlines t)
(setq org-agenda-todo-ignore-time-comparison-use-seconds t)
(setq org-agenda-tags-todo-honor-ignore-options nil)
;;;;; Agenda items with deadline and scheduled timestamps
(setq org-agenda-include-deadlines t)
(setq org-deadline-warning-days 0)
(setq org-agenda-skip-scheduled-if-done nil)
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
(setq org-agenda-skip-timestamp-if-deadline-is-shown t)
(setq org-agenda-skip-deadline-if-done nil)
(setq org-agenda-skip-deadline-prewarning-if-scheduled 1)
(setq org-agenda-skip-scheduled-delay-if-deadline nil)
(setq org-agenda-skip-additional-timestamps-same-entry nil)
(setq org-agenda-skip-timestamp-if-done nil)
(setq org-agenda-search-headline-for-time nil)
(setq org-scheduled-past-days 365)
(setq org-deadline-past-days 365)
(setq org-agenda-move-date-from-past-immediately-to-today t)
(setq org-agenda-show-future-repeats t)
(setq org-agenda-prefer-last-repeat nil)
(setq org-agenda-timerange-leaders
'("" "(%d/%d): "))
(setq org-agenda-scheduled-leaders
'("Scheduled: " "Sched.%2dx: "))
(setq org-agenda-inactive-leader "[")
(setq org-agenda-deadline-leaders
'("Deadline: " "In %3d d.: " "%2d d. ago: "))
;; Time grid
(setq org-agenda-time-leading-zero t)
(setq org-agenda-timegrid-use-ampm nil)
(setq org-agenda-use-time-grid t)
(setq org-agenda-show-current-time-in-grid t)
(setq org-agenda-current-time-string (concat "Now " (make-string 70 ?.)))
(setq org-agenda-time-grid
'((daily today require-timed)
( 0500 0600 0700 0800 0900 1000
1100 1200 1300 1400 1500 1600
1700 1800 1900 2000 2100 2200)
"" ""))
(setq org-agenda-default-appointment-duration nil)
;;;;; Agenda tagged items
(setq org-agenda-show-inherited-tags t)
(setq org-agenda-use-tag-inheritance
'(todo search agenda))
(setq org-agenda-hide-tags-regexp nil)
(setq org-agenda-remove-tags nil)
(setq org-agenda-tags-column -100)
;;;;; Agenda global to-do list
(setq org-agenda-todo-ignore-with-date t)
(setq org-agenda-todo-ignore-timestamp t)
(setq org-agenda-todo-ignore-scheduled t)
(setq org-agenda-todo-ignore-deadlines t)
(setq org-agenda-todo-ignore-time-comparison-use-seconds t)
(setq org-agenda-tags-todo-honor-ignore-options nil)
;;;;; Agenda entry
;; NOTE: I do not use this right now. Leaving everything to its
;; default value.
(setq org-agenda-start-with-entry-text-mode nil)
(setq org-agenda-entry-text-maxlines 5)
(setq org-agenda-entry-text-exclude-regexps nil)
(setq org-agenda-entry-text-leaders " > ")
;;;;; Agenda tagged items
(setq org-agenda-show-inherited-tags t)
(setq org-agenda-use-tag-inheritance
'(todo search agenda))
(setq org-agenda-hide-tags-regexp nil)
(setq org-agenda-remove-tags nil)
(setq org-agenda-tags-column -100)
;;;;; Agenda logging and clocking
;; NOTE: I do not use these yet, though I plan to. Leaving everything
;; to its default value for the time being.
(setq org-agenda-log-mode-items '(closed clock))
(setq org-agenda-clock-consistency-checks
'((:max-duration "10:00" :min-duration 0 :max-gap "0:05" :gap-ok-around
("4:00")
:default-face ; This should definitely be reviewed
((:background "DarkRed")
(:foreground "white"))
:overlap-face nil :gap-face nil :no-end-time-face nil
:long-face nil :short-face nil)))
(setq org-agenda-log-mode-add-notes t)
(setq org-agenda-start-with-log-mode nil)
(setq org-agenda-start-with-clockreport-mode nil)
(setq org-agenda-clockreport-parameter-plist '(:link t :maxlevel 2))
(setq org-agenda-search-view-always-boolean nil)
(setq org-agenda-search-view-force-full-words nil)
(setq org-agenda-search-view-max-outline-level 0)
(setq org-agenda-search-headline-for-time t)
(setq org-agenda-use-time-grid t)
(setq org-agenda-cmp-user-defined nil)
(setq org-agenda-sort-notime-is-late t) ; Org 9.4
(setq org-agenda-sort-noeffort-is-high t) ; Org 9.4
;;;;; Agenda entry
;; NOTE: I do not use this right now. Leaving everything to its
;; default value.
(setq org-agenda-start-with-entry-text-mode nil)
(setq org-agenda-entry-text-maxlines 5)
(setq org-agenda-entry-text-exclude-regexps nil)
(setq org-agenda-entry-text-leaders " > ")
;;;;; Agenda column view
;; NOTE I do not use these, but may need them in the future.
(setq org-agenda-view-columns-initially nil)
(setq org-agenda-columns-show-summaries t)
(setq org-agenda-columns-compute-summary-properties t)
(setq org-agenda-columns-add-appointments-to-effort-sum nil)
(setq org-agenda-auto-exclude-function nil)
(setq org-agenda-bulk-custom-functions nil)
;;;;; Agenda logging and clocking
;; NOTE: I do not use these yet, though I plan to. Leaving everything
;; to its default value for the time being.
(setq org-agenda-log-mode-items '(closed clock))
(setq org-agenda-clock-consistency-checks
'((:max-duration "10:00" :min-duration 0 :max-gap "0:05" :gap-ok-around
("4:00")
:default-face ; This should definitely be reviewed
((:background "DarkRed")
(:foreground "white"))
:overlap-face nil :gap-face nil :no-end-time-face nil
:long-face nil :short-face nil)))
(setq org-agenda-log-mode-add-notes t)
(setq org-agenda-start-with-log-mode nil)
(setq org-agenda-start-with-clockreport-mode nil)
(setq org-agenda-clockreport-parameter-plist '(:link t :maxlevel 2))
(setq org-agenda-search-view-always-boolean nil)
(setq org-agenda-search-view-force-full-words nil)
(setq org-agenda-search-view-max-outline-level 0)
(setq org-agenda-search-headline-for-time t)
(setq org-agenda-use-time-grid t)
(setq org-agenda-cmp-user-defined nil)
(setq org-agenda-sort-notime-is-late t) ; Org 9.4
(setq org-agenda-sort-noeffort-is-high t) ; Org 9.4
;;;;; Agenda column view
;; NOTE I do not use these, but may need them in the future.
(setq org-agenda-view-columns-initially nil)
(setq org-agenda-columns-show-summaries t)
(setq org-agenda-columns-compute-summary-properties t)
(setq org-agenda-columns-add-appointments-to-effort-sum nil)
(setq org-agenda-auto-exclude-function nil)
(setq org-agenda-bulk-custom-functions nil)
;; ;;;;; Agenda habits
;; (require 'org-habit)
;; (setq org-habit-graph-column 50)
;; (setq org-habit-preceding-days 9)
;; ;; Always show the habit graph, even if there are no habits for
;; ;; today.
;; (setq org-habit-show-all-today t)
)
;; ;;;;; Agenda habits
;; (require 'org-habit)
;; (setq org-habit-graph-column 50)
;; (setq org-habit-preceding-days 9)
;; ;; Always show the habit graph, even if there are no habits for
;; ;; today.
;; (setq org-habit-show-all-today t)
)
#+end_src
#+begin_src emacs-lisp :tangle "unravel-modules/unravel-org.el"
(use-package prot-coach
:ensure nil
:commands (prot-coach-done-sessions-with-person))
#+end_src
** The =unravel-org.el= call to ~provide~
** Finally, we provide the =unravel-org.el= module
:PROPERTIES:
:CUSTOM_ID: h:62eb7ca3-2f79-45a6-a018-38238b486e98
:END:
Finally, we ~provide~ the module. This is the mirror function of
~require~ ([[#h:e6c4acf5-5b51-4b38-a86a-bf3f698ac872][The init.el final part to load the individual modules]]).
#+begin_src emacs-lisp :tangle "unravel-modules/unravel-org.el"
(provide 'unravel-org)
#+end_src

View file

@ -37,9 +37,6 @@
(with-eval-after-load 'org-agenda
(appt-activate 1)
;; NOTE 2021-12-07: In my `prot-org.el' (see further below), I add
;; `org-agenda-to-appt' to various relevant hooks.
;;
;; Create reminders for tasks with a due date when this file is read.
(org-agenda-to-appt)))
@ -71,14 +68,8 @@
:map narrow-map
("b" . org-narrow-to-block)
("e" . org-narrow-to-element)
("s" . org-narrow-to-subtree)
:map ctl-x-x-map
("i" . prot-org-id-headlines)
("h" . prot-org-ox-html))
("s" . org-narrow-to-subtree))
:config
;; My custom extras, which I use for the agenda and a few other Org features.
(require 'prot-org)
;;;; general settings
(setq org-ellipsis "")
(setq org-adapt-indentation nil) ; No, non, nein, όχι!
@ -126,10 +117,6 @@
(setq org-refile-allow-creating-parent-nodes 'confirm)
(setq org-refile-use-cache t)
(setq org-reverse-note-order nil)
;; ;; NOTE 2023-04-07: Leaving this here for demo purposes.
;; (setq org-todo-keywords
;; '((sequence "TODO(t)" "MAYBE(m)" "WAIT(w@/!)" "|" "CANCEL(c@)" "DONE(d!)")
;; (sequence "COACH(k)" "|" "COACHED(K!)")))
(setq org-todo-keywords
'((sequence "TODO(t)" "|" "CANCEL(c@)" "DONE(d!)")))
@ -169,8 +156,6 @@
(use-package org
:ensure nil
:config
(require 'prot-org) ; for the above commands
(setq org-link-context-for-files t)
(setq org-link-keep-stored-after-insertion nil)
(setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id))
@ -205,115 +190,16 @@
;;;; capture
(use-package org-capture
:ensure nil
:bind ("C-c c" . org-capture)
:config
(require 'prot-org)
(setq org-capture-templates
`(("u" "Unprocessed" entry
(file+headline "tasks.org" "Unprocessed")
,(concat "* %^{Title}\n"
":PROPERTIES:\n"
":CAPTURED: %U\n"
":END:\n\n"
"%a\n%i%?")
:empty-lines-after 1)
;; ("e" "Email note (unprocessed)" entry ; Also see `org-capture-templates-contexts'
;; (file+headline "tasks.org" "Unprocessed")
;; ,(concat "* TODO %:subject :mail:\n"
;; ":PROPERTIES:\n"
;; ":CAPTURED: %U\n"
;; ":END:\n\n"
;; "%a\n%i%?")
;; :empty-lines-after 1)
("w" "Add to the wishlist (may do some day)" entry
(file+headline "tasks.org" "Wishlist")
,(concat "* %^{Title}\n"
":PROPERTIES:\n"
":CAPTURED: %U\n"
":END:\n\n"
"%a%?")
:empty-lines-after 1)
("c" "Clock in and do immediately" entry
(file+headline "tasks.org" "Clocked tasks")
,(concat "* TODO %^{Title}\n"
":PROPERTIES:\n"
":EFFORT: %^{Effort estimate in minutes|5|10|15|30|45|60|90|120}\n"
":END:\n\n"
"%a\n")
:prepend t
:clock-in t
:clock-keep t
:immediate-finish t
:empty-lines-after 1)
("t" "Time-sensitive task" entry
(file+headline "tasks.org" "Tasks with a date")
,(concat "* TODO %^{Title} %^g\n"
"%^{How time sensitive it is||SCHEDULED|DEADLINE}: %^t\n"
":PROPERTIES:\n"
":CAPTURED: %U\n"
":END:\n\n"
"%a%?")
:empty-lines-after 1)
("p" "Private lesson or service" entry
(file "coach.org")
#'prot-org-capture-coach
:prepend t
:empty-lines 1)
("P" "Private service clocked" entry
(file+headline "coach.org" "Clocked services")
#'prot-org-capture-coach-clock
:prepend t
:clock-in t
:clock-keep t
:immediate-finish t
:empty-lines 1)))
;; NOTE 2024-11-10: I realised that I was not using this enough, so
;; I decided to simplify my setup. Keeping it here, in case I need
;; it again.
;; (setq org-capture-templates-contexts
;; '(("e" ((in-mode . "notmuch-search-mode")
;; (in-mode . "notmuch-show-mode")
;; (in-mode . "notmuch-tree-mode")))))
)
:bind ("C-c c" . org-capture))
;;;; agenda
(use-package org-agenda
:ensure nil
:bind
;; I bind `org-agenda' to C-c A, so this one puts me straight into my
;; custom block agenda.
( :map global-map
("C-c A" . org-agenda)
("C-c a" . (lambda ()
"Call Org agenda with `prot-org-custom-daily-agenda' configuration."
(interactive)
(org-agenda nil "A"))))
("C-c a" . org-agenda)
:config
;;;;; Custom agenda blocks
(setq org-agenda-format-date #'prot-org-agenda-format-date-aligned)
;; Check the variable `prot-org-custom-daily-agenda' in prot-org.el
(setq org-agenda-custom-commands
`(("A" "Daily agenda and top priority tasks"
,prot-org-custom-daily-agenda
((org-agenda-fontify-priorities nil)
(org-agenda-prefix-format " %t %s")
(org-agenda-dim-blocked-tasks nil)))
("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"))))
;;;;; Basic agenda setup
(setq org-default-notes-file (make-temp-file "emacs-org-notes-")) ; send it to oblivion
(setq org-agenda-files `(,org-directory))
(setq org-agenda-span 'week)
(setq org-agenda-start-on-weekday 1) ; Monday
@ -482,8 +368,4 @@
;; (setq org-habit-show-all-today t)
)
(use-package prot-coach
:ensure nil
:commands (prot-coach-done-sessions-with-person))
(provide 'unravel-org)