doomemacs/modules/feature/services/config.el

51 lines
1.8 KiB
EmacsLisp
Raw Normal View History

;;; feature/services/config.el -*- lexical-binding: t; -*-
(def-setting! :service (&rest plist)
"TODO"
`(after! prodigy
(prodigy-define-service ,@plist)))
;;
;; Plugins
;;
(def-package! prodigy
:commands (prodigy prodigy-view-mode prodigy-add-filter)
:config
(set! :evil-state 'prodigy-mode 'emacs)
;; Make services, etc persistent between Emacs sessions
(setq prodigy-services (persistent-soft-fetch 'prodigy-services "prodigy")
prodigy-tags (persistent-soft-fetch 'prodigy-tags "prodigy")
prodigy-filters (persistent-soft-fetch 'prodigy-filters "prodigy"))
(defun +services|save ()
"Save all services, tags and filters to files."
(+services/cleanup)
(cl-loop for sym in '(prodigy-services prodigy-tags prodigy-filters)
do (persistent-soft-store sym (symbol-value sym) "prodigy")))
(add-hook 'kill-emacs-hook #'+services|save)
(defun +services*prodigy-services (orig-fn &rest args)
"Adds a new :project property to prodigy services, which hides the service
unless invoked from the relevant project."
(let ((project-root (downcase (doom-project-root)))
(services (apply orig-fn args)))
(if current-prefix-arg
services
(cl-remove-if-not (lambda (service)
(let ((project (plist-get service :project)))
(or (not project)
(file-in-directory-p project-root project))))
services))))
(advice-add #'prodigy-services :around #'+services*prodigy-services)
;; Keybindings
(map! :map prodigy-mode-map "d" #'+services/prodigy-delete)
(when (featurep! :feature evil)
(map! :map prodigy-mode-map
"j" #'prodigy-next
"k" #'prodigy-prev)))