branch: elpa/helm commit 3221dc30a7f6fc59547dd1479fd35cb41e418820 Author: Thierry Volpiatto <thie...@posteo.net> Commit: Thierry Volpiatto <thie...@posteo.net>
Add new isolate packages action to helm-packages --- helm-packages.el | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/helm-packages.el b/helm-packages.el index 03597d30d2..bf938f0cd7 100644 --- a/helm-packages.el +++ b/helm-packages.el @@ -108,6 +108,38 @@ as dependencies." (mapc #'package-install mkd) (error "%S:\n Please refresh package list before installing" err)))))) +(defun helm-packages-isolate-1 (packages) + "Start an Emacs with only PACKAGES loaded. +Arg PACKAGES is a list of strings." + (let* ((name (concat "package-isolate-" (mapconcat #'identity packages "_"))) + (deps (cl-loop for p in packages + for sym = (intern p) + nconc (package--dependencies sym)))) + (apply #'start-process name nil + (list (expand-file-name invocation-name invocation-directory) + "-Q" "--debug-init" + (format "--eval=%S" + `(progn + (require 'package) + (setq package-load-list + ',(append (mapcar (lambda (p) (list (intern p) t)) + packages) + (mapcar (lambda (p) (list p t)) deps))) + (package-initialize))))))) + +(defun helm-packages-isolate (_candidate) + "Start a new Emacs with only marked packages loaded." + (let* ((mkd (helm-marked-candidates)) + (pkg-names (mapcar #'symbol-name mkd)) + (isolate (if (fboundp 'package-isolate) + #'package-isolate + #'helm-packages-isolate-1))) + (with-helm-display-marked-candidates + helm-marked-buffer-name + pkg-names + (when (y-or-n-p "Start a new Emacs with only package(s)? ") + (funcall isolate pkg-names))))) + ;;; Transformer ;; ;; @@ -194,7 +226,8 @@ packages no more availables." ("Visit homepage" . helm-packages-visit-homepage) ("Reinstall package(s)" . helm-packages-package-reinstall) ("Recompile package(s)" . helm-packages-recompile) - ("Uninstall package(s)" . helm-packages-uninstall))) + ("Uninstall package(s)" . helm-packages-uninstall) + ("Isolate package(s)" . helm-packages-isolate))) (helm-build-in-buffer-source "Available external packages" :data (cl-loop for p in package-archive-contents for sym = (car p)