Benoit Joly: 1 rde: Add feature-emacs-denote. 1 files changed, 112 insertions(+), 0 deletions(-)
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.sr.ht/~abcdw/rde-devel/patches/39851/mbox | git am -3Learn more about email & git
--- The existance of this patch was shared on denote's mailing list: https://lists.sr.ht/~protesilaos/denote/%3C87y1nsk4a2.fsf%40benoitj.ca%3E I also CCed Prot on the patch. Benoit src/rde/features/emacs-xyz.scm | 112 +++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm index c384914..3e14a66 100644 --- a/src/rde/features/emacs-xyz.scm +++ b/src/rde/features/emacs-xyz.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2022 Demis Balbach <db@minikn.xyz> ;;; Copyright © 2022, 2023 Nicolas Graves <ngraves@ngraves.fr> ;;; Copyright © 2022, 2023 conses <contact@conses.eu> +;;; Copyright © 2023 Benoit Joly <benoit@benoitj.ca> ;;; ;;; This file is part of rde. ;;; @@ -106,6 +107,7 @@ feature-emacs-spelling feature-emacs-org-recur feature-emacs-graphviz + feature-emacs-denote ;; Communication feature-emacs-telega @@ -3973,6 +3975,116 @@ SPELLING-DICTIONARIES inside buffers of modes defined in FLYSPELL-HOOKS (values `((,f-name . ,emacs-graphviz-dot-mode))) (home-services-getter get-home-services))) +(define* (feature-emacs-denote + #:key + (emacs-denote emacs-denote) + (prefix-key "C-c N") + (denote-directory #f) + (denote-prompts '(title keywords)) + (denote-file-type 'org) + (denote-date-prompt-use-org? #t) + (denote-dired-hook 'denote-dired-mode-in-directories)) + "Configure denote, Prot's great note taking package." + (ensure-pred file-like? emacs-denote) + (ensure-pred string? prefix-key) + (define (not-boolean? x) (not (boolean? x))) + (ensure-pred not-boolean? denote-directory) + (ensure-pred list? denote-prompts) + (ensure-pred symbol? denote-file-type) + (ensure-pred boolean? denote-date-prompt-use-org?) + (ensure-pred symbol? denote-dired-hook) + + (define emacs-f-name 'denote) + (define f-name (symbol-append 'emacs- emacs-f-name)) + + (define (get-home-services config) + "Return home services related to denote." + (define denote (@ (gnu packages emacs-xyz) emacs-denote)) + (list + (rde-elisp-configuration-service + emacs-f-name + config + `((eval-when-compile + (require 'denote)) + + (setq denote-directory (expand-file-name ,denote-directory)) + (setq denote-prompts ',denote-prompts) + + (setq denote-known-keywords '()) + (setq denote-infer-keywords t) + (setq denote-sort-keywords t) + (setq denote-file-type ',denote-file-type) + + (setq denote-excluded-keywords-regexp nil) + (setq denote-excluded-directories-regexp nil) + + ,@(if denote-date-prompt-use-org? + '((setq denote-date-prompt-use-org-read-date t)) + '((setq denote-date-prompt-use-org-read-date nil))) + + + ,@(if (member denote-file-type '(text markdown-toml markdown-yaml)) + '((add-hook 'find-file-hook #'denote-link-buttonize-buffer)) + '()) + + (setq denote-dired-directories (list denote-directory)) + + (with-eval-after-load 'dired + (add-hook 'dired-mode-hook ',denote-dired-hook)) + + (defun rde-denote-project-find-file (&optional note-dir) + "Denote find-file using project.el's find-file. +When NOTE-DIR is not set, uses denote-directory, otherwise uses the specified +NOTE-DIR as the notes project directory. The command assumes your notes are +stored in directory understood by project.el." + (interactive) + (let* ((pr (project-current t (or note-dir denote-directory))) + (root (project-root pr)) + (dirs (list root))) + (project-find-file-in nil dirs pr nil))) + + (defun rde-find-denote () + "find-file on denote directory" + (interactive) + (find-file denote-directory)) + + (defvar denote-mode-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "n") 'denote) + (define-key map (kbd "N t") 'denote-type) + (define-key map (kbd "N d") 'denote-date) + (define-key map (kbd "N s") 'denote-subdirectory) + + (define-key map (kbd "i") 'denote-link) + (define-key map (kbd "I") 'denote-link-add-links) + (define-key map (kbd "b") 'denote-link-backlinks) + (define-key map (kbd "d") 'rde-find-denote) + (define-key map (kbd "f") 'rde-denote-project-find-file) + (define-key map (kbd "l f") 'denote-link-find-file) + (define-key map (kbd "l b") 'denote-link-find-backlink) + (define-key map (kbd "r") 'denote-rename-file) + (define-key map (kbd "R") 'denote-rename-file-using-front-matter) + map) + "Keymap for binding denote functionality.") + + (define-key global-map (kbd ,prefix-key) denote-mode-map) + + (with-eval-after-load + 'dired + (let ((map dired-mode-map)) + (define-key map (kbd "C-c C-d C-i") + 'denote-link-dired-marked-notes) + (define-key map (kbd "C-c C-d C-r") + 'denote-dired-rename-marked-files)))) + + #:keywords '(convenience) + #:elisp-packages (list emacs-denote)))) + + (feature + (name f-name) + (values `((,f-name . ,emacs-denote))) + (home-services-getter get-home-services))) + ;;; ;;; Communication. -- 2.39.2