Replace tools/prodigy with feature/services

This commit is contained in:
Henrik Lissner 2017-09-23 14:51:57 +02:00
parent 63a4a61714
commit 842f957a76
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
4 changed files with 85 additions and 10 deletions

View file

@ -0,0 +1,34 @@
;;; feature/services/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +services/create ()
"Interactively create a new prodigy service."
(interactive)
;; TODO
)
;;;###autoload
(defun +services/prodigy-delete (arg)
"Delete service at point. Asks for confirmation."
(interactive "P")
(prodigy-with-refresh
(-when-let (service (prodigy-service-at-pos))
(let ((name (plist-get service :name)))
(cond ((or arg
(y-or-n-p (format "Delete '%s' service?" name)))
(setq prodigy-services (delete service prodigy-services))
(ignore-errors
(prodigy-goto-next-line))
(message "Successfully deleted service: %s" name))
(t
(message "Aborted")))))))
;;;###autoload
(defun +services/cleanup ()
"Delete all services associated with projects that don't exist."
(interactive)
(cl-loop for service in prodigy-services
if (and (plist-member service :project)
(file-directory-p (plist-get service :project)))
collect service into services
finally do (setq prodigy-service services)))

View file

@ -0,0 +1,50 @@
;;; 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)))

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; tools/prodigy/packages.el
;;; feature/services/packages.el
(package! prodigy)

View file

@ -1,9 +0,0 @@
;;; tools/prodigy/config.el -*- lexical-binding: t; -*-
;;
;; Plugins
;;
(def-package! prodigy
:config
(set! :evil-state 'prodigy-mode 'emacs))