This commit is contained in:
parent
647cad196a
commit
aaf5b32371
@ -801,6 +801,263 @@ me in the comments, through social media such as Twitter, or by email.
|
|||||||
Happy programming!
|
Happy programming!
|
||||||
|
|
||||||
* Emacs :@emacs:
|
* Emacs :@emacs:
|
||||||
|
** Emacs 29 is nigh! What can we expect? :dev:emacs:
|
||||||
|
:PROPERTIES:
|
||||||
|
:EXPORT_FILE_NAME: emacs-29-what-can-we-expect
|
||||||
|
:EXPORT_DATE: 2022-11-29
|
||||||
|
:export_hugo_menu: :menu "main"
|
||||||
|
:END:
|
||||||
|
It [[https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg01774.html][was announced a couple of hours ago]], Emacs 29’s branch is now cut
|
||||||
|
from the master branch! This means the ~emacs-29~ branch will from now
|
||||||
|
no longer receive any new feature, but only bug fixes.
|
||||||
|
|
||||||
|
So, what’s new with this new major release? I skimmed over the ~NEWS~
|
||||||
|
file, and here are the changes which I find interesting and even
|
||||||
|
exciting for some.
|
||||||
|
|
||||||
|
*** Major features
|
||||||
|
A couple of major improvements will be most likely present, here are
|
||||||
|
the ones that stand out the most for me.
|
||||||
|
|
||||||
|
**** Eglot is now part of Emacs core
|
||||||
|
During the last couple of years, LSP has given text editors incredible
|
||||||
|
capabilities, giving them IDE-like features relatively easily. Aside
|
||||||
|
from Elisp development, most of the code I write is now done with the
|
||||||
|
help of an LSP server, running along Emacs and analyzing my code,
|
||||||
|
suggesting and performing changes and actions for me.
|
||||||
|
|
||||||
|
Several integrations of LSP exist for Emacs, such as [[https://emacs-lsp.github.io/lsp-mode/][LSP Mode]], [[https://github.com/joaotavora/eglot][Eglot]],
|
||||||
|
and [[https://github.com/manateelazycat/lsp-bridge][lsp-bridge]]. Among the three, Eglot is now part of Emacs core! No
|
||||||
|
longer do you need to install a package, simply register an LSP server
|
||||||
|
and autocompletion, documentation, error detection, and other features
|
||||||
|
will become available right away!
|
||||||
|
|
||||||
|
I must admit I don’t really know Eglot, I personally use LSP Mode, but
|
||||||
|
with this addition to Emacs core, I might attempt the switch.
|
||||||
|
|
||||||
|
**** TreeSitter is also part of Emacs core
|
||||||
|
In case you didn’t know, Emacs’ current syntax highlighting is
|
||||||
|
currently based on a system of regexes. Although it is not the /worst/
|
||||||
|
thing to use, it’s not the best either, and it can become quite slow
|
||||||
|
on larger files.
|
||||||
|
|
||||||
|
TreeSitter parses programming languages based into a concrete syntax
|
||||||
|
tree. From there, not only can syntax highlighting can be done at high
|
||||||
|
speed, but a much deeper analysis of the code is possible and actions
|
||||||
|
such sa syntax manipulation can also be achieved since the syntax tree
|
||||||
|
itself is available as an object which can be manipulated!
|
||||||
|
|
||||||
|
In case you want some more information on TreeSitter itself, you can
|
||||||
|
check out the [[https://tree-sitter.github.io/tree-sitter/][official TreeSitter website]], or you can even check this
|
||||||
|
talk out given by TreeSitter’s creator, Max Brunsfeld.
|
||||||
|
|
||||||
|
#+begin_export html
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/Jes3bD6P0To" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||||
|
#+end_export
|
||||||
|
|
||||||
|
Well, this is not a native solution in Emacs! Currently, Emacs’
|
||||||
|
TreeSitter supports the current major modes :
|
||||||
|
- ~typescript-ts-mode~
|
||||||
|
- ~c-ts-mode~
|
||||||
|
- ~c++-ts-mode~
|
||||||
|
- ~java-ts-mode~
|
||||||
|
- ~css-ts-mode~
|
||||||
|
- ~json-ts-mode~
|
||||||
|
- ~csharp-ts-mode~
|
||||||
|
|
||||||
|
TreeSitter also holds for now a special status in the new ~emacs-29~
|
||||||
|
branch since new features can still be added to it, as its merging
|
||||||
|
with the master branch is still recent. So we might see the list of
|
||||||
|
major modes for Emacs get a bit longer yet, especially considering
|
||||||
|
TreeSitter tries to make adding new languages relatively easy.
|
||||||
|
|
||||||
|
If you can’t wait to test TreeSitter, there is already [[https://emacs-tree-sitter.github.io/][another package]]
|
||||||
|
available for Emacs you can use right now. Just be aware this is not
|
||||||
|
the same package as the one that got integrated into Emacs.
|
||||||
|
|
||||||
|
**** Install packages from source with ~package.el~
|
||||||
|
If you use [[https://github.com/radian-software/straight.el][Straight]], you might be familiar with installing packages
|
||||||
|
directly from their Git repository. Well, good news, it is now
|
||||||
|
possible to install packages from Git using Emacs’ built-in packaging
|
||||||
|
system ~package.el~! It can be done with the new function
|
||||||
|
~package-vc-install~, and packages installed that way can be updated
|
||||||
|
with ~package-vc-update~ or ~package-vc-update-all~.
|
||||||
|
|
||||||
|
On the topic of ~package.el~, there is also the new function
|
||||||
|
~package-report-bug~ which allows Emacs users to report bugs to the
|
||||||
|
developers of a package directly from Emacs! Be aware though, it only
|
||||||
|
works for packages installed through ~package.el~. Since I’m a
|
||||||
|
[[https://github.com/jwiegley/use-package][~use-package~]] and ~straight.el~ user, there is no package listed when I
|
||||||
|
invoke the command.
|
||||||
|
|
||||||
|
**** Pure GTK Emacs is here for Wayland!
|
||||||
|
One of the major issues Emacs had on Linux was its dependency on Xorg
|
||||||
|
when running in GUI mode. When running Xorg, it’s not really an issue,
|
||||||
|
but Wayland has become more and more common during the last years, and
|
||||||
|
even with the existence of XWayland, this became an annoyance.
|
||||||
|
|
||||||
|
Well, fear not, for pure GTK Emacs is here! It can now be built
|
||||||
|
Xorg-free and run natively in Wayland!
|
||||||
|
|
||||||
|
Be aware though that Wayland is basically the only use-case for pure
|
||||||
|
GTK Emacs. If you don’t use Wayland, Emacs will display a warning
|
||||||
|
message, as it will most likely cause issues if you are running Xorg.
|
||||||
|
In my case, I sometimes see some ghost text when the content of a
|
||||||
|
buffer updates (I still need pure GTK though, since I alternate
|
||||||
|
between Xorg and Wayland).
|
||||||
|
|
||||||
|
**** Compile EmacsLisp files ahead of time
|
||||||
|
With Emacs 28 came the ability to natively compile EmacsLisp if your
|
||||||
|
Emacs was built with the ability to do so, using GCC’s Just In Time
|
||||||
|
library. This results in quite the impressive boost in performance,
|
||||||
|
which made Emacs much snappier than it was before. The only issue I
|
||||||
|
had was Emacs would only compile its EmacsLisp files when they were
|
||||||
|
loaded for the first time.
|
||||||
|
|
||||||
|
This is no longer the case! If you now compile Emacs with
|
||||||
|
~--with-native-compilation=aot~, Emacs’ native EmacsLisp files will be
|
||||||
|
natively compiled along with Emacs itself! Be aware though, it can be
|
||||||
|
slow on most machines, so the time you save by not compiling these
|
||||||
|
files when launching Emacs for the first time is basically transferred
|
||||||
|
to when compiling Emacs itself. Is it worth your time? In my case, I
|
||||||
|
would say yes, because when I compile Emacs, I’m generally not in a
|
||||||
|
hurry. But in your case? Well, test it out and see for yourself.
|
||||||
|
|
||||||
|
**** Native access to SQLite databases
|
||||||
|
Emacs can now be built with native support for SQLite and the sqlite3
|
||||||
|
library. In fact, this is now a default behaviour, since you need to
|
||||||
|
pass ~--without-sqlite3~ to Emacs’ build configuration script in order
|
||||||
|
to prevent it.
|
||||||
|
|
||||||
|
This comes with a new ~sqlite-mode~ which allows you to explore SQLite
|
||||||
|
databases within Emacs and to interact with them. Check out the
|
||||||
|
~sqlite-mode-open-file~ function!
|
||||||
|
|
||||||
|
**** HaikuOS support
|
||||||
|
For all three HaikuOS users out there, good news, you now have access
|
||||||
|
to Emacs! (In all seriousness, I should check out HaikuOS one day)
|
||||||
|
|
||||||
|
Moreover, it also supports an optional window-system port to Haiku
|
||||||
|
with ~--with-be-app~. Be aware, you will need the Haiku Application Kit
|
||||||
|
development headers and a C++ compiler. Otherwise, Emacs will only run
|
||||||
|
in the terminal. If you want to also add Cairo to the mix, you can add
|
||||||
|
~--with-be-cairo~.
|
||||||
|
|
||||||
|
**** New major mode for C#
|
||||||
|
~csharp-mode~ is now a native major mode for Emacs and is based on ~cc-mode~.
|
||||||
|
|
||||||
|
*** Minor features
|
||||||
|
**** It’s easier to use Emacs in scripts!
|
||||||
|
If you like to write scripts and especially writing Lisp scripts,
|
||||||
|
Emacs now supports the option ~-x~ in order to execute scripts written
|
||||||
|
in EmacsLisp. When executing such a script with ~#!/usr/bin/emacs -x~ as
|
||||||
|
its shebang, Emacs will not read its init file (like with ~-Q~) and will
|
||||||
|
instead execute the Elisp code right away and return the last value to
|
||||||
|
the caller of the script (most likely the shell you called the script
|
||||||
|
from).
|
||||||
|
|
||||||
|
**** TRAMP natively supports Docker, Podman, and Kubernetes
|
||||||
|
Three new connections are now available for TRAMP:
|
||||||
|
- ~docker~
|
||||||
|
- ~podman~
|
||||||
|
- ~kubernetes~
|
||||||
|
You will now be able to access your containerized environment right
|
||||||
|
from Emacs without the need to write custom code.
|
||||||
|
|
||||||
|
**** Custom user directory
|
||||||
|
It is now easier to launch custom Emacs profiles without the need of
|
||||||
|
tools such as [[https://github.com/plexus/chemacs2][chemacs2]] with the addition of the flag ~--init-directory~.
|
||||||
|
This can set to any directory Emacs’ ~user-emacs-directory~ which
|
||||||
|
includes the ~init.el~ which comes along with it. Yet another reason for
|
||||||
|
me not to use a ~.emacs~ file, but the ~init.el~ file instead.
|
||||||
|
|
||||||
|
**** Support for Webp images
|
||||||
|
For quite some time, Emacs has been able to display images, but not
|
||||||
|
webp yet. Well, this is now fixed! And in fact, support for webp
|
||||||
|
images became the default behaviour, since you need to pass
|
||||||
|
~--without-webp~ to Emacs’ configuration script to disable webp support.
|
||||||
|
|
||||||
|
**** C++ mode now supports the C++20 standard
|
||||||
|
Yep. There’s nothing more to say, really. Happy coding!
|
||||||
|
|
||||||
|
**** Better handling of ~.pdmp~ files
|
||||||
|
Emacs has had for a few version the ability to dump its state into a
|
||||||
|
~pdmp~ file for faster startup time. Well now, when creating such a
|
||||||
|
file, it will include in its name a fingerprint of its current state,
|
||||||
|
although it will still prioritize an ~emacs.pdmp~ file if it exists.
|
||||||
|
|
||||||
|
**** Better mouse and touchpad support
|
||||||
|
Emacs now uses XInput 2, which enables Emacs to support more input
|
||||||
|
events, such as touchpad events. For instance, by default, a pinch
|
||||||
|
gesture on a touchpad increases or decreases the text size of the
|
||||||
|
current buffer. This is thanks to the new event ~pinch~, which comes
|
||||||
|
along with ~touch-end~.
|
||||||
|
|
||||||
|
**** Unicode 15.0 and emojis
|
||||||
|
Emacs now supports [[https://www.unicode.org/versions/Unicode15.0.0/][Unicode 15.0]], which is currently the latest Unicode
|
||||||
|
version. Although this is not directly related, quite a few new
|
||||||
|
emoji-related features have been introduced. The new prefix ~C-x 8 e~
|
||||||
|
now leads to a few new commands related to emojis:
|
||||||
|
- ~C-x 8 e e~ or ~C-x 8 e i~ :: Insert an emoji (~emoji-insert~)
|
||||||
|
- ~C-x 8 e s~ :: Search an emoji (~emoji-search~)
|
||||||
|
- ~C-x 8 e l~ :: List all emojis in a new buffer (~emoji-list~)
|
||||||
|
- ~C-x 8 e r~ :: Insert a recently inserted emoji (~emoji-recent~)
|
||||||
|
- ~C-x 8 e d~ :: Describe an emoji (~emoji-describe~)
|
||||||
|
- ~C-x 8 e +~ and ~C-x 8 e -~ :: Increase and decrease the size of any
|
||||||
|
character, but especially emojis (~emoji-zoom-increase~ and
|
||||||
|
~emoji-zoom-decrease~ respectively)
|
||||||
|
|
||||||
|
There is also the new input method ~emoji~ which allows you to type for
|
||||||
|
instance ~:grin:~ in order to get the emoji 😁.
|
||||||
|
|
||||||
|
**** True background transparency
|
||||||
|
Up until recently, if you wanted transparency with Emacs, you had no
|
||||||
|
choice but to make the whole frame transparent, including text and
|
||||||
|
images.
|
||||||
|
|
||||||
|
Thanks to the frame parameter ~alpha-background~ and its related
|
||||||
|
~alphaBackground~ X resource, it is now possible to set transparency
|
||||||
|
only for the frame’s background without affecting any of the other
|
||||||
|
elements on screen.
|
||||||
|
|
||||||
|
**** WebKit inspector in Emacs’ WebKit widget browser
|
||||||
|
You can now access the WebKit inspector when using the WebKit widget
|
||||||
|
browser in Emacs, given you are using a version of Emacs which has
|
||||||
|
been compiled with it. I wish there was a keybinding or at leas a
|
||||||
|
function for it, but apparently you can only open it with a right
|
||||||
|
click and select /Inspect Element/. Still nice to have.
|
||||||
|
|
||||||
|
**** Some news for Windows
|
||||||
|
Although it has been available for Linux users since Emacs 26.1,
|
||||||
|
Windows finally has access to double-buffering to reduce display
|
||||||
|
flicker. If you wish to disable it, you can set the frame parameter
|
||||||
|
~inhibit-double-buffering~ to ~nil~.
|
||||||
|
|
||||||
|
Emacs also follows Windows’ dark mode with Windows 10 (version 1809)
|
||||||
|
and onwards.
|
||||||
|
|
||||||
|
Emacs also now uses Windows’ native API to render images. This
|
||||||
|
includes BMP, GIF, JPEG, PNG, and TIFF images. Other formats, however,
|
||||||
|
still rely on other dependencies and libraries to properly work, such
|
||||||
|
as Webp images.
|
||||||
|
|
||||||
|
*** What’s next?
|
||||||
|
With Emacs 29 being cut, development on the master branch will now go
|
||||||
|
towards Emacs 30. Is there anything we can expect yet?
|
||||||
|
|
||||||
|
It’s still very early to say, most stable features merged into master
|
||||||
|
went to Emacs 29, and only the ~feature/pkg~ and
|
||||||
|
~feature/improved-lock-narrowing~ branches seem to have received commits
|
||||||
|
less than a week prior to the day of writing this, and I do not know
|
||||||
|
the status of other branches that received commits during the past few
|
||||||
|
weeks such as ~feature/packgae+vc~ or ~feature/eglot2emacs~ (which I
|
||||||
|
assume both got merged).
|
||||||
|
|
||||||
|
However, there are currently talks about including ~use-package~ into
|
||||||
|
Emacs! I’m a bit disappointed it won’t make it into Emacs 29, but
|
||||||
|
progress is being made on ~scratch/use-package~, and you can always
|
||||||
|
check the mailing list to check its status such as [[https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg01533.html][here]].
|
||||||
|
|
||||||
** [EN] Automatic Meaningful Custom IDs for Org Headings :emacs:orgmode:dev:
|
** [EN] Automatic Meaningful Custom IDs for Org Headings :emacs:orgmode:dev:
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:EXPORT_FILE_NAME: better-custom-ids-orgmode
|
:EXPORT_FILE_NAME: better-custom-ids-orgmode
|
||||||
|
Loading…
Reference in New Issue
Block a user