From 9fe6381afd2ecb14194cafd7de91bc05bc35863f Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Wed, 21 Jun 2023 00:27:35 -0700 Subject: [oni-org] Get rid of any ‘(setf (map-elt ...) ...)’ occurrences Right now this doesn't seem to work at all... It works fine when I evaluate this using ‘eval-defun’ or ‘eval-last-sexp’, but when I try to byte-compile it doesn't work. I've added my own custom macro that expands to the same thing that ‘(setf (map-elt ...) ...)’ should. I have forgotten how to write macros properly so I may have made some mistakes. This should only be temporary until I figure out why this is happening... it might just be that I'm using a version of Emacs built from a faulty commit. --- oni-org/oni-org.el | 178 +++++++++++++++++++++++++++++------------------------ 1 file changed, 98 insertions(+), 80 deletions(-) (limited to 'oni-org') diff --git a/oni-org/oni-org.el b/oni-org/oni-org.el index 63069a1..453e74c 100644 --- a/oni-org/oni-org.el +++ b/oni-org/oni-org.el @@ -4,7 +4,7 @@ ;; Author: Tom Willemse ;; Keywords: local -;; Version: 2023.0613.234632 +;; Version: 2023.0621.002708 ;; Package-Requires: (oni-yasnippet oni-alert oni-hydra org org-bullets org-edna diminish all-the-icons olivetti form-feed org-pretty-table) ;; This program is free software; you can redistribute it and/or modify @@ -1162,100 +1162,118 @@ This is done by adding a ‘:hidden t’ header argument to the code block." ,(/ (length text) 2))))) text)) -(setf (map-elt org-agenda-custom-commands "o") - '("Overview" ((tags-todo "TODO=\"WAITING\"" - ((org-agenda-overriding-header (oni-org--center-align "Waiting")))) - (tags-todo "TODO=\"WIP\"" - ((org-agenda-overriding-header (oni-org--center-align "In Progress")))) - (agenda "" ((org-agenda-span 'day))) - (tags-todo "TODO=\"TODO\"+#todo" - ((org-agenda-max-todos 10) - (org-agenda-overriding-header (oni-org--center-align "To Do")))) - (tags-todo "TODO=\"TODO\"+#reading" - ((org-agenda-max-todos 5) - (org-agenda-overriding-header (oni-org--center-align "Read")))) - (tags-todo "TODO=\"TODO\"+#watching" - ((org-agenda-max-todos 5) - (org-agenda-overriding-header (oni-org--center-align "Watch")))) - (tags-todo "TODO=\"TODO\"+#listening" - ((org-agenda-max-todos 5) - (org-agenda-overriding-header (oni-org--center-align "Listen"))))))) - -(setf (map-elt org-agenda-custom-commands "t") - '("To Do" ((tags-todo "TODO=\"WAITING\"+#todo" - ((org-agenda-overriding-header (oni-org--center-align "Waiting To Do")))) - (tags-todo "TODO=\"WIP\"+#todo" - ((org-agenda-overriding-header (oni-org--center-align "Doing")))) - (tags-todo "TODO=\"TODO\"+#todo" - ((org-agenda-overriding-header (oni-org--center-align "To Do"))))))) - -(setf (map-elt org-agenda-custom-commands "r") - '("Reading" ((tags-todo "TODO=\"WAITING\"+#reading" - ((org-agenda-overriding-header (oni-org--center-align "Waiting To Read")))) - (tags-todo "TODO=\"WIP\"+#reading" - ((org-agenda-overriding-header (oni-org--center-align "Reading")))) - (tags-todo "TODO=\"TODO\"+#reading" - ((org-agenda-overriding-header (oni-org--center-align "To Read"))))))) - -(setf (map-elt org-agenda-custom-commands "w") - '("Watching" ((tags-todo "TODO=\"WAITING\"+#watching" - ((org-agenda-overriding-header (oni-org--center-align "Waiting To Watch")))) - (tags-todo "TODO=\"WIP\"+#watching" - ((org-agenda-overriding-header (oni-org--center-align "Watching")))) - (tags-todo "TODO=\"TODO\"+#watching" - ((org-agenda-overriding-header (oni-org--center-align "To Watch"))))))) - -(setf (map-elt org-agenda-custom-commands "l") - '("Listening" ((tags-todo "TODO=\"WAITING\"+#listening" - ((org-agenda-overriding-header (oni-org--center-align "Waiting To Listen To")))) - (tags-todo "TODO=\"WIP\"+#listening" - ((org-agenda-overriding-header (oni-org--center-align "Listening")))) - (tags-todo "TODO=\"TODO\"+#listening" - ((org-agenda-overriding-header (oni-org--center-align "To Listen To"))))))) - -(setf (map-elt org-capture-templates "sE") - '("Questions for Emacs packages" plain (function ignore) - "- Do I want to integrate this in my configuration? +(defmacro oni-org--map-put (collection key value) + "The result of ‘(setf (map-elt ...) ...)’ on a list. +Trying to byte-compile the above form doesn't work at the moment. +This is a temporary hack to make sure I don't have to repeat this +same code all the time." + (declare (indent 2)) + (let ((key-name (gensym)) + (value-name (gensym))) + `(let ((,key-name ,key) + (,value-name ,value)) + (condition-case nil + (with-no-warnings + (map-put! ,collection ,key-name ,value-name nil)) + (map-not-inplace + (setq ,collection + (map-insert ,collection ,key-name ,value-name)) + ,value-name))))) + +(oni-org--map-put org-agenda-custom-commands "o" + '("Overview" ((tags-todo "TODO=\"WAITING\"" + ((org-agenda-overriding-header (oni-org--center-align "Waiting")))) + (tags-todo "TODO=\"WIP\"" + ((org-agenda-overriding-header (oni-org--center-align "In Progress")))) + (agenda "" ((org-agenda-span 'day))) + (tags-todo "TODO=\"TODO\"+#todo" + ((org-agenda-max-todos 10) + (org-agenda-overriding-header (oni-org--center-align "To Do")))) + (tags-todo "TODO=\"TODO\"+#reading" + ((org-agenda-max-todos 5) + (org-agenda-overriding-header (oni-org--center-align "Read")))) + (tags-todo "TODO=\"TODO\"+#watching" + ((org-agenda-max-todos 5) + (org-agenda-overriding-header (oni-org--center-align "Watch")))) + (tags-todo "TODO=\"TODO\"+#listening" + ((org-agenda-max-todos 5) + (org-agenda-overriding-header (oni-org--center-align "Listen"))))))) + +(oni-org--map-put org-agenda-custom-commands "t" + '("To Do" ((tags-todo "TODO=\"WAITING\"+#todo" + ((org-agenda-overriding-header (oni-org--center-align "Waiting To Do")))) + (tags-todo "TODO=\"WIP\"+#todo" + ((org-agenda-overriding-header (oni-org--center-align "Doing")))) + (tags-todo "TODO=\"TODO\"+#todo" + ((org-agenda-overriding-header (oni-org--center-align "To Do"))))))) + +(oni-org--map-put org-agenda-custom-commands "r" + '("Reading" ((tags-todo "TODO=\"WAITING\"+#reading" + ((org-agenda-overriding-header (oni-org--center-align "Waiting To Read")))) + (tags-todo "TODO=\"WIP\"+#reading" + ((org-agenda-overriding-header (oni-org--center-align "Reading")))) + (tags-todo "TODO=\"TODO\"+#reading" + ((org-agenda-overriding-header (oni-org--center-align "To Read"))))))) + +(oni-org--map-put org-agenda-custom-commands "w" + '("Watching" ((tags-todo "TODO=\"WAITING\"+#watching" + ((org-agenda-overriding-header (oni-org--center-align "Waiting To Watch")))) + (tags-todo "TODO=\"WIP\"+#watching" + ((org-agenda-overriding-header (oni-org--center-align "Watching")))) + (tags-todo "TODO=\"TODO\"+#watching" + ((org-agenda-overriding-header (oni-org--center-align "To Watch"))))))) + +(oni-org--map-put org-agenda-custom-commands "l" + '("Listening" ((tags-todo "TODO=\"WAITING\"+#listening" + ((org-agenda-overriding-header (oni-org--center-align "Waiting To Listen To")))) + (tags-todo "TODO=\"WIP\"+#listening" + ((org-agenda-overriding-header (oni-org--center-align "Listening")))) + (tags-todo "TODO=\"TODO\"+#listening" + ((org-agenda-overriding-header (oni-org--center-align "To Listen To"))))))) + +(oni-org--map-put org-capture-templates "sE" + '("Questions for Emacs packages" plain (function ignore) + "- Do I want to integrate this in my configuration? - %? - What will it add / What advantage will it bring? - - How would I integrate it with my config? - " - :empty-lines 1 - :immediate-finish t - :jump-to-captured t)) -(setf (map-elt org-capture-templates-contexts "sE") - '(((in-mode . "org-mode")))) - -(setf (map-elt org-capture-templates "se") - '("Questions for Emacs articles" plain (function ignore) - "- What can I add to my config from this? + :empty-lines 1 + :immediate-finish t + :jump-to-captured t)) +(oni-org--map-put org-capture-templates-contexts "sE" + '(((in-mode . "org-mode")))) + +(oni-org--map-put org-capture-templates "se" + '("Questions for Emacs articles" plain (function ignore) + "- What can I add to my config from this? - %?" - :empty-lines 1 - :immediate-finish t - :jump-to-captured t)) -(setf (map-elt org-capture-templates-contexts "se") - '(((in-mode . "org-mode")))) - -(setf (map-elt org-capture-templates "s") - '("Snippets")) -(setf (map-elt org-capture-templates-contexts "s") - '(((in-mode . "org-mode")))) - -(setf (map-elt org-capture-templates "t") - '("A simple TODO item." entry (file "") "* TODO %? + :empty-lines 1 + :immediate-finish t + :jump-to-captured t)) +(oni-org--map-put org-capture-templates-contexts "se" + '(((in-mode . "org-mode")))) + +(oni-org--map-put org-capture-templates "s" + '("Snippets")) +(oni-org--map-put org-capture-templates-contexts "s" + '(((in-mode . "org-mode")))) + +(oni-org--map-put org-capture-templates "t" + '("A simple TODO item." entry (file "") "* TODO %? :PROPERTIES: :CREATED: %U :END:")) -(setf (map-elt org-capture-templates "U") - '("A TODO capture from the browser." entry (file "") "* TODO %:description +(oni-org--map-put org-capture-templates "U" + '("A TODO capture from the browser." entry (file "") "* TODO %:description :PROPERTIES: :CREATED: %U :END: %:link" - :immediate-finish t)) + :immediate-finish t)) (provide 'oni-org) ;;; oni-org.el ends here -- cgit v1.2.3-54-g00ecf