Replace tools/prodigy with feature/services
This commit is contained in:
parent
63a4a61714
commit
842f957a76
4 changed files with 85 additions and 10 deletions
34
modules/feature/services/autoload.el
Normal file
34
modules/feature/services/autoload.el
Normal 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)))
|
50
modules/feature/services/config.el
Normal file
50
modules/feature/services/config.el
Normal 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)))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
;; -*- no-byte-compile: t; -*-
|
;; -*- no-byte-compile: t; -*-
|
||||||
;;; tools/prodigy/packages.el
|
;;; feature/services/packages.el
|
||||||
|
|
||||||
(package! prodigy)
|
(package! prodigy)
|
|
@ -1,9 +0,0 @@
|
||||||
;;; tools/prodigy/config.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;;
|
|
||||||
;; Plugins
|
|
||||||
;;
|
|
||||||
|
|
||||||
(def-package! prodigy
|
|
||||||
:config
|
|
||||||
(set! :evil-state 'prodigy-mode 'emacs))
|
|
Loading…
Add table
Add a link
Reference in a new issue