WEBVTT
00:00.320 --> 00:02.200
Hello, my name is John Wiegley.
00:02.200 --> 00:05.040
I'm a past co-maintainer of Emacs.
00:05.040 --> 00:06.799
Nowadays, all of the work
00:06.799 --> 00:08.160
and mailing list traffic
00:08.160 --> 00:09.599
is handled by Eli Zaretskii
00:09.599 --> 00:12.559
and Lars Ingebrigtsen.
00:12.559 --> 00:14.320
I just wanted to give you an update
00:14.320 --> 00:15.360
of what has been happening
00:15.360 --> 00:16.560
and what is soon to come
00:16.560 --> 00:00:18.559
in Emacs development.
00:18.560 --> 00:19.760
So I spoke to Eli
00:19.760 --> 00:20.880
and he gave me the lowdown
00:20.880 --> 00:23.359
on Emacs 28, which is the next
00:23.359 --> 00:25.840
big release to come up yet.
00:25.840 --> 00:27.039
He says that we hope to
00:27.039 --> 00:28.160
release this soon.
00:28.160 --> 00:30.080
Pre-testing has not yet started,
00:30.080 --> 00:31.519
but maybe looking at
00:31.519 --> 00:00:33.599
the first quarter of next year.
00:33.600 --> 00:35.840
The biggest feature coming in Emacs 28
00:35.840 --> 00:39.040
is going to be native compilation,
00:39.040 --> 00:41.280
and this will make some Emacs code
00:41.280 --> 00:43.120
two to four times as fast,
00:43.120 --> 00:44.640
depending on what kind of Lisp
00:44.640 --> 00:45.360
you're running
00:45.360 --> 00:47.840
and how much of your Lisp code
00:47.840 --> 00:48.800
is just Lisp,
00:48.800 --> 00:50.879
or makes calls to primitive functions.
00:50.879 --> 00:53.680
There were previous JIT attempts.
00:53.680 --> 00:54.879
Some of them still live on
00:54.879 --> 00:56.559
in development branches,
00:56.559 --> 00:57.280
but they were found
00:57.280 --> 01:00.960
to not speed things up too much.
01:00.960 --> 01:03.280
The version coming in Emacs 28
01:03.280 --> 01:04.479
has much better results
01:04.479 --> 01:05.760
than these past attempts,
01:05.760 --> 01:06.960
but it should be noted
01:06.960 --> 01:09.439
that it has some side effects.
01:09.439 --> 01:11.439
One is that natively-compiled files
01:11.439 --> 01:13.680
are going to be system-dependent,
01:13.680 --> 01:14.960
so they can't be included
01:14.960 --> 01:16.000
in any distributions
01:16.000 --> 01:18.080
the way we do now with .elc files,
01:18.080 --> 01:20.479
since those run on any platform.
01:20.479 --> 01:22.240
This means that you will need to
01:22.240 --> 01:23.600
compile those files
01:23.600 --> 01:26.479
for your own machine, sometimes,
01:26.479 --> 01:27.360
depending on how
01:27.360 --> 01:28.799
the compilation process goes.
01:28.799 --> 01:31.520
It could vary by processor.
01:31.520 --> 01:32.720
And it requires you also
01:32.720 --> 01:33.520
to have the right
01:33.520 --> 01:35.600
compilation environment.
01:35.600 --> 01:37.200
This means that you may need tools
01:37.200 --> 01:38.560
from the gcc tool chain
01:38.560 --> 01:39.520
that aren't installed
01:39.520 --> 01:40.799
as part of the default,
01:40.799 --> 01:42.640
so you will maybe have to do some work
01:42.640 --> 01:43.680
to set up the right
01:43.680 --> 01:44.720
compilation environment
01:44.720 --> 01:46.560
for your platform.
01:46.560 --> 01:47.680
Natively-compiled files
01:47.680 --> 01:50.799
are also kept in a separate directory.
01:50.799 --> 01:52.079
There are some issues
01:52.079 --> 01:54.159
having to do with recompilation too,
01:54.159 --> 01:55.920
so there are certain changes which,
01:55.920 --> 01:57.360
if made to the Emacs source code
01:57.360 --> 01:58.560
between releases,
01:58.560 --> 02:00.159
may require you to recompile
02:00.159 --> 02:02.000
all of the natively-compiled files
02:02.000 --> 02:04.479
that you had compiled previously.
02:04.479 --> 02:06.880
Also, the file names of compiled files
02:06.880 --> 02:07.680
that get installed
02:07.680 --> 02:08.800
have hashes on them
02:08.800 --> 02:10.319
depending on the Emacs
02:10.319 --> 02:11.920
that they were built against,
02:11.920 --> 02:14.000
so Emacs should be able to detect
02:14.000 --> 02:16.239
when recompilation is necessary,
02:16.239 --> 02:17.840
but it may be difficult
02:17.840 --> 02:19.599
for distributions who want to know
02:19.599 --> 02:20.800
what all of the build files
02:20.800 --> 02:22.160
are going to be in advance
02:22.160 --> 02:23.840
in order to prepare
02:23.840 --> 02:25.360
a binary distribution
02:25.360 --> 02:27.280
for that for that platform.
02:27.280 --> 02:28.800
So these are all little wrinkles
02:28.800 --> 02:29.840
that we're going to discover
02:29.840 --> 02:30.800
and have to work out
02:30.800 --> 02:32.560
as this functionality comes out
02:32.560 --> 02:33.599
and starts getting used
02:33.599 --> 00:02:36.399
in lots of different distributions.
02:36.400 --> 02:38.560
Another feature is that Cairo is
02:38.560 --> 02:40.319
now being built with by default,
02:40.319 --> 02:42.560
and this is one step further toward
02:42.560 --> 02:44.319
better support for emojis.
02:44.319 --> 02:45.519
If you build with Cairo,
02:45.519 --> 02:47.599
you will get all of the emoji sequences
02:47.599 --> 02:49.360
defined by the latest Unicode,
02:49.360 --> 02:50.400
and in full color,
02:50.400 --> 02:52.560
the exact same as on your smartphone ,
02:52.560 --> 00:02:55.759
and it works on macOS as well.
02:55.760 --> 02:56.640
There's a new mode,
02:56.640 --> 02:58.400
but it is off by default,
02:58.400 --> 03:00.480
called context-menus mode,
03:00.480 --> 03:02.800
and this gives menus that appear
03:02.800 --> 03:03.599
when you right-click
03:03.599 --> 03:04.959
somewhere in a buffer,
03:04.959 --> 03:06.480
but now will make it easier
03:06.480 --> 03:08.080
for other modes to define
03:08.080 --> 03:09.440
what those context menus
03:09.440 --> 03:10.080
should look like,
03:10.080 --> 03:13.840
so that's sort of making that support...
03:13.840 --> 03:16.080
having it less custom
03:16.080 --> 03:17.920
in each module that implements
03:17.920 --> 03:19.360
that type of behavior.
03:19.360 --> 03:20.879
They can now do it through this context
03:20.879 --> 00:03:22.958
and then use the facility.
03:22.959 --> 03:25.120
Tab-bar and tab-line have received
03:25.120 --> 03:26.799
many enhancements.
03:26.799 --> 03:28.560
So there's new commands, new variables,
03:28.560 --> 03:30.080
there's quite a large number of changes,
03:30.080 --> 03:31.440
so if you like those modes,
03:31.440 --> 03:32.560
if you use them,
03:32.560 --> 03:33.440
then you should be happy
03:33.440 --> 03:35.040
with what's coming.
03:35.040 --> 00:03:37.839
There is a command...
03:37.840 --> 03:40.720
Now, a command can be marked
03:40.720 --> 03:42.799
as being specific to a mode,
03:42.799 --> 03:44.560
so that if you're not in that mode,
03:44.560 --> 03:46.000
then, when you press M-x,
03:46.000 --> 03:46.959
it won't appear
03:46.959 --> 03:48.319
in the tab completion list.
03:48.319 --> 03:50.799
Right now, M-x is a full population
03:50.799 --> 03:52.560
of every interactive command
03:52.560 --> 03:53.920
known to Emacs,
03:53.920 --> 03:55.120
but in many cases,
03:55.120 --> 03:57.360
unless you're in a text-mode buffer
03:57.360 --> 03:58.560
or a latex-mode buffer,
03:58.560 --> 04:00.799
or some programming language mode buffer,
04:00.799 --> 04:01.840
a lot of the commands
04:01.840 --> 04:04.480
that might be presented to you today
04:04.480 --> 04:06.239
are irrelevant to that buffer
04:06.239 --> 04:08.400
that you're in. So commands can now
04:08.400 --> 04:11.120
specify in their interactive declaration
04:11.120 --> 04:12.640
which mode they're specific to,
04:12.640 --> 04:14.319
and in that case, they will only appear
04:14.319 --> 04:16.079
in the completion list for that mode.
04:16.079 --> 04:17.840
In fact, only be available
04:17.840 --> 00:04:20.319
in that mode to execute.
04:20.320 --> 04:21.680
There are going to be
04:21.680 --> 04:23.759
transient input methods,
04:23.759 --> 04:25.440
and what this means is that right now,
04:25.440 --> 04:27.520
with Emacs, you can hit a key sequence
04:27.520 --> 04:29.520
to change your input method
04:29.520 --> 04:32.240
to, say, latin1 or to Arabic or Hebrew
04:32.240 --> 04:33.040
or some other language,
04:33.040 --> 04:35.199
so that you can start entering text
04:35.199 --> 04:38.080
using that input mode,
04:38.080 --> 04:39.759
but transient input methods
04:39.759 --> 04:40.400
will allow you
04:40.400 --> 04:42.960
to switch to an input mode temporarily.
04:42.960 --> 04:44.720
So if you're mostly writing
04:44.720 --> 04:46.720
in English text, but you want to insert
04:46.720 --> 04:48.720
one Greek letter, you don't have to
04:48.720 --> 04:49.840
switch to an input mode
04:49.840 --> 04:52.080
that has Latin and Greek letters.
04:52.080 --> 04:53.280
You can just switch over
04:53.280 --> 04:54.560
to a Greek input mode,
04:54.560 --> 04:56.639
momentarily enter in the Greek letter,
04:56.639 --> 04:57.600
and then come back
04:57.600 --> 00:05:00.879
to your default input method.
05:00.880 --> 05:02.880
show-paren-mode will be enabled
05:02.880 --> 05:04.880
by default in Emacs 28,
05:04.880 --> 05:06.720
so that's the highlighting of parens
05:06.720 --> 05:11.039
whenever your cursor is on or near
05:11.039 --> 05:12.800
a closing paren or an opening paren,
05:12.800 --> 00:05:14.559
for example.
05:14.560 --> 05:18.080
We're also going to have a NonGNU ELPA,
05:18.080 --> 05:20.639
so there will be a ELPA repository
05:20.639 --> 05:22.160
just like the ELPA we have today,
05:22.160 --> 05:24.400
except it will have packages in it
05:24.400 --> 05:25.840
that have not gone through
05:25.840 --> 05:26.880
the same level of
05:26.880 --> 05:28.560
copyright assignment requirements
05:28.560 --> 05:29.919
as the GNU ELPA.
05:29.919 --> 05:31.919
So NonGNU ELPA will make it easier
05:31.919 --> 05:34.560
for packages to get into a repository
05:34.560 --> 05:37.120
that is managed by the package.el
05:37.120 --> 00:05:39.519
that ships with Emacs.
05:39.520 --> 05:42.160
There's going to be a repeat-mode
05:42.160 --> 05:45.039
added to Emacs 28, repeat-mode.el.
05:45.039 --> 05:46.880
What this does is when you turn it on,
05:46.880 --> 05:48.720
when you enable repeat-mode,
05:48.720 --> 05:50.800
then certain commands
05:50.800 --> 05:53.120
which are executed by keybindings
05:53.120 --> 05:55.120
like C-x u for undo
05:55.120 --> 05:56.160
will allow you to just
05:56.160 --> 05:58.240
keep hitting that u, that final letter
05:58.240 --> 05:59.680
you used for the command
05:59.680 --> 06:01.600
to keep repeating that function.
06:01.600 --> 06:03.440
This works today already
06:03.440 --> 06:06.720
for things like macro repetition, C-x e,
06:06.720 --> 06:08.080
where you can just keep hitting e
06:08.080 --> 06:08.960
to repeat the macro
06:08.960 --> 06:10.000
as many times as you like,
06:10.000 --> 06:11.360
but that was a custom feature
06:11.360 --> 06:12.560
just for macros.
06:12.560 --> 06:16.319
This makes repeat mode accessible to
06:16.319 --> 00:06:18.399
most commands.
06:18.400 --> 06:20.080
The project.el package
06:20.080 --> 06:22.000
has dozens of new commands,
06:22.000 --> 06:23.759
so check the documentation there
06:23.759 --> 06:25.039
to find out what's going to be new
06:25.039 --> 00:06:26.719
in project.el.
06:26.720 --> 06:28.560
And there will be shorthands
06:28.560 --> 06:30.000
for Lisp symbols
06:30.000 --> 06:32.400
supported in the Lisp symbol reader.
06:32.400 --> 06:34.240
This means that for packages
06:34.240 --> 06:36.800
like s and f that have a whole bunch
06:36.800 --> 06:38.479
of really short named functions
06:38.479 --> 06:40.560
that might pollute the namespace,
06:40.560 --> 06:43.199
those functions now can be
06:43.199 --> 06:45.039
implemented behind a prefix
06:45.039 --> 06:47.520
where the symbol reader can be taught
06:47.520 --> 06:48.639
that there is a shorthand
06:48.639 --> 06:50.319
for that prefix,
06:50.319 --> 06:51.680
and that way, it'll only apply
06:51.680 --> 00:06:54.959
for the use of that package.
06:54.960 --> 06:57.840
And then finally, work on Emacs 29
06:57.840 --> 06:59.280
has just started.
06:59.280 --> 07:00.400
I don't have any details
07:00.400 --> 07:01.440
to report to you there,
07:01.440 --> 07:02.880
just to say that now
07:02.880 --> 07:04.000
the ship is moving on
07:04.000 --> 07:05.360
to the next release after,
07:05.360 --> 07:07.599
and Emacs 28 has a release branch
07:07.599 --> 07:08.720
and is getting cleaned up
07:08.720 --> 07:10.400
and ready for release.
07:10.400 --> 07:12.720
And that is the technical summary
07:12.720 --> 07:14.000
of what's new in Emacs.
07:14.000 --> 07:17.120
Thank you.