Compare commits

...

3 Commits

Author SHA1 Message Date
Daniel - a4823651a1
Use Common Lisp indentation by default
It's not perfect, but I think it's still closer to what I like.
2023-04-29 17:29:53 +02:00
Daniel - a44b7b660e
Remove obsolete function to skip tags in agenda views 2023-04-29 17:28:35 +02:00
Daniel - 8c9c47f6e3
Prominently display of active filters in agenda view
Displaying the current filters in the mode line alone often goes unnoticed for
me, so I need a more direct display.  Let's add it to the first structural
header.
2023-04-29 17:27:50 +02:00
2 changed files with 47 additions and 24 deletions

23
init.el
View File

@ -741,7 +741,7 @@
org-dblock-write:db/org-workload-report
endless/org-ispell
db/org-agenda-list-deadlines
db/org-agenda-skip-tag
db/org-agenda-insert-active-filters
hydra-org-agenda-view/body
db/org-agenda-insert-efforts
db/org-eval-subtree-no-confirm
@ -1134,9 +1134,6 @@
org-agenda-search-headline-for-time nil
org-agenda-search-view-always-boolean t
;; Show daily efforts directly in the agenda
org-agenda-finalize-hook '(db/org-agenda-insert-efforts)
org-agenda-clock-consistency-checks
'(:max-duration 9999999
:min-duration 0
@ -1257,15 +1254,25 @@
(org-agenda-skip-deadline-prewarning-if-scheduled t)))))))
:config (progn
;; avoid important buffers to end up in `org-agenda-new-buffers by
;; Avoid important buffers to end up in `org-agenda-new-buffers by
;; opening them manually
(mapc #'find-file-noselect org-agenda-files)
(add-hook 'org-agenda-mode-hook #'hl-line-mode 'append)
;; Check that all expected agenda files are being displayed.
(advice-add 'org-agenda
:before #'db/check-special-org-files-in-agenda)
(add-hook 'org-agenda-mode-hook #'hl-line-mode 'append)
;; Show daily efforts directly in the agenda
(add-hook 'org-agenda-finalize-hook #'db/org-agenda-insert-efforts)
;; Prominently display active filters on top of agenda view; also
;; update current agenda view when updating filters to make sure our
;; display is always correct.
(add-hook 'org-agenda-finalize-hook #'db/org-agenda-insert-active-filters)
(add-hook 'org-agenda-filter-hook #'org-agenda-redo-all)
(define-advice org-agenda-redo-all (:around (old-func &rest r) goto-top-and-execute)
"Avoid recentering the Org agenda buffer after redo by moving
point to the beginning of buffer first."
@ -2791,7 +2798,7 @@ With given ARG, display files in `db/important-document-path."
;; General Stuff first
(use-package lisp-mode
:init (setq lisp-indent-function #'lisp-indent-function))
:init (setq lisp-indent-function #'common-lisp-indent-function))
(use-package lispy
:ensure t

View File

@ -112,23 +112,39 @@ deadlines."
(setq buffer-read-only t)
(message ""))))
(defun db/org-agenda-skip-tag (tag &optional others)
;; https://stackoverflow.com/questions/10074016/org-mode-filter-on-tag-in-agenda-view
"Skip all entries that correspond to TAG.
(defun db/org-agenda-insert-active-filters (&optional match)
"Insert string showing the current agenda filters.
If OTHERS is true, skip all entries that do not correspond to TAG."
(let* ((next-headline (save-mark-and-excursion
(or (outline-next-heading) (point-max))))
(current-headline (or (and (org-at-heading-p)
(point))
(save-mark-and-excursion
;; remember to also consider invisible headings
(org-back-to-heading t))))
(has-tag (member tag (org-get-tags current-headline))))
(if (or (and others (not has-tag))
(and (not others) has-tag))
next-headline
nil)))
The filter display is added after the structural header.
If no agenda filters are active, nothing will be inserted.
Add this function to `org-agenda-finalize-hook' to enable this."
;; First delete any present active filter display, as it might be obsolete.
(save-excursion
(when-let ((pos (text-property-any
(point) (point-max) 'db/active-filter-display t)))
(goto-char pos)
(kill-line)))
;; Insert current active filters if there are any.
(when (org-agenda-filter-any)
(save-excursion
(when-let ((pos (text-property-any
(point) (point-max) 'org-agenda-structural-header t)))
(goto-char pos)
(end-of-line)
;; Current filter display shamelessly stolen from `org-agenda-filter'.
;; Is there a function to do this?
(let* ((cf (mapconcat #'identity org-agenda-category-filter ""))
(tf (mapconcat #'identity org-agenda-tag-filter ""))
(ef (replace-regexp-in-string "^\\+" "" (or (car org-agenda-effort-filter) "")))
(rf (replace-regexp-in-string "^\\+" "" (or (car org-agenda-regexp-filter) "")))
(ff (concat cf tf ef (when (not (equal rf "")) (concat "/" rf "/")))))
(insert-and-inherit
(propertize (format " [%s]" ff)
'db/active-filter-display t)))))))
;; A Hydra for changing agenda appearance
;; http://oremacs.com/2016/04/04/hydra-doc-syntax/