From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Philip Kaludercic Newsgroups: gmane.emacs.devel Subject: Re: Changes to make in elpa-packages file for nongnu elpa Date: Wed, 16 Aug 2023 11:03:45 +0000 Message-ID: <87v8dfi6zy.fsf@posteo.net> References: <87r0oftgye.fsf@posteo.net> <87350vt1wz.fsf@posteo.net> <871qgen1ln.fsf@posteo.net> <87edke4mou.fsf@posteo.net> <87wmy6kuan.fsf@posteo.net> <87wmy6w070.fsf@posteo.net> <87zg2sjleg.fsf@posteo.net> <87pm3nlbm7.fsf@posteo.net> <87zg2ri9g9.fsf@posteo.net> <87bkf7b7ls.fsf@posteo.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="12373"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Thierry Volpiatto Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Aug 16 13:04:47 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qWEKV-0002zj-Mv for ged-emacs-devel@m.gmane-mx.org; Wed, 16 Aug 2023 13:04:47 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qWEJd-00015u-Fb; Wed, 16 Aug 2023 07:03:53 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qWEJc-00015a-3X for emacs-devel@gnu.org; Wed, 16 Aug 2023 07:03:52 -0400 Original-Received: from mout01.posteo.de ([185.67.36.65]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qWEJZ-0003iH-5o for emacs-devel@gnu.org; Wed, 16 Aug 2023 07:03:51 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 09DA1240028 for ; Wed, 16 Aug 2023 13:03:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1692183827; bh=xYV3qs+XCYwZ8oNjrI1tCIjGr6U50y8u/0prHNAiZrw=; h=From:To:Cc:Subject:Autocrypt:Date:Message-ID:MIME-Version:From; b=nUh7hbV878JbxpZEh0rV9SXjbB5cRmnxjolN6+yQHKxuLRYJW4RNaaBtUrphQ8YI8 Ag/Am/0ju0drQpWqxfgEj+Vqk7S1r4lUIRiX6jTC7Sr3ERgI64fb5Pm0SYX16MwpXB +Pp/77A4h6UcPlt++OX96F1NhOt1WHLlRn7WLJMclMAa5p2WyLk3T4M0f9cpy0yqX1 aV9lRGDmWHpqq0eSouDrjyZ81Z/W2efcYrRnhOj2gSzrhl4w9kN7ECqCM7RHpLLX07 z4dPR8GwLqb5L20OC6NTWAWTFGiTCSSRghh8GWVzfLs0LnXfC9p6yfx3GWGCWGtEsP KLDrvC/UHu3AQ== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4RQlcf3XDfz9rxG; Wed, 16 Aug 2023 13:03:46 +0200 (CEST) In-Reply-To: <87bkf7b7ls.fsf@posteo.net> (Thierry Volpiatto's message of "Wed, 16 Aug 2023 10:14:11 +0000") Autocrypt: addr=philipk@posteo.net; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM Received-SPF: pass client-ip=185.67.36.65; envelope-from=philipk@posteo.net; helo=mout01.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:308807 Archived-At: Thierry Volpiatto writes: > Philip Kaludercic writes: > >> Thierry Volpiatto writes: >> >>> Philip Kaludercic writes: >>> >>>> Philip Kaludercic 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 >>>>> 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? >>> >>> Why not reusing package.el functions? >>> Why do you want to start in an isolated elpa directory? >>> Isn't something like this suffice? (just missing to fallback to CRM when >>> helm is not available) >> >> I don't know much about Helm, but does it not support CRM? > > It does, but this is a much better interface than CRM. I don't think it makes sense to add support like this in the core, but is there something we should keep in mind to not hinder integration with Helm? >>> (defun package-isolate (packages) >>> "Start an uncustomised Emacs and only load a set of PACKAGES." >>> (interactive >>> (list (let ((helm-comp-read-use-marked t)) >>> (completing-read "Packages: " (mapcar #'car (package--alist)))))) >> >> This doesn't allow selecting specific package versions, in case multiple >> are installed (which might easily happen if you use package-vc). I >> stole the code in my patch from package-delete, and I guess it would be >> possible to generalise it into a utility function. > > Ok, I don't know much how package-vc works. I can have a classical tarball package installed next to a VC package, just like you can have a built-in package or a system package, and it makes sense to be able to decide which one to isolate. >>> (let* ((name (concat "package-isolate-" (mapconcat #'identity >>> packages ","))) >> >> This doesn't work, because the above returns a string, not a list of strings. > > No, it works, the above returns a list of strings (the completing-read > allows marking and returns always a list). Not in my case, I got a type error. >>> (deps (cl-loop for p in packages >>> for sym = (intern p) >>> append (package--dependencies sym)))) >>> (apply #'start-process (concat "*" name "*") nil >>> (list (file-truename (expand-file-name invocation-name invocation-directory)) >>> "--quick" "--debug-init" >>> (format "--eval=%S" >>> `(progn >>> (require 'warnings) >>> (add-to-list 'warning-suppress-log-types 'initialization) >>> (require 'package) >>> (setq package-load-list >>> ',(append (mapcar (lambda (p) (list (intern p) t)) packages) >>> (mapcar (lambda (p) (list p t)) deps))) >>> (package-initialize))))))) >> >> This is actually a good idea, assuming there are no issues with lexical >> scoping that might arise from --eval. I didn't think of using >> package-load-list here, but it seems that this only works if we don't >> add --init-directory, because otherwise the elpa/ directory is not >> populated. > > Yes of course. > >> It seems to me, that for a proper isolated environment, we should add >> a --init-directory option. > > Why as long as other directories in elpa are not in load-path? Mainly to avoid issues with packages that might place files in the configuration directory, which might hinder the reproduction of bugs. Upon reflection, my approach might have an issue if the user wishes to install a package, for the sake of testing within the isolated environment. Perhaps it would be better to set `package-directory-list' instead? Also, would it make sense to have some visual/textual indication that this is a testing environment? Perhaps the *scratch* buffer string could be modified or the default background colour could be set to something else. >> This is easy to fix though, we just need to specify `package-user-dir' >> at startup. Here is my updated patch, merging our approaches: >> >> [2. text/x-diff; >> 0001-Add-command-to-start-Emacs-with-specific-packages.patch]... >> >> >>>> [2. text/x-diff; >>>> 0002-Add-command-to-start-Emacs-with-specific-packages.patch]... >>>> >>>> [3. text/x-diff; 0001-Add-a-function-to-query-the-Emacs-executable.patch]... >> >> I have slightly modified your version, fixing issues I had, in case >> anyone else wants to try it out: > > Thanks, sorry to not provide the CRM, I quickly wrote this. np. >> (defun package-isolate (packages) >> "Start an uncustomised Emacs and only load a set of PACKAGES." >> (interactive >> (list (mapcar #'intern (completing-read-multiple "Packages: " (mapcar #'car (package--alist)))))) >> (let* ((name (concat "package-isolate-" (mapconcat #'symbol-name packages ","))) >> (deps (mapcan #'package--dependencies packages))) >> (apply #'start-process (concat "*" name "*") nil >> (list (file-truename (expand-file-name invocation-name invocation-directory)) >> "--quick" "--debug-init" >> (format "--eval=%S" >> `(progn >> (require 'warnings) >> (add-to-list 'warning-suppress-log-types 'initialization) >> (require 'package) >> (setq package-load-list >> ',(mapcar (lambda (p) (list p t)) (append packages deps))) >> (package-initialize)))))))