Is it possible to downgrade packages installed with ELPA? - emacs

I updated today my packages in emacs with ELPA and after the update I'm stuck with the
Variable binding depth exceeds max-specpdl-size
error.
Since it is not easy to debug, is it possible to downgrade the packages that were updated? Where can I find an ELPA log where I can get the previous version of these packages?

I second #lawlist's recommendation to (setq debug-on-error t) early in your ~/.emacs file. You can also use emacs --debug-init to get a similar result. This said, sometimes the kind of error you get here can also prevent the debugger from showing up. I recommend you M-x report-emacs-bug and describe the problem, along with any additional info you find, including the solution you found, if any.
As for downgrading a package, it's technically possible, but there is no UI support for it. And there's no log of package installs either. Please do mention this in the bug-report as well, since it's indeed a good idea to try and keep track of those things.
Sorry.

Related

ht.elc fails to provide feature ht

I use emacs org-mode heavily, but don't usually use emacs otherwise. I am still using emacs 25.3 but also have 26.3 installed. This evening, after a Windows Update (likely cause of the problem?), when I restarted emacs (runemacs) under 25.3 I received the following error message.
error: Required feature ‘ht’ was not provided
I have also tried running it under emacs 26.3 and receive a slightly more helpful error message "c:etc. etc. /AppData/Roaming/.emacs.d/elpa/ht-20190924.704/ht.elc failed to provide feature ‘ht’"
I have not changed or updated any of the packages in several weeks. So, it is unlikely to be a change in org-mode or emacs.
I have experimented around with a variety of different approaches but without any luck. Among other things I restored the elpa files and my customization files from a back-up of a couple of days ago without getting a different results.
package-list-package with emacs 25.3 works with the error message, and I can upgrade the packages (2) that can be upgraded. However that also makes no difference to the error message I receive when I restart emacs. This does imply that ht.elc is working since, without it, you can't install packages since the new package needs to have its hash code checked. If I delete the ht package and try to update packages without it, updates fail on the hash code check.
package-list-package with emacs 26.3 is a whole other problem which might be why I'm not using it. TLS connections fail, and it can't connect to melpa, orgmode.org, etc.
In any case, I can't load my customization files and can't use org-mode at this point. Anyone have any ideas, questions or suggestions?
Thanks in advance.
This is a solution, without being an answer.
Using package-list-packages, and looking at the details for the ht package, it showed an "alternative" version being available from melpa; same release number. So, I chose to install it and a refreshed list of packages then showed that I had the same version installed twice.
I then closed emacs and restarted it. It started with a similar error message, but this time referring to the dash package. Repeated the duplicate install process as described above.
I again closed emacs and restarted it, and now it loads and runs correctly.
I had tried previously to just delete the ht package from the elpa directory, but doing that and attempting to install a fresh package resulted in a shower of errors. I don't remember all of them but at least one of them was that emacs was unable to read the package signature.
So, problem solved, but I still have no idea why it occurred in the first place, since it had been weeks since I had updated any packages, nor why the restore of the directories from several days ago didn't solve the problem.
And before anyone yells at me about moving to the current emacs, I have now installed the missing dependencies and am running on 26.3.

emacs 24.5 Args out of range: #<buffer *scratch*>, 9017, 10107

I just finished upgrading to emacs 24.5. After starting up emacs, I got the error message:
"run-hooks: Args out of range: #, 9017, 10107"
This error does not show up when using emacs 24.3,
I suspect it's related to yassnippet but not sure. Does anybody encounter similar problem?
I was running emacs 24.5 for quite a few months and never encountered that particular error. It is almost certainly being caused either by something in your init file or one of the packages you have installed. Try running with -q and see if you get the error - if you don't, then it is definitely something being done in your innit file.
In general, compiled elisp is backwards compatible, but I have found it good practice to re-compile all *.elc files when you upgrade to a new version. If you haven't done that, highly recommend doing that and see if that fixes the problem.
Use the --debug-init command line option when starting emacs to get a more meaningful backtrace which will help you identify where in your init the problem is being generated. At the vary least, this should provide you with enough info to post a more targeted quesiton, which will usually provide more useful assistance.

show changelog after M-x list-packages

After updating all installed packages via M-x list-packages, U, x, how can I easily do any or all of the following:
see a list of the packages (and their repository URLs) that were just updated
view the changelog of each updated package since the previously installed version
see a diff of the current package elisp code vs. the previous one
Only the first question can be asked easily with existing emacs packages (to my knowledge). I use pallet that uses cask to keep track of packages. Normally I just run M-x pallet-update, but to get a preview of pending updates I cd ~/.emacs.d and run cask outdated.
Pallet code might provide a good starting point to start writing code to answer the other two questions.
An other, more desperate, approach would be to try to parse the text that updating adds to emacs Messages buffer, but is not a good way to do anything.
You can't. The features aren't there. Write a feature request, or something.

How can I gracefully drop support for older emacsen in my elisp package?

I maintain a fairly well-used emacs package (ido-ubiquitous), and in the next version I plan to drop support for Emacs 23 and below. People who use Emacs 23 and below will be able to continue using the current version of my package.
However, I don't want to have Emacs 23 users upgrading via ELPA or git or something else and ending up with the new version that isn't compatible with their emacs. Is there a generally accepted way of handling this gracefully? Do I have any choice short of renaming the new version to "ido-ubiquitous-ng" or something?
ELPA/package.el
To prevent updates via package.el, add the special dependency (emacs "24.1") to the Package-Requires list. See Library Headers in the Emacs Lisp Manual, in the description of the Package-Requires: header:
[…] The package code automatically defines a package named ‘emacs’ with the version number of the currently running Emacs. This can be used to require a minimal version of Emacs for a package.
The package.el which is distributed independently for Emacs 23 and below does not provide this special package. Thus, any attempt to install your package on Emacs 23 will fail with a message complaining about “emacs” being unavailable for installation, leaving the old, compatible version in place.
However, when using this, be prepared to handle complaints from users of Emacs 24. Many users apparently do not delete their old package.el when upgrading to Emacs 24. Thus the old package.el overrides the new built-in one, leading to spurious errors on installation.
ELGet
I do not know Elget. Probably ask its author for help in this matter.
Git submodules, Tarballs and other legacy methods
I do not think, that you can really prevent updates, if users install your package in a legacy way (e.g. Git submodules, distribution packages, etc.). You can only complain after your package was updated, which is arguably too late, because the incompatible code is now already there.
You may choose to add an explicit version check, with a detailed error. I consider this superfluous, though. If you really go for Emacs 24, you will be using incompatible functions, so your package won't load successfully, whether you explicitly prevent it or not. So save yourself of superfluous code :)
TL;DR (+ personal experience)
First of all, please do not rename your package. Few users can follow the news on each and every installed package. Thus many users will not immediately realize that the package was renamed, and continue to use an outdated version without notice or warning. Effectively, you would sort of punish Emacs 24 users of your package.
Add the special dependency to prevent accidental updates via package.el. Add prominent documentation, that your package requires Emacs 24, like in the first section of your Github Readme. Then, let the matter rest. Anything else is likely more hassle that it is worth.
In my personal experience, Emacs users are not stupid (well, at least the majority isn't). They read documentation. They understand documentation.
Users of Emacs 23 know that their Emacs is outdated. Many of them expect incompatibilities and breakage. If the package suddenly breaks for them, they will seek advice on Github, realize that the package is not available for Emacs 23 anymore, and either go back to the last working release, or (hopefully) upgrade their Emacs.

Delete built-in packages in Emacs

Is it possible to remove built-in Emacs packages like "tetris"? They can't be marked to be deleted in package list as of 24.1. It would be nice to have a minimal installation of Emacs - even though barely useful - by deleting some or all built-in packages. Is it possible to do somehow, and will this ability added in future?
Emacs should start and be useable even if the whole lisp directory is empty (note that we rarely/never test it, so I don't guarantee that it'll work, but at least in principle it should and if it doesn't you should report it with M-x report-emacs-bug). So feel free to remove any and all packages in there you don't find useful, in order to create a trimmed-down version of Emacs.
You could just remove the elc files of all of the packages you want.
For example, in the version of emacs located in the ubuntu repository the tetris package is located in:
/usr/share/emacs/23.3/lisp/play/tetris.elc
If you move or remove it, emacs will continue to work, but you won't be able to play tetris anymore.
You might want to inspect the package--builtins variable. That said - there is little sense in removing any packages installed via package.el since package.el extracts and loads automatically only a package's autoloads - therefore having many installed packages doesn't result in any significant overhead. I'm quite certain that removing built-in packages will never be a feature of package.el.