From: Philip Kaludercic <philipk@posteo.net>
To: Thierry Volpiatto <thievol@posteo.net>
Cc: emacs-devel@gnu.org
Subject: Re: Changes to make in elpa-packages file for nongnu elpa
Date: Tue, 15 Aug 2023 16:55:03 +0000 [thread overview]
Message-ID: <87zg2sjleg.fsf@posteo.net> (raw)
In-Reply-To: <87wmy6w070.fsf@posteo.net> (Philip Kaludercic's message of "Tue, 08 Aug 2023 07:52:03 +0200")
[-- Attachment #1: Type: text/plain, Size: 1436 bytes --]
Philip Kaludercic <philipk@posteo.net> writes:
>>>> It is used specially for reproducing bugs in a clean environment, see it
>>>> as emacs -Q for Emacs when reporting bugs. This script starts Emacs -Q
>>>> with only Helm loaded, this ensure the bug if one comes from Helm and
>>>> not another package. This is important especially nowaday people are
>>>> using "Emacs distribution" with the world list of packages installed.
>>>> Apart that the script is useful to quickly launch Emacs with helm, one
>>>> can use it from the Helm directory or symlinked to e.g. ~/bin.
>>>
>>> I see. In that case is there any reason you implement this as a shell
>>> script?
>>
>> Well when I wrote the script, packages where not existing and from
>> outside emacs it is actually the only way to run a package isolated.
>>
>>> (It might be interesting to provide something like this for
>>> package.el, to test packages in a generic way.)
>>
>> Yes, this would be interesting, it would be something like this:
>>
>> Emacs -Q
>> M-x <A command that run a package alone, isolated from other
>> packages nuisances>
>
> I was actually thinking of a command like
>
> M-x package-isolate RET foo,bar,baz RET
>
> and a new instance of Emacs using -Q is spun up, with all the packages
> you have listed loaded, and nothing else... Sounds like a fun little
> weekend project ;^)
Here is my first attempt at providing this kind of a command. Any
comments?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0002-Add-command-to-start-Emacs-with-specific-packages.patch --]
[-- Type: text/x-diff, Size: 4095 bytes --]
From ae254f69f789ab4fa2b83bcf2cdc64291ae8aff6 Mon Sep 17 00:00:00 2001
From: Philip Kaludercic <philipk@posteo.net>
Date: Tue, 15 Aug 2023 18:39:14 +0200
Subject: [PATCH 2/2] Add command to start Emacs with specific packages
* lisp/emacs-lisp/package.el (package-isolate): Add command.
* etc/NEWS: Announce it.
---
etc/NEWS | 6 +++++
lisp/emacs-lisp/package.el | 50 ++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+)
diff --git a/etc/NEWS b/etc/NEWS
index 57f04609679..c374695a571 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -505,6 +505,12 @@ project, that you can quickly select using 'project-switch-project'
When non-nil, package specifications with side-effects for building
software will be used when building a package.
+---
+*** New command to start Emacs only with specific packages
+The command 'package-isolate' is equivalent to starting Emacs with the
+-Q flag and loading specific packages (and their dependencies)
+manually.
+
** Flymake
+++
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index b3062d2608b..c0bbdacec84 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2625,6 +2625,56 @@ package-autoremove
removable))
(message "Nothing to autoremove")))))
+(defun package-isolate (packages)
+ "Start a new instance of Emacs and load only PACKAGES."
+ (interactive
+ (cl-loop for p in (cl-loop for p in (package--alist) append (cdr p))
+ unless (package-built-in-p p)
+ collect (cons (package-desc-full-name p) p) into table
+ finally return
+ (list (cl-loop for c in (completing-read-multiple
+ "Isolate packages: " table
+ nil t)
+ collect (alist-get c table nil nil #'string=))
+ current-prefix-arg)))
+ (cl-assert (cl-every #'package-desc-p packages))
+ (let* ((name (concat "package-isolate-" (mapconcat #'package-desc-full-name
+ packages ",")))
+ (tmp-init (make-temp-file name t))
+ (elpa (expand-file-name "elpa" tmp-init))
+ args)
+ (make-directory elpa)
+ (dolist (package packages)
+ ;; We need to recursively expand all the dependencies of the
+ ;; requested packages and all of them to `load-path'.
+ (dolist (package (named-let loop ((pkg-desc package))
+ (let (deps)
+ (dolist (req (package-desc-reqs pkg-desc))
+ (setq deps (nconc
+ (catch 'found
+ (dolist (p (apply #'append (mapcar #'cdr (package--alist))))
+ (when (and (string= (car req) (package-desc-name p))
+ (version-list-<= (cadr req) (package-desc-version p)))
+ (throw 'found (loop p)))))
+ deps)))
+ (cons pkg-desc deps))))
+ (let* ((real (package-desc-dir package))
+ (link (expand-file-name (file-name-nondirectory real) elpa)))
+ (make-symbolic-link real link t)
+ (push (format "--directory=%s" link) args))
+ (let* ((load-suffixes '(".el" ".elc"))
+ (autoload (locate-library (package--autoloads-file-name package))))
+ (push (format "--load=%s" autoload) args))))
+ (apply #'start-process (concat "*" name "*") nil
+ (append (list (or (emacs-executable) "emacs")
+ (format "--eval=%S"
+ '(progn
+ (require 'warnings)
+ (add-to-list 'warning-suppress-log-types 'initialization)))
+ "--quick" "--debug-init"
+ "--init-directory" tmp-init)
+ args))))
+
\f
;;;; Package description buffer.
--
2.39.2
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0001-Add-a-function-to-query-the-Emacs-executable.patch --]
[-- Type: text/x-diff, Size: 1330 bytes --]
From bc9ee566cb9fee337f94870aa718d9b5e57c007b Mon Sep 17 00:00:00 2001
From: Philip Kaludercic <philipk@posteo.net>
Date: Tue, 15 Aug 2023 18:37:59 +0200
Subject: [PATCH 1/2] Add a function to query the Emacs executable
* src/emacs.c (Femacs_executable): Add new function.
(syms_of_emacs): Announce it.
---
src/emacs.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/emacs.c b/src/emacs.c
index 687b8c7f81f..4869093ce09 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -3039,6 +3039,18 @@ DEFUN ("kill-emacs", Fkill_emacs, Skill_emacs, 0, 2, "P",
exit (exit_code);
}
+DEFUN ("emacs-executable", Femacs_executable, Semacs_executable, 0, 0, "",
+ doc: /* Return a string with the file name of the Emacs executable.
+If this is not known, nil will be returned instead. */)
+ (void)
+{
+ static Lisp_Object *string;
+ if (string)
+ return string;
+ if (initial_emacs_executable)
+ return string = build_string(initial_emacs_executable);
+ return Qnil;
+}
/* Perform an orderly shutdown of Emacs. Autosave any modified
buffers, kill any child processes, clean up the terminal modes (if
@@ -3566,6 +3578,7 @@ syms_of_emacs (void)
#endif
defsubr (&Skill_emacs);
+ defsubr (&Semacs_executable);
defsubr (&Sinvocation_name);
defsubr (&Sinvocation_directory);
--
2.39.2
next prev parent reply other threads:[~2023-08-15 16:55 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-07 7:57 Changes to make in elpa-packages file for nongnu elpa Thierry Volpiatto
2023-08-07 13:30 ` Philip Kaludercic
2023-08-07 18:19 ` Thierry Volpiatto
2023-08-07 20:33 ` Philip Kaludercic
2023-08-08 4:33 ` Thierry Volpiatto
2023-08-08 5:52 ` Philip Kaludercic
2023-08-08 6:17 ` Thierry Volpiatto
2023-08-15 16:55 ` Philip Kaludercic [this message]
2023-08-15 17:34 ` Eshel Yaron
2023-08-15 19:39 ` Proposal for 'package-isolate' command Philip Kaludercic
2023-08-17 10:53 ` Adam Porter
2023-08-15 18:56 ` Changes to make in elpa-packages file for nongnu elpa Eli Zaretskii
2023-08-15 19:52 ` Proposal for 'package-isolate' command Philip Kaludercic
2023-08-16 11:25 ` Eli Zaretskii
2023-08-16 18:48 ` Philip Kaludercic
2023-08-16 6:51 ` Changes to make in elpa-packages file for nongnu elpa Thierry Volpiatto
2023-08-16 10:10 ` Philip Kaludercic
2023-08-16 10:14 ` Thierry Volpiatto
2023-08-16 11:03 ` Philip Kaludercic
2023-08-16 11:55 ` Thierry Volpiatto
2023-08-16 18:34 ` Proposal for 'package-isolate' command Philip Kaludercic
2023-08-16 18:49 ` Stefan Kangas
2023-08-16 19:00 ` Philip Kaludercic
2023-08-17 5:30 ` Thierry Volpiatto
2023-08-17 8:34 ` Philip Kaludercic
2023-08-17 9:07 ` Eshel Yaron
2023-08-17 14:19 ` Philip Kaludercic
2023-08-17 13:32 ` Thierry Volpiatto
2023-08-17 14:04 ` Philip Kaludercic
2023-08-17 14:15 ` Thierry Volpiatto
2023-08-17 13:56 ` Thierry Volpiatto
2023-08-17 14:18 ` Philip Kaludercic
2023-08-17 14:28 ` Thierry Volpiatto
2023-08-17 18:17 ` Philip Kaludercic
2023-08-18 4:57 ` Thierry Volpiatto
2023-08-18 5:44 ` Eli Zaretskii
2023-08-18 7:49 ` Philip Kaludercic
2023-08-18 12:43 ` Thierry Volpiatto
2023-08-18 18:34 ` Adding package and package-vc to ELPA Philip Kaludercic
2023-08-19 10:26 ` Thierry Volpiatto
2023-08-20 6:40 ` Proposal for 'package-isolate' command Thierry Volpiatto
2023-08-20 7:51 ` Philip Kaludercic
2023-08-20 16:06 ` Thierry Volpiatto
2023-08-20 18:41 ` Philip Kaludercic
2023-08-20 19:15 ` Thierry Volpiatto
2023-08-20 20:24 ` Thierry Volpiatto
2023-08-20 20:28 ` Philip Kaludercic
2023-08-16 14:10 ` Changes to make in elpa-packages file for nongnu elpa Eli Zaretskii
2023-08-16 18:52 ` Philip Kaludercic
2023-08-08 6:01 ` Thierry Volpiatto
2023-08-08 6:34 ` Michael Albinus
2023-08-08 16:37 ` Philip Kaludercic
2023-08-08 16:41 ` Michael Albinus
2023-08-09 7:06 ` Philip Kaludercic
2023-08-09 11:53 ` Eli Zaretskii
2023-08-09 14:53 ` Philip Kaludercic
2023-08-09 14:55 ` Eli Zaretskii
2023-08-09 15:24 ` Philip Kaludercic
2023-08-09 16:23 ` Eli Zaretskii
2023-08-09 3:47 ` Richard Stallman
-- strict thread matches above, loose matches on Subject: below --
2023-08-09 21:55 No Wayman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zg2sjleg.fsf@posteo.net \
--to=philipk@posteo.net \
--cc=emacs-devel@gnu.org \
--cc=thievol@posteo.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.