WEBVTT 00:00:00.080 --> 00:00:03.040 Hello EmacsConf! This is John Wiegley, I'm 00:00:03.040 --> 00:00:04.960 one of the co-maintainers of Emacs along 00:00:04.960 --> 00:00:06.319 with Eli Zaretskii 00:00:06.319 --> 00:00:09.280 and Lars Ingebrigtsen, and I wanted to 00:00:09.280 --> 00:00:09.840 give you 00:00:09.840 --> 00:00:12.639 a technical update on what has been 00:00:12.639 --> 00:00:14.960 happening 00:00:14.960 --> 00:00:17.573 with the Emacs in the last year. 00:00:17.573 --> 00:00:20.640 So, specifically we have a few notes that 00:00:20.640 --> 00:00:21.600 I've gotten from 00:00:21.600 --> 00:00:24.480 a call with Eli, he's been in charge of 00:00:24.480 --> 00:00:25.840 directing most of the 00:00:25.840 --> 00:00:28.000 technical contributions on the mailing 00:00:28.000 --> 00:00:30.160 list and monitoring all the patches. 00:00:30.160 --> 00:00:33.200 So, I'm more here just as a messenger. 00:00:33.200 --> 00:00:35.840 He says that we have good progress and 00:00:35.840 --> 00:00:37.120 support for Cairo, 00:00:37.120 --> 00:00:39.040 this is going to be enabled by default 00:00:39.040 --> 00:00:40.320 in Emacs 28, 00:00:40.320 --> 00:00:42.480 and Cairo plus HarfBuzz is going to be 00:00:42.480 --> 00:00:44.800 the preferred rendering combination. 00:00:44.800 --> 00:00:46.879 So, Cairo support is not new, but in the 00:00:46.879 --> 00:00:48.719 past there were a lot of bugs in the 00:00:48.719 --> 00:00:51.440 code, and so it was made experimental. 00:00:51.440 --> 00:00:52.960 Most of those bugs have been fixed 00:00:52.960 --> 00:00:54.960 recently, and now it becomes the default 00:00:54.960 --> 00:00:56.320 in the next major version, 00:00:56.320 --> 00:00:58.320 which will enable several good features 00:00:58.320 --> 00:01:00.320 such as color emojis, if you're looking 00:01:00.320 --> 00:01:01.680 forward to those. 00:01:01.680 --> 00:01:04.720 Xft, as a result is deprecated. There are 00:01:04.720 --> 00:01:06.560 bugs not getting fixed in that code, it 00:01:06.560 --> 00:01:07.760 doesn't appear to be very well 00:01:07.760 --> 00:01:08.720 maintained. 00:01:08.720 --> 00:01:10.960 It was the most advanced font backend 00:01:10.960 --> 00:01:13.760 in Emacs before Cairo became dependable. 00:01:13.760 --> 00:01:15.920 So, now that we have a more a better 00:01:15.920 --> 00:01:17.840 maintained and available solution in 00:01:17.840 --> 00:01:19.360 Cairo, we're going to go from that, 00:01:19.360 --> 00:01:21.839 go from Xft to that. 00:01:21.839 --> 00:01:23.840 Native compilation in Lisp 00:01:23.840 --> 00:01:26.400 will also be landing soon. It's currently 00:01:26.400 --> 00:01:28.080 on a branch, but there are several people 00:01:28.080 --> 00:01:28.799 using it, 00:01:28.799 --> 00:01:31.040 they say, they're very impressed. It does 00:01:31.040 --> 00:01:32.479 require live GCC 00:01:32.479 --> 00:01:35.600 JIT to be installed for it to work, and 00:01:35.600 --> 00:01:37.439 this means you have to have GCC 10 00:01:37.439 --> 00:01:38.960 installed. 00:01:38.960 --> 00:01:41.040 Execution of Emacs Lisp with native 00:01:41.040 --> 00:01:42.240 compilation on 00:01:42.240 --> 00:01:45.280 is about 2.5 times faster than the 00:01:45.280 --> 00:01:46.159 bytecode 00:01:46.159 --> 00:01:48.399 interpreter, we don't yet have any 00:01:48.399 --> 00:01:49.439 measurements on 00:01:49.439 --> 00:01:51.600 memory or how it affects resources 00:01:51.600 --> 00:01:52.960 besides CPU, so, 00:01:52.960 --> 00:01:54.720 we do look forward to having more 00:01:54.720 --> 00:01:56.399 numbers and analysis to see what the 00:01:56.399 --> 00:01:58.320 real impact of that is going to be, 00:01:58.320 --> 00:02:01.360 also, it may vary in compute advantage 00:02:01.360 --> 00:02:02.799 based on the type of workload that 00:02:02.799 --> 00:02:04.320 you're performing. 00:02:04.320 --> 00:02:06.240 A downside to the native compilation at 00:02:06.240 --> 00:02:08.080 the moment is that, it takes a long 00:02:08.080 --> 00:02:10.720 time to compile even when you're doing a 00:02:10.720 --> 00:02:12.720 16 core build of Emacs, 00:02:12.720 --> 00:02:14.959 it can still take 15 minutes to compile 00:02:14.959 --> 00:02:15.760 Emacs 00:02:15.760 --> 00:02:17.840 and all of its Lisp code 00:02:17.840 --> 00:02:19.520 with this enabled. 00:02:19.520 --> 00:02:21.840 Also, this is going to have to happen on 00:02:21.840 --> 00:02:23.120 every user's machine 00:02:23.120 --> 00:02:25.360 because we cannot distribute the native 00:02:25.360 --> 00:02:27.520 compilation products, they are specific 00:02:27.520 --> 00:02:29.760 to the processor that you might be 00:02:29.760 --> 00:02:30.806 running on. 00:02:30.806 --> 00:02:33.920 So, the Emacs distribution will remain much 00:02:33.920 --> 00:02:35.680 as it is now, but if you want to have the 00:02:35.680 --> 00:02:37.760 benefits of natively compiled 00:02:37.760 --> 00:02:39.599 core Lisp files, you're going to have to 00:02:39.599 --> 00:02:41.519 spend that time and have GCC 10 00:02:41.519 --> 00:02:42.400 available 00:02:42.400 --> 00:02:45.840 to get that compilation support. 00:02:45.840 --> 00:02:48.959 The GTK only build is being prepared 00:02:48.959 --> 00:02:52.160 for merging. What this does is, it 00:02:52.160 --> 00:02:52.959 throws away 00:02:52.959 --> 00:02:55.120 most of the other tool kits that Emacs 00:02:55.120 --> 00:02:56.000 was using 00:02:56.000 --> 00:02:59.280 and relies only on GTK, making Emacs 00:02:59.280 --> 00:03:01.760 much more of a GTK application than it 00:03:01.760 --> 00:03:03.920 has been. 00:03:03.920 --> 00:03:06.480 The main issue here is that we were 00:03:06.480 --> 00:03:08.480 abusing GTK in some ways that weren't 00:03:08.480 --> 00:03:09.360 really meant, 00:03:09.360 --> 00:03:10.879 and now we're going to be more of a 00:03:10.879 --> 00:03:12.879 first club…, GTK will be more of a first 00:03:12.879 --> 00:03:14.080 class citizen in the 00:03:14.080 --> 00:03:17.440 approach and the ways that we use it, and 00:03:17.440 --> 00:03:19.280 be using it in the ways that the GTK 00:03:19.280 --> 00:03:21.200 developers intended. 00:03:21.200 --> 00:03:23.360 There is going to be much more support 00:03:23.360 --> 00:03:24.640 for xt-mouse. 00:03:24.640 --> 00:03:27.280 So, xt-mouse allows you to use your mouse 00:03:27.280 --> 00:03:29.120 inside of a terminal window, 00:03:29.120 --> 00:03:30.799 which you could do before, but there were 00:03:30.799 --> 00:03:33.120 certain aspects such as menus 00:03:33.120 --> 00:03:36.159 that weren't supported. So, instead of 00:03:36.159 --> 00:03:38.239 having kind of partial support for mouse 00:03:38.239 --> 00:03:40.473 inside of an XTerm, with xt-mouse, 00:03:40.473 --> 00:03:42.879 you get full support. This is going 00:03:42.879 --> 00:03:44.959 to allow 00:03:44.959 --> 00:03:46.720 changes in the way that things can be 00:03:46.720 --> 00:03:48.159 bound, the ways that 00:03:48.159 --> 00:03:51.200 key bindings can…, the mouse events can 00:03:51.200 --> 00:03:53.200 be mapped to key bindings while in 00:03:53.200 --> 00:03:56.879 XTerms, and yeah, little by little 00:03:56.879 --> 00:03:58.480 this support is being extended even 00:03:58.480 --> 00:03:59.040 further, 00:03:59.040 --> 00:04:01.599 so we look forward to seeing that 00:04:01.599 --> 00:04:04.080 develop in the near term. 00:04:04.080 --> 00:04:06.239 Once this is merged by the way, also then 00:04:06.239 --> 00:04:08.080 Emacs will have mouse support in every 00:04:08.080 --> 00:04:09.840 one of its available configurations, 00:04:09.840 --> 00:04:12.173 which has not been true until now. 00:04:12.173 --> 00:04:14.680 Emacs 27 will be soon releasing 00:04:14.680 --> 00:04:17.519 27.2, and the pretest for that should 00:04:17.519 --> 00:04:19.919 begin sometime soon after EmacsConf is 00:04:19.919 --> 00:04:20.880 done. 00:04:20.880 --> 00:04:23.360 And finally Emacs 28 is going to get 00:04:23.360 --> 00:04:24.800 better emoji support, 00:04:24.800 --> 00:04:26.479 right now emojis are registered 00:04:26.479 --> 00:04:29.120 internally within Emacs as symbols 00:04:29.120 --> 00:04:31.759 which works in some ways but does not 00:04:31.759 --> 00:04:33.759 support some of the special features 00:04:33.759 --> 00:04:37.360 of emojis such as different 00:04:37.360 --> 00:04:40.000 skin tones for the hand emoji or face 00:04:40.000 --> 00:04:41.120 emojis. 00:04:41.120 --> 00:04:43.280 In Emacs 28, emojis are going to have 00:04:43.280 --> 00:04:45.199 their own support within the 00:04:45.199 --> 00:04:47.199 C code, and then this is going to allow 00:04:47.199 --> 00:04:49.360 those types of variations and other 00:04:49.360 --> 00:04:51.439 emoji specific font setups. 00:04:51.439 --> 00:04:54.639 So, that is everything for Emacs 00:04:54.639 --> 00:04:56.720 in the future, I don't have a timeline 00:04:56.720 --> 00:04:59.120 for you on when 28 will be available, 00:04:59.120 --> 00:05:01.520 but 27 is going to keep improving until 00:05:01.520 --> 00:05:02.720 we're ready to get there. 00:05:02.720 --> 00:05:04.906 So, have fun with the rest of EmacsConf, 00:05:04.906 --> 00:05:06.479 and I hope to see you there, 00:05:06.479 --> 00:05:09.199 Bye.