Add :shadow parameter to package!

For to make replacing built-in packages easier.
This commit is contained in:
Henrik Lissner 2020-08-23 22:25:25 -04:00
parent 6f49f2151e
commit 1884828d22
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 21 additions and 12 deletions

View file

@ -188,10 +188,20 @@ processed."
(error "Failed to read any packages")) (error "Failed to read any packages"))
(dolist (package doom-packages) (dolist (package doom-packages)
(cl-destructuring-bind (cl-destructuring-bind
(name &key recipe disable ignore &allow-other-keys) package (name &key recipe disable ignore shadow &allow-other-keys) package
(unless ignore (unless ignore
(if disable (if disable
(cl-pushnew name doom-disabled-packages) (cl-pushnew name doom-disabled-packages)
(when shadow
(straight-override-recipe (cons shadow '(:local-repo nil)))
(let ((site-load-path (copy-sequence doom--initial-load-path))
lib)
(while (setq
lib (locate-library (concat (symbol-name shadow) ".el")
nil site-load-path))
(let ((lib (directory-file-name (file-name-directory lib))))
(setq site-load-path (delete lib site-load-path)
load-path (delete lib load-path))))))
(when recipe (when recipe
(straight-override-recipe (cons name recipe))) (straight-override-recipe (cons name recipe)))
(straight-register-package name))))))) (straight-register-package name)))))))
@ -389,7 +399,7 @@ ones."
;;; Module package macros ;;; Module package macros
(cl-defmacro package! (cl-defmacro package!
(name &rest plist &key built-in recipe ignore _type _pin _disable) (name &rest plist &key built-in recipe ignore _type _pin _disable _shadow)
"Declares a package and how to install it (if applicable). "Declares a package and how to install it (if applicable).
This macro is declarative and does not load nor install packages. It is used to This macro is declarative and does not load nor install packages. It is used to
@ -426,6 +436,10 @@ Accepts the following properties:
inform help commands like `doom/help-packages' that this is a built-in inform help commands like `doom/help-packages' that this is a built-in
package. If set to 'prefer, the package will not be installed if it is package. If set to 'prefer, the package will not be installed if it is
already provided by Emacs. already provided by Emacs.
:shadow PACKAGE
Informs Doom that this package is shadowing a built-in PACKAGE; the original
package will be removed from `load-path' to mitigate conflicts, and this new
package will satisfy any dependencies on PACKAGE in the future.
Returns t if package is successfully registered, and nil if it was disabled Returns t if package is successfully registered, and nil if it was disabled
elsewhere." elsewhere."

View file

@ -1,12 +1,6 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; lang/org/packages.el ;;; lang/org/packages.el
;; Prevent built-in Org from playing into the byte-compilation of
;; `org-plus-contrib'.
(when-let (orglib (locate-library "org" nil doom--initial-load-path))
(setq load-path (delete (substring (file-name-directory orglib) 0 -1)
load-path)))
;; HACK A necessary hack because org requires a compilation step after being ;; HACK A necessary hack because org requires a compilation step after being
;; cloned, and during that compilation a org-version.el is generated with ;; cloned, and during that compilation a org-version.el is generated with
;; these two functions, which return the output of a 'git describe ...' ;; these two functions, which return the output of a 'git describe ...'
@ -27,10 +21,11 @@
:recipe (:host github :recipe (:host github
:repo "emacs-straight/org-mode" :repo "emacs-straight/org-mode"
:files ("*.el" "lisp/*.el" "contrib/lisp/*.el")) :files ("*.el" "lisp/*.el" "contrib/lisp/*.el"))
:pin "220f2b0d93a6927eb673978c0042a1d4673e86aa") :pin "220f2b0d93a6927eb673978c0042a1d4673e86aa"
;; ...And prevent other packages from pulling org; org-plus-contrib satisfies ;; Prevents built-in Org from sneaking into the byte-compilation of
;; the dependency already: https://github.com/raxod502/straight.el/issues/352 ;; `org-plus-contrib', and inform other packages that `org-mode' satisfies the
(package! org :recipe (:local-repo nil)) ;; `org' dependency: https://github.com/raxod502/straight.el/issues/352
:shadow 'org)
(package! avy) (package! avy)
(package! htmlize :pin "49205105898ba8993b5253beec55d8bddd820a70") (package! htmlize :pin "49205105898ba8993b5253beec55d8bddd820a70")