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.