Emacs 25 is out! What are the new features and what were my predictions11 Oct 2016, by Artur Malabarba.
Four Saturdays ago, on September 17, Emacs 25 was finally released. Almost two years before that, I wrote a post predicting a few Big things to expect from Emacs 25. Throughout the months since then, I’ve also been reporting interesting new features as they arrived on the dev builds. Today, we compile a list of all of those news posts, and review which predictions I actually got right.
For the convenience of those looking for actually practical information, I feel
we should start with a list of the posts. I must strive to be clear that this
is not a comprehensive list of new features. Not by a mile! If you want
everything, you can have a look at the news file that ships with Emacs,
/etc/NEWS, or you can read Mickey Petersen’s commented version.
The list below merely sums up most (not even all) of the features that piqued my interest over the last couple of years.
- Easily search for non-ASCII characters (char-folding search)
- Round quotes in Help buffers
- Query-replace history is enhanced
- Have prettify-symbols-mode reveal the symbol at point
- More flow control macros
- EWW improvements
- Easily install multifile package from a directory
- Better Rectangles
- Better dependency management
- User-selected packages
- Asynchronous Package Menu
- Filtering by status and archive
- Archive priorities and downgrading packages
If you’re short on time, I personally recommend checking out char-folding
search (1), archive priorities (17), and the
comment-line command (4), which are all
features you might not realize are there. The round-quotes in Help buffers (2) and
the improved query-replace history (3) are also among my favorites, but you don’t
need to do anything special to see them in action.
Now, for the indulgence of those looking for more than just practical information. On the aforementioned post, I talked about 6 things I hoped to see by the time Emacs 25 came out.
- Moving the code base to git
- This one even had a schedule date when I wrote the post, so it obviously doesn’t count as a prediction. Still, I’m extremely glad it happened as I would never have contributed myself if not for this change.
- Dynamic library loading
Now this is exciting. I originally wrote it was “looking almost in shape for release”, but I have no idea what led me to say that. This feature actually almost didn’t make it into release. It only got merged to the
emacs-25branch more than one year later, after the feature-freeze took place!
Nonetheless, it’s finally out and about, and I’m eager to see what comes out of it. If you’re interested, it’s actually very easy to get started (well… easy by C-coding standards). Aurélien Aptel has a super short tutorial on how to write, compile, and use a dynamic module in Emacs.
- Concurrency in Elisp
- I’ll count this as a half point. We don’t have proper concurrency in Elisp yet, and whether that’s something we want is still an ongoing discussion. Still, most of the points in my rant have already been addressed. The packages list does refresh asynchronously now (despite the lack of concurrency), and several optimizations have been made which speed up the actual rendering of the list.
- A Better Package Menu
- I shouldn’t have to say much here. The last 5 links on list above are all improvements to the package menu. While there’s still room for improvement, it’s quite ahead of where it was 2 years ago. Better dependency management, asynchronous refreshing, and more filtering options were all much needed improvements. Meanwhile, archive priorities are a nice cherry to top of it all off.
- A More Robust Customize Interface
- Out of the two issues that led me to
write this point, one of them has been fixed (
custom-theme-load-pathis no longer a
defcustom). Still, I’m counting this as a miss. Over the last couple of years I’ve seen other fundamental issues with the Customize interface be reported, and there’s still quite a bit of work to be done here.
- Well, OK. We still don’t have namespaces. Honestly, though, it doesn’t bother me anymore. I’ve released two packages, Names and Nameless, which are available on Elpa and help mitigate the the lack of namespaces. I use Nameless for all my Elisp coding now and that’s the end of the story for me.
Summarizing, even if we exclude the Git point (which wasn’t really a prediction), it’s a 2½ out of 5 (or 3½ if we count namespaces). That’s a pretty good outcome considering I had never even made a single contribution to Emacs core when I wrote that post. I’d love to write another one of those, but I’m not nearly as involved in the news as I was 2 years ago. Maybe in a couple of months I’ll manage to catch up.