New doom/describe-packages command

Replaces describe-packages and adds Doom module awareness to package
documentation.
This commit is contained in:
Henrik Lissner 2019-03-04 19:49:27 -05:00
parent f6cc2644b0
commit b054190820
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
3 changed files with 83 additions and 1 deletions

View file

@ -198,6 +198,77 @@ selection of all minor-modes, active or not."
((symbolp mode) mode) ((symbolp mode) mode)
((error "Expected a symbol/string, got a %s" (type-of mode)))))) ((error "Expected a symbol/string, got a %s" (type-of mode))))))
;;;###autoload
(global-set-key [remap describe-package] #'doom/describe-package)
;;;###autoload
(defun doom/describe-package (package)
"Like `describe-packages', but is Doom-aware.
Includes information about where packages are defined and configured.
If universal arg is set, only display packages that are installed/built-in
(excludes packages on MELPA/ELPA)."
(interactive
(list
(let* ((guess (or (function-called-at-point)
(symbol-at-point))))
(require 'finder-inf nil t)
(require 'core-packages)
(doom-initialize-packages)
(let ((packages (append (mapcar #'car package-alist)
(unless current-prefix-arg
(mapcar #'car package-archive-contents))
(mapcar #'car package--builtins))))
(setq packages (sort packages #'string-lessp))
(unless (memq guess packages)
(setq guess nil))
(intern
(car
(split-string
(completing-read
(if guess
(format "Describe Doom package (default %s): "
guess)
"Describe Doom package: ")
(mapcar #'symbol-name packages)
nil t nil nil
(if guess (symbol-name guess))) " ")))))))
(describe-package package)
(with-current-buffer (help-buffer)
(let ((inhibit-read-only t))
(goto-char (point-min))
(when (and (doom-package-installed-p package)
(re-search-forward "^ *Status: " nil t))
(end-of-line)
(let ((indent (make-string (length (match-string 0)) ? )))
(insert "\n" indent "Installed by the following Doom modules:\n")
(dolist (m (get package 'doom-module))
(insert indent)
(insert-text-button
(string-trim (format " %s %s" (car m) (or (cdr m) "")))
'face 'link
'follow-link t
'action
`(lambda (_)
(let* ((category ,(car m))
(module ',(cdr m))
(dir (pcase category
(:core doom-core-dir)
(:private doom-private-dir)
(_ (doom-module-path category module)))))
(unless (file-directory-p dir)
(user-error "Module doesn't exist"))
(when (window-dedicated-p)
(other-window 1))
(find-file dir))))
(insert "\n"))
(package--print-help-section "Source")
(pcase (doom-package-backend package)
(`elpa (insert "[M]ELPA"))
(`quelpa (insert (format "QUELPA %s" (prin1-to-string (doom-package-prop package :recipe)))))
(`emacs (insert "Built-in"))))))))
;;;###autoload ;;;###autoload
(defun doom/what-face (arg &optional pos) (defun doom/what-face (arg &optional pos)
"Shows all faces and overlay faces at point. "Shows all faces and overlay faces at point.

View file

@ -217,7 +217,17 @@ elsewhere."
(macroexp-progn (macroexp-progn
(append (if disable `((add-to-list 'doom-disabled-packages ',name nil #'eq))) (append (if disable `((add-to-list 'doom-disabled-packages ',name nil #'eq)))
(if pin `((setf (alist-get ',name package-pinned-packages) ,pin))) (if pin `((setf (alist-get ',name package-pinned-packages) ,pin)))
`((setf (alist-get ',name doom-packages) ',plist) `((let ((doom--current-module
(or doom--current-module
(let ((file (FILE!)))
(cond ((file-in-directory-p file doom-private-dir)
(cons :private (intern (file-name-base file))))
((file-in-directory-p file doom-core-dir)
(cons :core nil))))))
(modules (get ',name 'doom-module)))
(cl-pushnew doom--current-module modules)
(put ',name 'doom-module modules))
(setf (alist-get ',name doom-packages) ',plist)
(not (memq ',name doom-disabled-packages))))))) (not (memq ',name doom-disabled-packages)))))))
(defmacro packages! (&rest packages) (defmacro packages! (&rest packages)

View file

@ -684,6 +684,7 @@
:desc "Find library" "l" #'find-library :desc "Find library" "l" #'find-library
:desc "View *Messages*" "m" #'view-echo-area-messages :desc "View *Messages*" "m" #'view-echo-area-messages
:desc "Toggle profiler" "p" #'doom/toggle-profiler :desc "Toggle profiler" "p" #'doom/toggle-profiler
:desc "Describe package" "P" #'describe-package
:desc "Reload theme" "r" #'doom/reload-theme :desc "Reload theme" "r" #'doom/reload-theme
:desc "Describe DOOM setting" "s" #'doom/describe-setters :desc "Describe DOOM setting" "s" #'doom/describe-setters
:desc "Describe variable" "v" #'describe-variable :desc "Describe variable" "v" #'describe-variable