doomemacs/modules/lang/org/contrib/roam.el
Henrik Lissner ad6a3d0f33
refactor: deprecate featurep! for modulep!
featurep! will be renamed modulep! in the future, so it's been
deprecated. They have identical interfaces, and can be replaced without
issue.

featurep! was never quite the right name for this macro. It implied that
it had some connection to featurep, which it doesn't (only that it was
similar in purpose; still, Doom modules are not features). To undo such
implications and be consistent with its namespace (and since we're
heading into a storm of breaking changes with the v3 release anyway),
now was the best opportunity to begin the transition.
2022-08-14 20:43:35 +02:00

96 lines
4 KiB
EmacsLisp

;;; lang/org/contrib/roam.el -*- lexical-binding: t; -*-
;;;###if (modulep! +roam)
(defvar +org-roam-open-buffer-on-find-file t
"If non-nil, open the org-roam buffer when opening an org roam file.")
;;
;;; Packages
(use-package! org-roam
:hook (org-load . +org-init-roam-maybe-h)
:hook (org-roam-backlinks-mode . turn-on-visual-line-mode)
:commands (org-roam-buffer-toggle-display
org-roam-dailies-find-date
org-roam-dailies-find-today
org-roam-dailies-find-tomorrow
org-roam-dailies-find-yesterday)
:preface
;; Set this to nil so we can later detect if the user has set custom values
;; for these variables. If not, default values will be set in the :config
;; section.
(defvar org-roam-directory nil)
(defvar org-roam-db-location nil)
:init
(map! :after org
:map org-mode-map
:localleader
:prefix ("m" . "org-roam")
"b" #'org-roam-switch-to-buffer
"f" #'org-roam-find-file
"g" #'org-roam-graph
"i" #'org-roam-insert
"I" #'org-roam-insert-immediate
"m" #'org-roam
"t" #'org-roam-tag-add
"T" #'org-roam-tag-delete
(:prefix ("d" . "by date")
:desc "Find previous note" "b" #'org-roam-dailies-find-previous-note
:desc "Find date" "d" #'org-roam-dailies-find-date
:desc "Find next note" "f" #'org-roam-dailies-find-next-note
:desc "Find tomorrow" "m" #'org-roam-dailies-find-tomorrow
:desc "Capture today" "n" #'org-roam-dailies-capture-today
:desc "Find today" "t" #'org-roam-dailies-find-today
:desc "Capture Date" "v" #'org-roam-dailies-capture-date
:desc "Find yesterday" "y" #'org-roam-dailies-find-yesterday
:desc "Find directory" "." #'org-roam-dailies-find-directory))
:config
(defun +org-init-roam-maybe-h ()
"Activate `org-roam-mode'. If it fails, fail gracefully."
(unless (with-demoted-errors "ORG ROAM ERROR: %s"
(org-roam-mode +1)
t)
(message "To try reinitializing org-roam, run 'M-x org-roam-mode'")
(org-roam-mode -1)))
(setq org-roam-directory
(file-name-as-directory
(file-truename
(expand-file-name (or org-roam-directory "roam")
org-directory)))
org-roam-db-location (or org-roam-db-location
(concat doom-etc-dir "org-roam.db"))
;; Make org-roam buffer sticky; i.e. don't replace it when opening a
;; file with an *-other-window command.
org-roam-buffer-window-parameters '((no-delete-other-windows . t))
org-roam-link-use-custom-faces 'everywhere
org-roam-completion-everywhere t
org-roam-completion-system
(cond ((modulep! :completion helm) 'helm)
((modulep! :completion ivy) 'ivy)
((modulep! :completion ido) 'ido)
('default)))
;; Normally, the org-roam buffer doesn't open until you explicitly call
;; `org-roam'. If `+org-roam-open-buffer-on-find-file' is non-nil, the
;; org-roam buffer will be opened for you when you use `org-roam-find-file'
;; (but not `find-file', to limit the scope of this behavior).
(add-hook! 'find-file-hook
(defun +org-roam-open-buffer-maybe-h ()
(and +org-roam-open-buffer-on-find-file
(memq 'org-roam-buffer--update-maybe post-command-hook)
(not (window-parameter nil 'window-side)) ; don't proc for popups
(not (eq 'visible (org-roam-buffer--visibility)))
(with-current-buffer (window-buffer)
(org-roam-buffer--get-create)))))
;; Hide the mode line in the org-roam buffer, since it serves no purpose. This
;; makes it easier to distinguish from other org buffers.
(add-hook 'org-roam-buffer-prepare-hook #'hide-mode-line-mode))
;; Since the org module lazy loads org-protocol (waits until an org URL is
;; detected), we can safely chain `org-roam-protocol' to it.
(use-package! org-roam-protocol
:after org-protocol)