emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH] Document custom org agenda functions
@ 2022-04-05 12:08 thecashewtrader
  2022-11-07  8:13 ` Ihor Radchenko
  0 siblings, 1 reply; 2+ messages in thread
From: thecashewtrader @ 2022-04-05 12:08 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: thecashewtrader

---
 org-tutorials/org-custom-agenda-commands.org | 40 +++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/org-tutorials/org-custom-agenda-commands.org b/org-tutorials/org-custom-agenda-commands.org
index e54bcef3..5b55ebb5 100644
--- a/org-tutorials/org-custom-agenda-commands.org
+++ b/org-tutorials/org-custom-agenda-commands.org
@@ -64,7 +64,7 @@ command is a list consisting of the following:
                     (optional).
 - 3) Type of search :: The desired agenda display/search. The options
      include agenda, todo, search, tags, alltodo, tags-todo,
-     todo-tree, tags-tree, occur-tree, or a user-defined function.
+     todo-tree, tags-tree, occur-tree, or a [[*User Defined Functions][user-defined function]].
 - 4) Search term :: Depending on the type of search, this will be a
                     TODO keyword, a tag (or property), a word, or a
                     regular expression.
@@ -372,6 +372,44 @@ deadlines and nothing else.
 Tip: if you want to exclude all agenda entry types, just set
 =org-agenda-entry-types= to nil.
 
+* User Defined Functions
+** Function Signature
+User defined functions should:
+
+- Optionally accept one parameter i.e. the =match= variable. The Org agenda dispatch function will call the user-defined function with one parameter representing the =match= component from the agenda definition. In other words, ~(udf/test "Hello")~ in =org-agenda-custom-commands= will result in a function call of ~udf/test~ with an argument of ="Hello"=.
+
+- Prepare a buffer to write the agenda information to using ~org-agenda-prepare~.
+
+- Handle setting a unique buffer name for the cases where =org-agenda-sticky= has a value of =t=.
+
+- Honor the setting of =org-agenda-overriding-header= and insert that text into the agenda buffer. This can be done using the macro ~org-agenda--insert-overriding-header~.
+
+- Insert into the buffer the desired contents, accounting for also setting text properties.
+
+- Call ~org-agenda-finalize~ and ~(setq buffer-read-only t)~
+
+** Example
+This is a simple function to insert notes into the Agenda.
+
+*NOTE: This example is not fully complete as it doesn't respect =org-agenda-sticky=.*
+
+#+begin_src emacs-lisp
+
+(defun udf/org-agenda-notes (&optional arg)
+  (org-agenda-prepare "Notes")
+  (org-agenda--insert-overriding-header "Notes")
+  (let ((org-agenda-notes
+         (list "Note 1"
+               "Note 2"
+               "Note 3")))
+    (dolist (note org-agenda-notes)
+          (insert (format "- %s\n" note))))
+  (org-agenda-finalize)
+  (setq buffer-read-only t))
+
+#+end_src
+
+
 * Other configuration ideas
 
 This section is for additional ideas for configuring
-- 
2.35.1




^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] Document custom org agenda functions
  2022-04-05 12:08 [PATCH] Document custom org agenda functions thecashewtrader
@ 2022-11-07  8:13 ` Ihor Radchenko
  0 siblings, 0 replies; 2+ messages in thread
From: Ihor Radchenko @ 2022-11-07  8:13 UTC (permalink / raw)
  To: thecashewtrader; +Cc: emacs-orgmode

thecashewtrader <thecashewtrader@protonmail.com> writes:

> +* User Defined Functions
> +** Function Signature
> +User defined functions should:
> +
> +- Optionally accept one parameter i.e. the =match= variable. The Org agenda dispatch function will call the user-defined function with one parameter representing the =match= component from the agenda definition. In other words, ~(udf/test "Hello")~ in =org-agenda-custom-commands= will result in a function call of ~udf/test~ with an argument of ="Hello"=.
> +
> +- Prepare a buffer to write the agenda information to using ~org-agenda-prepare~.
> +
> +- Handle setting a unique buffer name for the cases where =org-agenda-sticky= has a value of =t=.
> +
> +- Honor the setting of =org-agenda-overriding-header= and insert that text into the agenda buffer. This can be done using the macro ~org-agenda--insert-overriding-header~.
> +
> +- Insert into the buffer the desired contents, accounting for also setting text properties.
> +
> +- Call ~org-agenda-finalize~ and ~(setq buffer-read-only t)~

Thanks for the patch, and sorry for the late reply.

I am not sure if this explanation is useful.

Yes, it kind of works and also inserts text into agenda. However, the
inserted text will not allow the usual agenda interaction. One would
also need to set various text properties pointing to an Org heading in
order to make the inserted lines interactive.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-11-07  8:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-05 12:08 [PATCH] Document custom org agenda functions thecashewtrader
2022-11-07  8:13 ` Ihor Radchenko

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).