diff options
author | Franck Cuny <franck@fcuny.net> | 2024-09-30 12:53:34 -0700 |
---|---|---|
committer | Franck Cuny <franck@fcuny.net> | 2024-09-30 12:53:34 -0700 |
commit | d5d0af9e484568fc07d4d9a847e12da4fad12031 (patch) | |
tree | e2b7b7691317fd4c7fd11a84927a40cb31009836 | |
parent | load my custom denote code (diff) | |
download | emacs.d-d5d0af9e484568fc07d4d9a847e12da4fad12031.tar.gz |
forgot to add the denote related code
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | lisp/my-denote.el | 65 |
2 files changed, 66 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore index 02cbcf1..18bf8e7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,5 @@ /transient/ /bookmarks /savehist -/lisp/ +/lisp/custom.el /.org-id-locations diff --git a/lisp/my-denote.el b/lisp/my-denote.el new file mode 100644 index 0000000..2513b81 --- /dev/null +++ b/lisp/my-denote.el @@ -0,0 +1,65 @@ +;;; my-denote.el --- summary -*- lexical-binding: t -*- +;; Author: Franck Cuny <franck@fcuny.net> + +;;; Commentary: + +;; commentary + +;;; Code: + +;;; https://protesilaos.com/codelog/2024-09-20-emacs-use-denote-for-meetings-events/ +(defvar my-denote-colleagues '("dbullock" "nirmam" "mark") + "List of names I collaborate with. +There is at least one file in the variable `denote-directory' that has +the name of this person.") + +(defvar my-denote-colleagues-prompt-history nil + "Minibuffer history for `my-denote-colleagues-new-meeting'.") + +(defun my-denote-colleagues-prompt () + "Prompt with completion for a name among `my-denote-colleagues'. +Use the last input as the default value." + (let ((default-value (car my-denote-colleagues-prompt-history))) + (completing-read + (format-prompt "New meeting with COLLEAGUE" default-value) + my-denote-colleagues + nil :require-match nil + 'my-denote-colleagues-prompt-history + default-value))) + +(defun my-denote-colleagues-get-file (name) + "Find file in variable `denote-directory' for NAME colleague. +If there are more than one files, prompt with completion for one among +them. + +NAME is one among `my-denote-colleagues'." + (if-let ((files (denote-directory-files name)) + (length-of-files (length files))) + (cond + ((= length-of-files 1) + (car files)) + ((> length-of-files 1) + (completing-read "Select a file: " files nil :require-match))) + (user-error "No files for colleague with name `%s'" name))) + +(defun my-denote-colleagues-new-meeting () + "Prompt for the name of a colleague and insert a timestamped heading therein. +The name of a colleague corresponds to at least one file in the variable +`denote-directory'. In case there are multiple files, prompt to choose +one among them and operate therein. + +Names are defined in `my-denote-colleagues'." + (declare (interactive-only t)) + (interactive) + (let* ((name (my-denote-colleagues-prompt)) + (file (my-denote-colleagues-get-file name)) + (time (format-time-string "%F %a %R"))) ; remove %R if you do not want the time + (with-current-buffer (find-file file) + (goto-char (point-max)) + ;; Here I am assuming we are in `org-mode', hence the leading + ;; asterisk for the heading. Adapt accordingly. + (insert (format "* [%s]\n\n" time))))) + +(provide 'my-denote) + +;;; my-denote.el ends here |