diff options
4 files changed, 906 insertions, 918 deletions
diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt index 89190453..ef5e4c27 100644 --- a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt +++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt @@ -1,35 +1,35 @@ WEBVTT -00:00:00.000 --> 00:01:41.800 +00:00:00.000 --> 00:01:41.759 Introduction -00:01:41.800 --> 00:07:45.719 +00:01:41.760 --> 00:07:43.679 Android -00:07:45.720 --> 00:09:27.320 +00:07:43.680 --> 00:09:38.439 EditorConfig -00:09:27.310 --> 00:13:11.559 +00:09:38.440 --> 00:13:22.859 use-package integration with package-vc -00:13:11.560 --> 00:15:56.679 +00:13:22.860 --> 00:15:56.799 JSON -00:15:56.680 --> 00:17:29.639 +00:15:56.800 --> 00:17:29.579 Native compilation -00:17:29.640 --> 00:18:16.779 +00:17:29.580 --> 00:18:16.679 Tree-sitter -00:18:16.780 --> 00:19:34.200 +00:18:16.680 --> 00:19:33.239 Completion preview mode -00:19:34.233 --> 00:21:16.919 +00:19:33.240 --> 00:21:15.959 package-isolate -00:21:16.920 --> 00:23:17.939 +00:21:15.960 --> 00:23:18.279 Reindenting -00:23:17.940 --> 00:24:43.766 +00:23:18.280 --> 00:24:43.680 Wrapping up diff --git a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt index f0d08f0b..fba04b0a 100644 --- a/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt +++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt @@ -1,1361 +1,1352 @@ -WEBVTT captioned by anush and sachac, checked by anush and bhavin +WEBVTT NOTE Introduction -00:00.000 --> 00:06.066 +00:00:00.000 --> 00:00:06.119 Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024. -00:06.100 --> 00:08.833 +00:00:06.120 --> 00:00:08.839 Before I begin, I'd like to thank the organizers -00:08.866 --> 00:11.800 +00:00:08.840 --> 00:00:11.799 and everyone involved for putting this all together. -00:11.800 --> 00:13.733 +00:00:11.800 --> 00:00:13.759 While this talk is being pre-recorded, -00:13.766 --> 00:15.233 +00:00:13.760 --> 00:00:15.239 my experience from the last few years -00:15.266 --> 00:19.100 +00:00:15.240 --> 00:00:19.159 assures me that it will be a great experience for everyone. -00:19.133 --> 00:21.300 +00:00:19.160 --> 00:00:21.359 My name is Philip Kaludercic. -00:21.333 --> 00:24.466 +00:00:21.360 --> 00:00:24.479 I am a core contributor and ELPA co-maintainer. -00:24.500 --> 00:26.066 +00:00:24.480 --> 00:00:26.079 I was honored when Sacha asked me -00:26.100 --> 00:28.333 +00:00:26.080 --> 00:00:28.359 to take over the slot for this year. -00:28.366 --> 00:29.866 +00:00:28.360 --> 00:00:29.879 In the past few iterations, -00:29.900 --> 00:32.133 +00:00:29.880 --> 00:00:32.199 John Wiegley has filled a similar presentation -00:32.166 --> 00:35.666 +00:00:32.200 --> 00:00:35.679 focusing on more general Emacs development updates. -00:35.700 --> 00:00:38.501 +00:00:35.680 --> 00:00:38.519 This year, I will specifically focus on -00:00:38.502 --> 00:00:41.900 +00:00:38.520 --> 00:00:41.919 highlight features from the upcoming Emacs 30 release, -00:41.933 --> 00:44.200 +00:00:41.920 --> 00:00:45.879 which might or might not have been released -00:44.200 --> 00:00:48.059 +00:00:45.880 --> 00:00:48.079 by the time you are seeing this. -00:00:48.060 --> 00:51.266 +00:00:48.080 --> 00:00:51.079 As you can imagine, everything new about Emacs -00:51.300 --> 00:55.133 +00:00:51.080 --> 00:00:55.519 can always be found in the Emacs NEWS file. -00:55.166 --> 00:57.100 +00:00:55.520 --> 00:00:57.079 Or, alternatively, -00:57.133 --> 01:01.800 +00:00:57.080 --> 00:01:01.919 if one doesn't want to read through the 3,000 lines here, -01:01.800 --> 01:05.233 +00:01:01.920 --> 00:01:05.279 one can also take a look at the Emacs FAQ -01:05.266 --> 01:08.000 +00:01:05.280 --> 00:01:07.999 and then go to the what's new about -01:08.000 --> 01:12.300 +00:01:08.000 --> 00:01:10.079 or what's different about Emacs 30 node. -01:12.333 --> 01:14.700 +00:01:10.080 --> 00:01:14.759 Next to these two official options, -01:14.733 --> 01:18.200 +00:01:14.760 --> 00:01:18.599 I also have a page on Emacs Wiki -01:18.200 --> 01:21.300 +00:01:18.600 --> 00:01:20.439 called EmacsThirtyHighlights, -01:21.333 --> 01:24.266 +00:01:20.440 --> 00:01:24.279 highlighting some of the interesting features -01:24.300 --> 01:28.433 +00:01:24.280 --> 00:01:28.439 with some context and suggestions on how to try them out. -01:28.466 --> 01:30.033 +00:01:28.440 --> 00:01:30.039 This is more of a collaborative effort. -01:30.066 --> 01:32.733 +00:01:30.040 --> 00:01:32.719 So if you see this and think something is missing, -01:32.766 --> 01:34.500 +00:01:32.720 --> 00:01:34.519 feel free to add it. -01:34.533 --> 01:36.833 +00:01:34.520 --> 00:01:36.839 So without further ado, -01:36.866 --> 01:41.800 +00:01:36.840 --> 00:01:41.759 let's begin taking a look at new features in Emacs 30. NOTE Android -01:41.800 --> 01:44.700 +00:01:41.760 --> 00:01:44.679 The biggest one, and the one I want to mention first, -01:44.733 --> 01:49.033 +00:01:44.680 --> 00:01:49.039 is Android support, native Android support. -01:49.066 --> 01:51.833 +00:01:49.040 --> 00:01:51.879 As you can see here, Emacs has been ported -01:51.866 --> 01:53.666 +00:01:51.880 --> 00:01:53.639 to the Android operating system. -01:53.700 --> 01:56.500 +00:01:53.640 --> 00:01:56.479 What this means is that from Emacs 30 onwards, -01:56.533 --> 02:01.066 +00:01:56.480 --> 00:02:01.279 you can build Android to target Android devices natively -02:01.100 --> 02:06.733 +00:02:01.280 --> 00:02:06.759 and using a graphical interface. -02:06.766 --> 02:08.433 +00:02:06.760 --> 00:02:08.399 While it has been possible to run Emacs -02:08.466 --> 02:11.133 +00:02:08.400 --> 00:02:11.159 inside of terminal emulators on Android for a while, -02:11.166 --> 02:13.900 +00:02:11.160 --> 00:02:13.919 this actually means that you can use Emacs -02:13.933 --> 02:17.533 +00:02:13.920 --> 00:02:17.519 on an Android device, a phone or a tablet, -02:17.566 --> 02:20.933 +00:02:17.520 --> 00:02:20.959 and have all the usual advantages from GUI Emacs, -02:20.966 --> 02:23.466 +00:02:20.960 --> 00:02:23.479 such as the ability to bind all commands -02:23.500 --> 02:25.466 +00:02:23.480 --> 00:02:25.479 without having to worry about-- -02:25.500 --> 02:27.266 +00:02:25.480 --> 00:02:27.279 all keys without having to worry -02:27.300 --> 02:29.033 +00:02:27.280 --> 00:02:29.359 about terminal compatibility issues, -02:29.066 --> 02:32.733 +00:02:29.360 --> 00:02:32.759 displaying images and multiple fonts -02:32.766 --> 02:35.333 +00:02:32.760 --> 00:02:35.359 on the same display of different sizes. -02:35.366 --> 02:37.300 +00:02:35.360 --> 00:02:37.279 I should have a recording -02:37.333 --> 02:42.200 +00:02:37.280 --> 00:02:42.199 of that somewhere here--here we are-- -02:42.200 --> 02:44.100 +00:02:42.200 --> 00:02:44.439 which I made earlier on my phone, -02:44.133 --> 02:47.266 +00:02:44.440 --> 00:02:47.319 because I'm recording this on a laptop-- -02:47.300 --> 02:50.466 +00:02:47.320 --> 00:02:50.479 where we can see how touch interaction works -02:50.500 --> 02:53.333 +00:02:50.480 --> 00:02:53.199 on an Android phone. I can switch between buffers. -02:53.366 --> 02:56.100 +00:02:53.200 --> 00:02:56.119 Here I've connected an external keyboard, -02:56.133 --> 02:57.800 +00:02:56.120 --> 00:02:58.559 opening the Emacs website. -02:57.800 --> 00:03:02.559 +00:02:58.560 --> 00:03:02.679 We have images that we can interact with. -00:03:02.560 --> 00:03:04.319 +00:03:02.680 --> 00:03:05.319 We could resize them if we wanted to -00:03:04.320 --> 03:07.400 +00:03:05.320 --> 00:03:07.559 with the image resizing commands. -03:07.400 --> 03:10.300 +00:03:07.560 --> 00:03:10.359 Pinch-to-zoom works, so it -03:10.333 --> 03:12.733 +00:03:10.360 --> 00:03:12.759 does realize what touchscreen interactions are. -03:12.766 --> 03:15.233 +00:03:12.760 --> 00:03:15.239 With an external mouse, and for example, -03:15.266 --> 03:17.800 +00:03:15.240 --> 00:03:17.799 enabling context menu mode, -03:17.800 --> 03:23.066 +00:03:17.800 --> 00:03:23.079 I can even pop up little interaction windows, -03:23.100 --> 00:03:28.139 +00:03:23.080 --> 00:03:27.239 which one you would usually also know from GUI Emacs. -00:03:28.140 --> 03:33.200 +00:03:27.240 --> 00:03:32.959 TUI Emacs actually also supports them since a while now. -03:33.200 --> 03:34.600 +00:03:32.960 --> 00:03:34.639 And in this case, I'm demonstrating -03:34.600 --> 03:36.000 +00:03:34.640 --> 00:03:35.999 how even the touchscreen events -03:36.000 --> 03:39.133 +00:03:36.000 --> 00:03:39.119 can be inspected using the usual help system, -03:39.166 --> 03:43.333 +00:03:39.120 --> 00:03:43.359 and how context-mode notices -03:43.366 --> 03:45.200 +00:03:43.360 --> 00:03:45.239 where we are and allows me to, for example, -03:45.200 --> 03:47.800 +00:03:45.240 --> 00:03:47.799 evaluate this specific region, -03:47.800 --> 03:49.300 +00:03:47.800 --> 00:03:49.079 which I've highlighted down there, -03:49.333 --> 03:58.300 +00:03:49.080 --> 00:03:58.319 binding a command to touch-screen-scroll. Yeah. -03:58.333 --> 04:00.533 +00:03:58.320 --> 00:04:00.479 One should note that these additions, -04:00.566 --> 04:02.400 +00:04:00.480 --> 00:04:02.359 for example touchscreen interaction, -04:02.400 --> 04:03.833 +00:04:02.360 --> 00:04:04.159 are not specific to Android, -04:03.866 --> 04:07.066 +00:04:04.160 --> 00:04:06.839 but they also are supported in other operating systems, -04:07.100 --> 04:12.200 +00:04:06.840 --> 00:04:12.279 such as Wayland and Xorg, which are not operating systems, -04:12.200 --> 04:15.300 +00:04:12.280 --> 00:04:15.279 and Windows, insofar as they have touchscreen, -04:15.333 --> 00:04:18.419 +00:04:15.280 --> 00:04:17.319 and devices have touchscreen support. -00:04:18.420 --> 04:21.300 +00:04:17.320 --> 00:04:21.239 One should mention, or I want to mention, -04:21.333 --> 04:24.666 +00:04:21.240 --> 00:04:24.039 that the main developer behind this feature, Po Lu, -04:24.700 --> 04:27.500 +00:04:24.040 --> 00:04:27.319 should be complimented for the additional effort he put -04:27.533 --> 00:04:31.019 +00:04:27.320 --> 00:04:29.759 into making sure that Emacs for Android -00:04:31.020 --> 04:34.133 +00:04:29.760 --> 00:04:33.719 can be built using only a free software toolchain, -04:34.166 --> 00:04:36.359 +00:04:33.720 --> 00:04:36.999 which is certainly not something one has come to expect -00:04:36.360 --> 04:40.700 +00:04:37.000 --> 00:04:40.759 from working on Android applications, -04:40.733 --> 04:43.833 +00:04:40.760 --> 00:04:43.839 as usually you have to agree to some terms and conditions -04:43.866 --> 00:04:46.519 +00:04:43.840 --> 00:04:46.479 for Google-specific software. -00:04:46.520 --> 04:49.633 +00:04:46.480 --> 00:04:49.639 Final note is that if you try and look for this online, -04:49.666 --> 04:52.133 +00:04:49.640 --> 00:04:52.119 there are APKs you can find, -04:52.166 --> 04:54.666 +00:04:52.120 --> 00:04:54.679 but some of them might be outdated. -04:54.700 --> 04:59.333 +00:04:54.680 --> 00:04:59.359 To the best of my knowledge, Po Lu has... -04:59.366 --> 05:03.400 +00:04:59.360 --> 00:05:02.399 Emacs 30 Android Sourceforge... -05:03.400 --> 05:06.500 +00:05:02.400 --> 00:05:06.759 He has set up some system where here in Sourceforge, -05:06.533 --> 05:12.433 +00:05:06.760 --> 00:05:10.159 there are regular and updated -05:12.466 --> 05:14.500 +00:05:10.160 --> 00:05:14.519 APK files which you can download -05:14.533 --> 05:16.933 +00:05:14.520 --> 00:05:17.039 to avoid having to build it yourself, -05:16.966 --> 05:18.866 +00:05:17.040 --> 00:05:18.559 testing out the newest version -05:18.900 --> 05:24.133 +00:05:18.560 --> 00:05:30.639 in case there are some bugs which you'd like to report. -05:24.166 --> 05:33.100 +00:05:30.640 --> 00:05:33.119 Which-key is a package which has now been moved -05:33.133 --> 05:35.266 +00:05:33.120 --> 00:05:34.719 from ELPA to the core. -05:35.300 --> 00:05:39.179 +00:05:34.720 --> 00:05:38.879 If you haven't heard of which-key before, the idea is, -00:05:39.180 --> 05:41.633 +00:05:38.880 --> 00:05:41.399 or the general pitch is that which-key -05:41.666 --> 05:45.233 +00:05:41.400 --> 00:05:45.279 is a additional documentation interface for Emacs -05:45.266 --> 05:49.700 +00:05:45.280 --> 00:05:49.639 for displaying various keys which you could input, -05:49.733 --> 00:05:53.439 +00:05:49.640 --> 00:05:52.679 or various keys and key maps -00:05:53.440 --> 05:54.833 +00:05:52.680 --> 00:05:55.479 that have been partially inputted. -05:54.866 --> 05:57.633 +00:05:55.480 --> 00:05:57.639 A better way to demonstrate this -05:57.666 --> 05:59.300 +00:05:57.640 --> 00:05:59.319 or to explain this is just to show it. -05:59.333 --> 06:03.466 +00:05:59.320 --> 00:06:03.519 If we enable the which-key mode--it's a global minor mode-- -06:03.500 --> 06:06.333 +00:06:03.520 --> 00:06:06.399 then I can press, for example, C-x, -06:06.366 --> 06:08.700 +00:06:06.400 --> 00:06:08.719 which is a prefix for the C-x keymap. -06:08.733 --> 06:12.433 +00:06:08.720 --> 00:06:11.719 Then down here in the buffer, in this window down here, -06:12.466 --> 06:15.333 +00:06:11.720 --> 00:06:15.599 we see various commands which we could invoke -06:15.366 --> 06:17.900 +00:06:15.600 --> 00:06:17.919 and the keys to invoke them with. -06:17.933 --> 06:23.000 +00:06:17.920 --> 00:06:23.039 For example, if I wanted to say C-x i for insert-file, -06:23.000 --> 06:27.233 +00:06:23.040 --> 00:06:27.319 then I just have to press i to highlight it once again. -06:27.266 --> 06:32.600 +00:06:27.320 --> 00:06:32.559 It should be down here. Pressing i without having to repeat -06:32.600 --> 06:34.733 +00:06:32.560 --> 00:06:34.759 the entire key code again, -06:34.766 --> 06:37.200 +00:06:34.760 --> 00:06:37.719 the partial key code again, just works. -06:37.200 --> 06:41.533 +00:06:37.720 --> 00:06:41.679 This is different from the feature which Emacs has already, -06:41.566 --> 06:45.400 +00:06:41.680 --> 00:06:45.519 which is if you have input the partial keychord, -06:45.400 --> 06:47.033 +00:06:45.520 --> 00:06:47.039 you can press C-h -06:47.066 --> 06:51.000 +00:06:47.040 --> 00:06:50.959 and then a help buffer pops up with a listing -06:51.000 --> 06:54.066 +00:06:50.960 --> 00:06:54.159 of all keybindings that start with C-x. -06:54.100 --> 06:56.633 +00:06:54.160 --> 00:06:56.639 The information is the same, the presentation is different, -06:56.666 --> 06:59.066 +00:06:56.640 --> 00:06:59.159 because now if I wanted to do C-x i, -06:59.100 --> 00:07:03.339 +00:06:59.160 --> 00:07:02.159 I have to repeat the entire keychord again. -00:07:03.340 --> 07:09.466 +00:07:02.160 --> 00:07:09.479 So it's a matter of personal preference, which you prefer. -07:09.500 --> 00:07:10.959 +00:07:09.480 --> 00:07:12.519 This is more of a traditional static approach -00:07:10.960 --> 07:19.633 +00:07:12.520 --> 00:07:19.639 because I get a help buffer which I can search -07:19.666 --> 07:20.900 +00:07:19.640 --> 00:07:21.119 using usual key commands, -07:20.933 --> 07:28.133 +00:07:21.120 --> 00:07:28.159 while which-key is more of a transient and modern. -07:28.166 --> 07:31.400 +00:07:28.160 --> 00:07:30.119 Some might prefer that approach -07:31.400 --> 00:07:35.719 +00:07:30.120 --> 00:07:33.079 to solving the same problem. -00:07:35.720 --> 07:39.100 +00:07:33.080 --> 00:07:39.119 Also, don't forget to check out the customization group -07:39.133 --> 07:41.933 +00:07:39.120 --> 00:07:41.959 for which-key which has a number of options -07:41.966 --> 00:07:45.719 +00:07:41.960 --> 00:07:43.679 which you might or might not be interested in. NOTE EditorConfig -00:07:45.720 --> 07:50.866 +00:07:43.680 --> 00:07:50.879 Next up, Emacs 30 has built-in EditorConfig support. -07:50.900 --> 07:53.633 +00:07:50.880 --> 00:07:53.679 If you have not heard of EditorConfig before, -07:53.666 --> 00:07:56.639 +00:07:53.680 --> 00:07:57.319 I believe I've linked to it down here somewhere. -00:07:56.640 --> 00:08:00.119 +00:07:57.320 --> 00:08:02.239 Ah, there it is, EditorConfig. -00:08:00.120 --> 00:08:09.419 +00:08:02.240 --> 00:08:06.519 This is a file format used to specify -00:08:09.420 --> 08:12.133 +00:08:06.520 --> 00:08:11.959 common formatting rules in an editor-agnostic way. -08:12.166 --> 08:16.266 +00:08:11.960 --> 00:08:16.319 You might compare it to .dir-locals.el files, -08:16.300 --> 08:19.333 +00:08:16.320 --> 00:08:19.159 which is a sort of an s-expression -08:19.366 --> 08:22.233 +00:08:19.160 --> 00:08:22.159 for setting file-local variables in Emacs. -08:22.266 --> 08:27.266 +00:08:22.160 --> 00:08:25.639 Of course, this is restricted to the common subset -08:27.300 --> 08:29.400 +00:08:25.640 --> 00:08:28.559 of what all editors should understand. -08:29.400 --> 08:31.833 +00:08:28.560 --> 00:08:31.839 For example, indentation styles, -08:31.866 --> 00:08:35.119 +00:08:31.840 --> 00:08:34.239 whether you prefer tabs or spaces, -00:08:35.120 --> 08:38.733 +00:08:34.240 --> 00:08:38.759 tab width, file encoding, and so on. -08:38.766 --> 00:08:43.919 +00:08:38.760 --> 00:08:42.559 So it's nothing too advanced, but it's something... -00:08:43.920 --> 08:48.500 +00:08:42.560 --> 00:08:48.559 It is a file format which one sees popping up more -08:48.533 --> 08:50.433 +00:08:48.560 --> 00:08:50.439 and more often in lots of projects -08:50.466 --> 08:53.600 +00:08:50.440 --> 00:08:53.479 which want to enforce a consistent indentation style -08:53.600 --> 08:56.633 +00:08:53.480 --> 00:08:56.639 or formatting rules for all editors in a project. -08:56.666 --> 09:00.200 +00:08:56.640 --> 00:09:00.159 Having this built in is certainly useful in Emacs. -09:00.200 --> 09:03.466 +00:09:00.160 --> 00:09:04.439 Though one should note that it's not enabled by default. -09:03.500 --> 00:09:10.939 +00:09:04.440 --> 00:09:09.079 You still have to enable the global minor mode, -00:09:10.940 --> 09:14.200 +00:09:09.080 --> 00:09:14.239 which is simply turning on this one option. -09:14.200 --> 09:15.500 +00:09:14.240 --> 00:09:15.599 Shouldn't be more than that, -09:15.533 --> 09:18.633 +00:09:15.600 --> 00:09:18.759 and then Emacs will respect the rules. -09:18.666 --> 00:09:23.640 +00:09:18.760 --> 00:09:31.399 If it finds a .editorconfig file in the project directory, -00:09:23.641 --> 00:09:25.320 +00:09:31.400 --> 00:09:35.839 then it will respect those rules -00:09:25.321 --> 00:09:27.320 +00:09:35.840 --> 00:09:38.439 without having to do anything else. NOTE use-package integration with package-vc -00:09:27.310 --> 00:09:33.567 +00:09:38.440 --> 00:09:45.039 Next up, use-package integration with package-vc. -00:09:33.568 --> 00:09:36.533 +00:09:45.040 --> 00:09:48.039 For those not familiar with either of the two, -00:09:36.534 --> 00:09:37.533 +00:09:48.040 --> 00:09:49.519 or at least one of the two, -00:09:37.534 --> 00:09:40.699 +00:09:49.520 --> 00:09:52.159 use-package is a popular configuration macro. -00:09:40.700 --> 00:09:42.833 +00:09:52.160 --> 00:09:54.399 What it does is it allows -00:09:42.866 --> 00:09:46.233 +00:09:54.400 --> 00:09:56.959 users to declaratively specify packages -00:09:46.266 --> 00:09:48.900 +00:09:56.960 --> 00:10:00.399 they would like to have installed and configured -00:09:48.900 --> 00:09:51.659 +00:10:00.400 --> 00:10:01.759 in their configuration file, -00:09:51.660 --> 00:09:54.400 +00:10:01.760 --> 00:10:05.879 so that, for example, if you copy your init.el -00:09:54.433 --> 00:09:55.900 +00:10:05.880 --> 00:10:07.399 from one system to another, -00:09:55.900 --> 00:09:58.500 +00:10:07.400 --> 00:10:09.959 it could bootstrap the entire configuration, -00:09:58.500 --> 00:10:00.733 +00:10:09.960 --> 00:10:12.199 downloading all the packages you want -00:10:00.766 --> 00:10:02.366 +00:10:12.200 --> 00:10:13.759 without having to manually do this -00:10:02.400 --> 00:10:05.139 +00:10:13.760 --> 00:10:15.599 on every system you'd like to use. -00:10:05.140 --> 00:10:07.600 +00:10:15.600 --> 00:10:19.119 This allows configurations -00:10:07.633 --> 00:10:10.859 +00:10:19.120 --> 00:10:21.319 to be self-encapsulated and portable. -00:10:10.860 --> 00:10:15.059 +00:10:21.320 --> 00:10:27.039 package-vc is an extension of package.el, -00:10:15.060 --> 00:10:19.400 +00:10:27.040 --> 00:10:30.919 which allows installing packages from an alternative. -00:10:19.433 --> 00:10:22.366 +00:10:30.920 --> 00:10:33.759 Instead of using the standard way to install packages, -00:10:22.400 --> 00:10:26.499 +00:10:33.760 --> 00:10:37.039 which is just download tarball and unpack it, -00:10:26.500 --> 00:10:27.933 +00:10:37.040 --> 00:10:39.479 byte compile, and so on, -00:10:27.966 --> 00:10:32.399 +00:10:39.480 --> 00:10:44.119 it will fetch the files for a package -00:10:32.400 --> 00:10:34.966 +00:10:44.120 --> 00:10:46.519 directly from the source code repository -00:10:35.000 --> 00:10:37.233 +00:10:46.520 --> 00:10:48.679 and initialize it in such a way -00:10:37.266 --> 00:10:38.800 +00:10:48.680 --> 00:10:50.319 that package.el can work with it. -00:10:38.833 --> 00:10:44.239 +00:10:50.320 --> 00:10:54.239 So it's just a front-end for installing packages. -00:10:44.240 --> 00:10:46.500 +00:10:54.240 --> 00:10:57.999 Even though these two were added to Emacs 29, -00:10:46.500 --> 00:10:48.366 +00:10:58.000 --> 00:10:59.919 we didn't have the time to work on the -00:10:48.400 --> 00:10:52.500 +00:10:59.920 --> 00:11:04.159 use-package integration of package-vc into use-package, -00:10:52.500 --> 00:10:54.600 +00:11:04.160 --> 00:11:06.079 which has been changed now. -00:10:54.633 --> 00:11:00.139 +00:11:06.080 --> 00:11:10.039 What we have with Emacs 30 is that -00:11:00.140 --> 00:11:02.833 +00:11:10.040 --> 00:11:14.599 there is a :vc keyword for use-package -00:11:02.866 --> 00:11:05.200 +00:11:14.600 --> 00:11:16.919 with which we can instruct use-package -00:11:05.233 --> 00:11:10.239 +00:11:16.920 --> 00:11:20.599 to not download a package using tarball, -00:11:10.240 --> 00:11:12.433 +00:11:20.600 --> 00:11:23.959 but instead to fetch the source code -00:11:12.466 --> 00:11:13.766 +00:11:23.960 --> 00:11:25.279 from a source code repository. -00:11:13.800 --> 00:11:15.566 +00:11:25.280 --> 00:11:27.079 This is useful if you, for example, -00:11:15.600 --> 00:11:18.200 +00:11:27.080 --> 00:11:29.759 have packages which you yourself work on -00:11:18.233 --> 00:11:19.933 +00:11:29.760 --> 00:11:31.439 and know that you always want to have -00:11:19.966 --> 00:11:21.900 +00:11:31.440 --> 00:11:33.399 the development version of the package -00:11:21.900 --> 00:11:26.819 +00:11:33.400 --> 00:11:37.359 where you can directly commit changes you've made -00:11:26.820 --> 00:11:29.733 +00:11:37.360 --> 00:11:40.399 to the repository and push them upstream. -00:11:29.766 --> 00:11:32.100 +00:11:40.400 --> 00:11:43.919 Or, if you know that you want to contribute to a package, -00:11:32.100 --> 00:11:34.966 +00:11:43.920 --> 00:11:46.479 you can use package-vc to download the source code, -00:11:35.000 --> 00:11:37.366 +00:11:46.480 --> 00:11:48.879 have all the version control information, -00:11:37.400 --> 00:11:41.739 +00:11:48.880 --> 00:11:50.559 prepare a patch and send it upstream. -00:11:41.740 --> 00:11:43.800 +00:11:50.560 --> 00:11:54.799 In these examples here, -00:11:43.833 --> 00:11:49.166 +00:11:54.800 --> 00:12:00.679 the first example Lisp instructs package-vc -00:11:49.200 --> 00:11:52.366 +00:12:00.680 --> 00:12:03.879 to download the source code from a URL. -00:11:52.400 --> 00:11:55.400 +00:12:03.880 --> 00:12:06.919 So this is a git URL where it will download -00:11:55.433 --> 00:11:57.400 +00:12:06.920 --> 00:12:08.919 the source code from, and in this case, -00:11:57.433 --> 00:12:00.000 +00:12:08.920 --> 00:12:11.839 choose the newest checkout of the source code, -00:12:00.033 --> 00:12:04.939 +00:12:11.840 --> 00:12:15.799 not the latest release. Down here, we have another example. -00:12:04.940 --> 00:12:08.766 +00:12:15.800 --> 00:12:20.319 I prefer to consider the following example here. -00:12:08.800 --> 00:12:10.733 +00:12:20.320 --> 00:12:22.399 If we just had written this, -00:12:10.766 --> 00:12:13.200 +00:12:22.400 --> 00:12:24.719 then package-vc would use the metadata -00:12:13.233 --> 00:12:15.000 +00:12:24.720 --> 00:12:26.959 which an ELPA server provides -00:12:15.033 --> 00:12:20.166 +00:12:26.960 --> 00:12:31.719 to fetch the URL from the official repository of, -00:12:20.200 --> 00:12:22.833 +00:12:31.720 --> 00:12:34.319 in this case, BBDB, without having to... -00:12:22.866 --> 00:12:27.733 +00:12:34.320 --> 00:12:39.239 It would be more or less the same like this up here, -00:12:27.766 --> 00:12:32.700 +00:12:39.240 --> 00:12:44.199 with the simple difference that package-vc integration -00:12:32.700 --> 00:12:36.300 +00:12:44.200 --> 00:12:47.839 into use-package doesn't check out the latest commit, -00:12:36.300 --> 00:12:37.766 +00:12:47.840 --> 00:12:49.319 but the latest release, -00:12:37.800 --> 00:12:44.979 +00:12:49.320 --> 00:12:54.519 just to keep configurations more deterministic by default. -00:12:44.980 --> 00:12:47.566 +00:12:54.520 --> 00:12:59.399 Of course, if you prefer to use latest commit, -00:12:47.600 --> 00:12:52.179 +00:12:59.400 --> 00:13:01.799 you can use a package-vc install command -00:12:52.180 --> 00:12:54.933 +00:13:01.800 --> 00:13:06.279 or just update the package manually yourself, -00:12:54.966 --> 00:13:01.779 +00:13:06.280 --> 00:13:13.059 which you can use using package-vc-upgrade. -00:13:01.780 --> 00:13:04.366 +00:13:13.060 --> 00:13:15.879 Next, I'd like to focus on a few features -00:13:04.400 --> 00:13:07.000 +00:13:15.880 --> 00:13:18.919 which one might not necessarily realize directly, -00:13:07.033 --> 00:13:11.559 +00:13:18.920 --> 00:13:22.859 but will hopefully improve your experience with Emacs. NOTE JSON -00:13:11.560 --> 00:13:15.133 +00:13:22.860 --> 00:13:26.639 First up in this list is a new JSON parser. -00:13:15.166 --> 00:13:21.959 +00:13:26.640 --> 00:13:29.759 Let's maybe show the source code for that one: -00:13:21.960 --> 00:13:39.533 +00:13:29.760 --> 00:13:51.039 not json.el, json.c. The history of JSON parsing in Emacs -00:13:39.566 --> 00:13:43.366 +00:13:51.040 --> 00:13:54.879 started with Emacs 23 with the addition of json.el. -00:13:43.400 --> 00:13:46.766 +00:13:54.880 --> 00:13:58.239 This was the file which we had just opened a moment ago. -00:13:46.800 --> 00:13:50.366 +00:13:58.240 --> 00:14:02.319 This is a JSON parser in Emacs Lisp. -00:13:50.400 --> 00:13:53.233 +00:14:02.320 --> 00:14:04.759 It's fine, it does the job, but it can get slow -00:13:53.266 --> 00:13:55.000 +00:14:04.760 --> 00:14:06.519 if we have a situation like where -00:13:55.033 --> 00:14:00.319 +00:14:06.520 --> 00:14:11.239 Eglot uses a LSP server to communicate with -00:14:00.320 --> 00:14:02.999 +00:14:11.240 --> 00:14:14.039 and the LSP server can get a bit chatty, -00:14:03.000 --> 00:14:05.133 +00:14:14.040 --> 00:14:17.039 sending a lot of JSON data, -00:14:05.166 --> 00:14:07.966 +00:14:17.040 --> 00:14:19.599 which all has to be parsed and garbage collected, -00:14:08.000 --> 00:14:09.933 +00:14:19.600 --> 00:14:21.439 which can slow down Emacs a bit. -00:14:09.966 --> 00:14:13.733 +00:14:21.440 --> 00:14:25.279 The situation was improved upon in Emacs 29 -00:14:13.766 --> 00:14:18.000 +00:14:25.280 --> 00:14:29.479 when JSON parsing was added to the core. -00:14:18.033 --> 00:14:21.000 +00:14:29.480 --> 00:14:32.679 This was the json.c file, which we see on this side, -00:14:21.033 --> 00:14:22.733 +00:14:32.680 --> 00:14:34.279 the old version of the json.c file, -00:14:22.766 --> 00:14:26.700 +00:14:34.280 --> 00:14:38.279 which employed the Jansson library (it's the C library) -00:14:26.700 --> 00:14:31.899 +00:14:38.280 --> 00:14:42.479 for parsing and accelerating JSON parsing in Emacs. -00:14:31.900 --> 00:14:33.966 +00:14:42.480 --> 00:14:45.479 This was good enough, -00:14:34.000 --> 00:14:36.200 +00:14:45.480 --> 00:14:47.719 or it certainly improved the situation -00:14:36.233 --> 00:14:38.300 +00:14:47.720 --> 00:14:50.039 for a lot of LSP clients. -00:14:38.300 --> 00:14:44.766 +00:14:50.040 --> 00:14:53.239 But in Emacs 30, the situation has been improved once more -00:14:44.800 --> 00:14:49.800 +00:14:53.240 --> 00:15:01.174 with the addition of a JSON parser directly in Emacs. -00:14:49.833 --> 00:14:53.566 +00:15:01.175 --> 00:15:03.874 So instead of using an external library, -00:14:53.600 --> 00:14:57.400 +00:15:03.875 --> 00:15:08.879 there's a custom JSON parser written in C in the Emacs core, -00:14:57.433 --> 00:15:01.539 +00:15:08.880 --> 00:15:12.240 which directly generates Elisp objects. -00:15:01.540 --> 00:15:05.033 +00:15:12.241 --> 00:15:16.574 The advantage to this approach -00:15:05.066 --> 00:15:06.433 +00:15:16.575 --> 00:15:18.007 compared to the Jansson approach -00:15:06.466 --> 00:15:07.933 +00:15:18.008 --> 00:15:19.439 is that there's no intermediate format -00:15:07.966 --> 00:15:09.200 +00:15:19.440 --> 00:15:20.879 which has to be allocated -00:15:09.233 --> 00:15:11.500 +00:15:20.880 --> 00:15:23.159 and memory managed and freed again, -00:15:11.500 --> 00:15:19.539 +00:15:23.160 --> 00:15:30.240 which of course incurs an additional performance overhead. -00:15:19.540 --> 00:15:22.433 -Next to this, there's also a custom serializer +00:15:30.241 --> 00:15:35.639 +There is absolutely no dependency on Jansson anymore. -00:15:22.466 --> 00:15:29.239 -for JSON contents translating a JSON object into a string. - -00:15:29.240 --> 00:15:30.640 -... The consequence of this is that - -00:15:30.641 --> 00:15:35.519 -there is absolutely no dependency on Jansson anymore. - -00:15:35.520 --> 00:15:38.533 +00:15:35.640 --> 00:15:38.599 This in turn means that now all Emacs users -00:15:38.566 --> 00:15:39.800 +00:15:38.600 --> 00:15:39.720 from Emacs 30 onwards -00:15:39.833 --> 00:15:42.733 +00:15:39.760 --> 00:15:42.639 can take advantage of this new JSON parser -00:15:42.766 --> 00:15:44.933 +00:15:42.640 --> 00:15:44.839 and don't have to worry about whether -00:15:44.966 --> 00:15:47.633 +00:15:44.840 --> 00:15:47.759 or not they have Jansson, this JSON parsing library, -00:15:47.666 --> 00:15:50.433 +00:15:47.760 --> 00:15:50.999 installed on their system or not when they want -00:15:50.466 --> 00:15:56.679 +00:15:51.000 --> 00:15:56.799 to take advantage of this accelerated JSON parsing. NOTE Native compilation -00:15:56.680 --> 00:16:00.366 +00:15:56.800 --> 00:16:00.279 Next up, another behind-the-scenes feature -00:16:00.400 --> 00:16:06.406 +00:16:00.280 --> 00:16:03.959 is that if you build Emacs on your own from source, -00:16:06.407 --> 00:16:07.766 +00:16:03.960 --> 00:16:07.759 you might know that if you wanted -00:16:07.800 --> 00:16:09.533 +00:16:07.760 --> 00:16:09.479 to use native compilation, -00:16:09.566 --> 00:16:12.379 +00:16:09.480 --> 00:16:13.119 so the translation of Elisp bytecodes -00:16:12.380 --> 00:16:15.533 +00:16:13.120 --> 00:16:15.479 to whatever the native assembly -00:16:15.566 --> 00:16:19.133 +00:16:15.480 --> 00:16:18.999 or native instruction set is on your system, -00:16:19.166 --> 00:16:24.339 +00:16:19.000 --> 00:16:24.199 you have to specify with native compilation. -00:16:24.340 --> 00:16:25.933 +00:16:24.200 --> 00:16:25.839 when invoking the configure script, -00:16:25.966 --> 00:16:28.366 +00:16:25.840 --> 00:16:28.239 otherwise it would not have been enabled at all. -00:16:28.400 --> 00:16:32.479 +00:16:28.240 --> 00:16:31.439 With Emacs 30, this step is not necessary anymore. -00:16:32.480 --> 00:16:36.233 +00:16:31.440 --> 00:16:36.119 The configure script will automatically check -00:16:36.266 --> 00:16:41.700 +00:16:36.120 --> 00:16:41.639 if you have the libgccjit library installed on your system, -00:16:41.700 --> 00:16:42.766 +00:16:41.640 --> 00:16:42.759 and if that is so, -00:16:42.800 --> 00:16:45.566 +00:16:42.760 --> 00:16:45.519 then native compilation will be enabled by default. -00:16:45.600 --> 00:16:49.400 +00:16:45.520 --> 00:16:49.279 In other words, if you have an issue with native compilation -00:16:49.433 --> 00:16:52.500 +00:16:49.280 --> 00:16:52.359 or prefer not to use it for whatever reason, -00:16:52.500 --> 00:16:55.533 +00:16:52.360 --> 00:16:55.559 you now have to type --without-native-compilation -00:16:55.566 --> 00:16:58.433 +00:16:55.560 --> 00:16:58.199 when compiling Emacs to prevent this from happening. -00:16:58.466 --> 00:17:02.433 +00:16:58.200 --> 00:17:02.239 But native compilation was added in Emacs 28 -00:17:02.466 --> 00:17:04.333 +00:17:02.240 --> 00:17:04.319 and has proven to be a very stable -00:17:04.366 --> 00:17:06.233 +00:17:04.320 --> 00:17:06.159 and useful feature for most people, -00:17:06.266 --> 00:17:09.400 +00:17:06.160 --> 00:17:09.359 so there's probably no reason to do this -00:17:09.433 --> 00:17:11.133 +00:17:09.360 --> 00:17:11.199 and you can just invoke the configure script -00:17:11.166 --> 00:17:16.300 +00:17:11.200 --> 00:17:16.239 with one argument less. Right, and I'd like to finish up -00:17:16.300 --> 00:17:19.500 +00:17:16.240 --> 00:17:19.399 with a few smaller features, a few smaller highlights. -00:17:19.500 --> 00:17:29.639 +00:17:19.400 --> 00:17:29.579 Maybe we can go back to the listing here. Here we have it. NOTE Tree-sitter -00:17:29.640 --> 00:17:32.833 +00:17:29.580 --> 00:17:32.799 There are a few new major modes -00:17:32.866 --> 00:17:34.333 +00:17:32.800 --> 00:17:34.239 based on the tree-sitter library. -00:17:34.366 --> 00:17:37.939 +00:17:34.240 --> 00:17:37.519 tree-sitter is this parser library -00:17:37.940 --> 00:17:39.933 +00:17:37.520 --> 00:17:42.699 which has been integrated into Emacs 29. -00:17:39.966 --> 00:17:44.100 +00:17:42.700 --> 00:17:43.999 It allows the integration -00:17:44.100 --> 00:17:48.400 +00:17:44.000 --> 00:17:48.359 of external, specialized, and quick parsers into Emacs, -00:17:48.433 --> 00:17:52.133 +00:17:48.360 --> 00:17:52.039 which improve stuff like syntax highlighting, indentation, -00:17:52.166 --> 00:17:55.233 +00:17:52.040 --> 00:17:55.159 structural navigation, imenu support, -00:17:55.266 --> 00:18:01.033 +00:17:55.160 --> 00:18:00.839 by simply having a better understanding of, for example, -00:18:01.066 --> 00:18:03.900 +00:18:00.840 --> 00:18:03.839 a HTML file, or a Lua file, a PHP file, -00:18:03.900 --> 00:18:06.233 +00:18:03.840 --> 00:18:06.239 than what people usually implement -00:18:06.266 --> 00:18:10.366 +00:18:06.240 --> 00:18:10.319 using regular expressions in traditional major modes. -00:18:10.400 --> 00:18:16.779 +00:18:10.320 --> 00:18:16.679 So, a few new major modes which you can try out here. NOTE Completion preview mode -00:18:16.780 --> 00:18:20.033 +00:18:16.680 --> 00:18:19.959 Another interesting feature is the completion-preview-mode. -00:18:20.066 --> 00:18:22.966 +00:18:19.960 --> 00:18:23.079 We can maybe try it out here in the scratch buffer. -00:18:23.000 --> 00:18:28.300 +00:18:23.080 --> 00:18:28.199 If I enable completion-preview-mode... -00:18:28.300 --> 00:18:32.033 +00:18:28.200 --> 00:18:31.999 This is a non-global minor mode, -00:18:32.066 --> 00:18:38.600 +00:18:32.000 --> 00:18:38.479 which will display completion options inline using overlays. -00:18:38.633 --> 00:18:43.133 +00:18:38.480 --> 00:18:43.079 For example, if I start typing a longer symbol like define, -00:18:43.166 --> 00:18:48.200 +00:18:43.080 --> 00:18:48.119 now we have a derived mode. It suggests me to... -00:18:48.233 --> 00:18:51.133 +00:18:48.120 --> 00:18:51.039 I can just press TAB and then it completes the option here, -00:18:51.166 --> 00:18:51.933 +00:18:51.040 --> 00:18:51.799 but it didn't actually... -00:18:51.966 --> 00:18:55.333 +00:18:51.800 --> 00:18:55.279 It's not actually modifying the buffer, it's not pressing, -00:18:55.366 --> 00:18:57.100 +00:18:55.280 --> 00:18:56.999 these are just overlays, -00:18:57.100 --> 00:18:59.533 +00:18:57.000 --> 00:18:59.479 so if I move around, it gets deleted. -00:18:59.566 --> 00:19:02.619 +00:18:59.480 --> 00:19:01.519 It wouldn't get saved if I were to save the buffer. -00:19:02.620 --> 00:19:04.966 +00:19:01.520 --> 00:19:04.879 The same also should work in a shell buffer. -00:19:05.000 --> 00:19:08.366 +00:19:04.880 --> 00:19:08.439 If I enable completion preview mode here and start... -00:19:08.400 --> 00:19:12.800 +00:19:08.440 --> 00:19:12.719 In this case, I'm using the bash completion package, -00:19:12.833 --> 00:19:15.000 +00:19:12.720 --> 00:19:15.159 which provides additional completion information. -00:19:15.033 --> 00:19:17.933 +00:19:15.160 --> 00:19:17.839 This is not only limited to programming systems, -00:19:17.966 --> 00:19:22.900 +00:19:17.840 --> 00:19:22.879 but anywhere where you have completion at point in Emacs. -00:19:22.900 --> 00:19:26.159 +00:19:22.880 --> 00:19:26.599 I can start typing here, ignore, and put ignore-backups, -00:19:26.160 --> 00:19:30.000 +00:19:26.600 --> 00:19:29.879 and it hints to the options which I have -00:19:30.033 --> 00:19:34.200 +00:19:29.880 --> 00:19:33.239 and allows me to complete them quickly. NOTE package-isolate -00:19:34.233 --> 00:19:37.966 +00:19:33.240 --> 00:19:37.879 Another small feature is the package-isolate command. -00:19:38.000 --> 00:19:40.000 +00:19:37.880 --> 00:19:39.959 What this does is it will start -00:19:40.033 --> 00:19:42.800 +00:19:39.960 --> 00:19:42.719 or it will prompt me for packages -00:19:42.833 --> 00:19:44.333 +00:19:42.720 --> 00:19:44.119 I have installed in my system -00:19:44.366 --> 00:19:46.500 +00:19:44.120 --> 00:19:46.439 and will start an isolated -00:19:46.500 --> 00:19:51.133 +00:19:46.440 --> 00:19:51.079 or like "emacs -Q"-ish instance of emacs -00:19:51.166 --> 00:19:53.333 +00:19:51.080 --> 00:19:53.239 with only these packages installed. -00:19:53.366 --> 00:20:00.439 +00:19:53.240 --> 00:20:00.359 So for example, if I said I want slime and I want diff-hl, -00:20:00.440 --> 00:20:02.700 +00:20:00.360 --> 00:20:02.279 then this is a new Emacs window. -00:20:02.700 --> 00:20:04.533 +00:20:02.280 --> 00:20:04.439 It's unrelated to the one around. -00:20:04.566 --> 00:20:06.500 +00:20:04.440 --> 00:20:06.759 It uses the same executable, of course, -00:20:06.500 --> 00:20:09.939 +00:20:06.760 --> 00:20:08.999 but will not load your configuration file -00:20:09.940 --> 00:20:13.679 +00:20:09.000 --> 00:20:13.079 or any other further customizations on your system. -00:20:13.680 --> 00:20:15.533 +00:20:13.080 --> 00:20:15.159 All it does, it will ensure -00:20:15.566 --> 00:20:17.933 +00:20:15.160 --> 00:20:17.879 that these packages, which are listed here, -00:20:17.966 --> 00:20:24.599 +00:20:17.880 --> 00:20:24.359 so in our case SLIME and dependencies of SLIME and diff-hl, -00:20:24.600 --> 00:20:25.300 +00:20:24.360 --> 00:20:25.119 in the system -00:20:25.300 --> 00:20:29.100 +00:20:25.120 --> 00:20:28.999 so that I could, for example, as you can see here, -00:20:29.100 --> 00:20:32.139 +00:20:29.000 --> 00:20:32.019 diff-hl-mode works. -00:20:32.140 --> 00:20:34.766 +00:20:32.020 --> 00:20:35.319 Okay, this is not a version-controlled file. -00:20:34.800 --> 00:20:41.200 +00:20:35.320 --> 00:20:41.119 Maybe if we take a look at, have I enabled diff-hl-mode? -00:20:41.233 --> 00:20:44.600 +00:20:41.120 --> 00:20:44.559 It's enabled in this case. What diff-hl-mode does -00:20:44.633 --> 00:20:48.300 +00:20:44.560 --> 00:20:48.239 is it displays these version control changes -00:20:48.300 --> 00:20:49.566 +00:20:48.240 --> 00:20:49.999 in the fringe of a buffer. -00:20:49.600 --> 00:20:54.133 +00:20:50.000 --> 00:20:54.039 And even though this is a uncustomized version of Emacs, -00:20:54.166 --> 00:20:56.333 +00:20:54.040 --> 00:20:56.279 or an uncustomized instance of Emacs, -00:20:56.366 --> 00:20:59.000 +00:20:56.280 --> 00:20:58.919 it was easy for me to load this one package, -00:20:59.033 --> 00:21:02.033 +00:20:58.920 --> 00:21:01.959 or these two packages and all the dependencies necessary. -00:21:02.066 --> 00:21:05.300 +00:21:01.960 --> 00:21:04.759 As you can imagine, the main purpose for this -00:21:05.300 --> 00:21:07.733 +00:21:04.760 --> 00:21:07.719 is to make debugging issues easier. -00:21:07.766 --> 00:21:10.566 +00:21:07.720 --> 00:21:10.519 If you want to report about an issue -00:21:10.600 --> 00:21:14.900 +00:21:10.520 --> 00:21:14.519 you have with a package. And if I close this, it's closed -00:21:14.900 --> 00:21:16.919 +00:21:14.520 --> 00:21:15.959 and everything's thrown away. NOTE Reindenting -00:21:16.920 --> 00:21:19.000 +00:21:15.960 --> 00:21:18.959 Last up, a nice feature I think -00:21:19.033 --> 00:21:20.933 +00:21:18.960 --> 00:21:21.199 a lot of people will appreciate is, -00:21:20.966 --> 00:21:24.300 +00:21:21.200 --> 00:21:24.239 if you are familiar with... Let's open a text buffer. -00:21:24.300 --> 00:21:30.279 +00:21:24.240 --> 00:21:29.119 The M-q key is traditionally bound to fill-paragraph. -00:21:30.280 --> 00:21:32.200 +00:21:29.120 --> 00:21:32.119 What this means is that... -00:21:32.233 --> 00:21:35.000 +00:21:32.120 --> 00:21:34.919 Let's, for example, copy this text from here -00:21:35.033 --> 00:21:40.366 +00:21:34.920 --> 00:21:40.279 and squash it all into one line. If I press M-q here, -00:21:40.400 --> 00:21:42.719 +00:21:40.280 --> 00:21:43.679 then the lines will be broken -00:21:42.720 --> 00:21:49.879 +00:21:43.680 --> 00:21:49.599 according to the fill column indicator up here. -00:21:49.880 --> 00:21:52.600 +00:21:49.600 --> 00:21:52.199 This is the traditional usage of M-q, -00:21:52.633 --> 00:21:54.200 +00:21:52.200 --> 00:21:54.159 and it still works in text-mode buffers, -00:21:54.233 --> 00:21:55.859 +00:21:54.160 --> 00:21:56.639 but in prog-mode buffers-- -00:21:55.860 --> 00:22:00.100 +00:21:56.640 --> 00:22:00.079 so any major mode inheriting prog-mode-- -00:22:00.100 --> 00:22:02.233 +00:22:00.080 --> 00:22:02.199 M-q will now by default be bound -00:22:02.266 --> 00:22:09.779 +00:22:02.200 --> 00:22:09.639 to prog-fill-reindent-defun. To summarize the point, -00:22:09.780 --> 00:22:13.433 +00:22:09.640 --> 00:22:13.359 if you are editing a string or a comment, -00:22:13.466 --> 00:22:16.039 +00:22:13.360 --> 00:22:15.939 then the comment will be filled. -00:22:16.040 --> 00:22:19.100 +00:22:15.940 --> 00:22:19.039 But if you are outside of a comment or outside of a string, -00:22:19.100 --> 00:22:23.166 +00:22:19.040 --> 00:22:22.919 then the defun or the top-level construct -00:22:23.200 --> 00:22:26.159 +00:22:22.920 --> 00:22:25.559 in the programming language will be re-indented. -00:22:26.160 --> 00:22:34.099 +00:22:25.560 --> 00:22:33.879 Let's try that out with maybe some file I have open here. -00:22:34.100 --> 00:22:38.800 +00:22:33.880 --> 00:22:37.719 If I'm in this... Let's choose some function, -00:22:38.833 --> 00:22:40.733 +00:22:37.720 --> 00:22:41.279 let's take this for example. -00:22:40.766 --> 00:22:43.959 +00:22:41.280 --> 00:22:42.879 If we followed all of this again, -00:22:43.960 --> 00:22:47.400 +00:22:42.880 --> 00:22:46.479 and I press M-q in on this paragraph, -00:22:47.433 --> 00:22:49.433 +00:22:46.480 --> 00:22:49.399 then the paragraph gets re-indented. -00:22:49.466 --> 00:22:55.800 +00:22:49.400 --> 00:22:55.759 But if I'm down here and I choose to break the indentation -00:22:55.833 --> 00:22:58.166 +00:22:55.760 --> 00:22:58.239 and then press M-q, -00:22:58.200 --> 00:23:02.333 +00:22:58.240 --> 00:23:02.279 then as you see, it practically selected the defun -00:23:02.366 --> 00:23:03.566 +00:23:02.280 --> 00:23:03.559 and re-indented everything -00:23:03.600 --> 00:23:06.959 +00:23:03.560 --> 00:23:06.699 without having me to move the point around in the buffer. -00:23:06.960 --> 00:23:08.633 +00:23:06.700 --> 00:23:08.559 So I think that's a really nice feature, -00:23:08.666 --> 00:23:11.100 +00:23:08.560 --> 00:23:12.919 which a lot of people can appreciate. -00:23:11.100 --> 00:23:17.939 +00:23:12.920 --> 00:23:18.279 It's one of those niceties which comes from time to time. NOTE Wrapping up -00:23:17.940 --> 00:23:20.633 +00:23:18.280 --> 00:23:20.599 Right, so that was my overview -00:23:20.666 --> 00:23:22.600 +00:23:20.600 --> 00:23:22.559 of what's going to be new in Emacs 30. -00:23:22.633 --> 00:23:24.400 +00:23:22.560 --> 00:23:24.359 I hope that most people could take away -00:23:24.433 --> 00:23:25.579 +00:23:24.360 --> 00:23:26.159 something from this presentation -00:23:25.580 --> 00:23:28.900 +00:23:26.160 --> 00:23:28.959 and have something to look forward -00:23:28.900 --> 00:23:31.133 +00:23:28.960 --> 00:23:31.039 to try out after upgrading. -00:23:31.166 --> 00:23:33.833 +00:23:31.040 --> 00:23:33.759 As mentioned initially, as of recording, -00:23:33.866 --> 00:23:36.566 +00:23:33.760 --> 00:23:36.519 this release has not been completed yet. -00:23:36.600 --> 00:23:38.833 +00:23:36.520 --> 00:23:38.799 If this is still not the case -00:23:38.866 --> 00:23:40.233 +00:23:38.800 --> 00:23:40.199 when you're seeing this video, -00:23:40.266 --> 00:23:43.833 +00:23:40.200 --> 00:23:43.799 please consider downloading and building Emacs 30 yourself. -00:23:43.866 --> 00:23:48.200 +00:23:43.800 --> 00:23:48.159 If you have any issues, which is always the case, -00:23:48.233 --> 00:23:56.439 +00:23:48.160 --> 00:23:51.959 please report them to using report-emacs-bug. -00:23:56.440 --> 00:23:57.907 +00:23:51.960 --> 00:23:55.079 That will pop up a mail buffer, -00:23:57.908 --> 00:23:59.600 +00:23:55.080 --> 00:23:59.519 and then you can describe your issue and send them out. -00:23:59.633 --> 00:24:01.800 +00:23:59.520 --> 00:24:01.759 All bug reports are valuable, -00:24:01.833 --> 00:24:04.433 +00:24:01.760 --> 00:24:04.359 even if they are false positives or duplicates-- -00:24:04.466 --> 00:24:05.233 +00:24:04.360 --> 00:24:05.159 it doesn't matter-- -00:24:05.266 --> 00:24:08.533 +00:24:05.160 --> 00:24:08.439 because when you take the time to submit a bug report, -00:24:08.566 --> 00:24:12.233 +00:24:08.440 --> 00:24:12.159 which describes something that's specific to your setup, -00:24:12.266 --> 00:24:16.700 +00:24:12.160 --> 00:24:16.639 which the developers might not have noticed or known about, -00:24:16.700 --> 00:24:19.133 +00:24:16.640 --> 00:24:19.079 then you are certainly helping out a lot of other people -00:24:19.166 --> 00:24:21.766 +00:24:19.080 --> 00:24:21.679 which might run into the same issue in the future. -00:24:21.800 --> 00:24:23.200 +00:24:21.680 --> 00:24:23.119 Especially with upgrades, -00:24:23.233 --> 00:24:26.566 +00:24:23.120 --> 00:24:26.559 it would be nice to figure out small problems -00:24:26.600 --> 00:24:30.800 +00:24:26.560 --> 00:24:30.759 which make upgrading difficult for some people. -00:24:30.833 --> 00:24:34.700 +00:24:30.760 --> 00:24:34.559 The ideal is, of course, to have no issues -00:24:34.700 --> 00:24:37.199 +00:24:34.560 --> 00:24:36.159 when upgrading from one version to another. -00:24:37.200 --> 00:24:39.566 +00:24:36.160 --> 00:24:39.519 Having said that, I thank you for your attention, -00:24:39.600 --> 00:24:43.766 +00:24:39.520 --> 00:24:43.680 and I'm saying goodbye. diff --git a/2024/info/emacs30-after.md b/2024/info/emacs30-after.md index 1e64a9c4..4e0634b0 100644 --- a/2024/info/emacs30-after.md +++ b/2024/info/emacs30-after.md @@ -1,465 +1,462 @@ <!-- Automatically generated by emacsconf-publish-after-page --> -<div class="transcript transcript-mainVideo"><a name="emacs30-mainVideo-transcript"></a><h1>Transcript</h1> +<div class="transcript transcript-mainVideo"><a name="emacs30-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> <div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024.""" start="00:00:00.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Before I begin, I'd like to thank the organizers""" start="00:00:06.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and everyone involved for putting this all together.""" start="00:00:08.866" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Before I begin, I'd like to thank the organizers""" start="00:00:06.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and everyone involved for putting this all together.""" start="00:00:08.840" video="mainVideo-emacs30" id="subtitle"]] [[!template text="""While this talk is being pre-recorded,""" start="00:00:11.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""my experience from the last few years""" start="00:00:13.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""assures me that it will be a great experience for everyone.""" start="00:00:15.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""My name is Philip Kaludercic.""" start="00:00:19.133" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I am a core contributor and ELPA co-maintainer.""" start="00:00:21.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I was honored when Sacha asked me""" start="00:00:24.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to take over the slot for this year.""" start="00:00:26.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""In the past few iterations,""" start="00:00:28.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""John Wiegley has filled a similar presentation""" start="00:00:29.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""focusing on more general Emacs development updates.""" start="00:00:32.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This year, I will specifically focus on""" start="00:00:35.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""highlight features from the upcoming Emacs 30 release,""" start="00:00:38.502" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which might or might not have been released""" start="00:00:41.933" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""by the time you are seeing this.""" start="00:00:44.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""As you can imagine, everything new about Emacs""" start="00:00:48.060" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""can always be found in the Emacs NEWS file.""" start="00:00:51.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Or, alternatively,""" start="00:00:55.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""if one doesn't want to read through the 3,000 lines here,""" start="00:00:57.133" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""one can also take a look at the Emacs FAQ""" start="00:01:01.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and then go to the what's new about""" start="00:01:05.266" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""my experience from the last few years""" start="00:00:13.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""assures me that it will be a great experience for everyone.""" start="00:00:15.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""My name is Philip Kaludercic.""" start="00:00:19.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I am a core contributor and ELPA co-maintainer.""" start="00:00:21.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I was honored when Sacha asked me""" start="00:00:24.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to take over the slot for this year.""" start="00:00:26.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""In the past few iterations,""" start="00:00:28.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""John Wiegley has filled a similar presentation""" start="00:00:29.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""focusing on more general Emacs development updates.""" start="00:00:32.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This year, I will specifically focus on""" start="00:00:35.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""highlight features from the upcoming Emacs 30 release,""" start="00:00:38.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which might or might not have been released""" start="00:00:41.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""by the time you are seeing this.""" start="00:00:45.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""As you can imagine, everything new about Emacs""" start="00:00:48.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""can always be found in the Emacs NEWS file.""" start="00:00:51.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Or, alternatively,""" start="00:00:55.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""if one doesn't want to read through the 3,000 lines here,""" start="00:00:57.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""one can also take a look at the Emacs FAQ""" start="00:01:01.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and then go to the what's new about""" start="00:01:05.280" video="mainVideo-emacs30" id="subtitle"]] [[!template text="""or what's different about Emacs 30 node.""" start="00:01:08.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Next to these two official options,""" start="00:01:12.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I also have a page on Emacs Wiki""" start="00:01:14.733" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""called EmacsThirtyHighlights,""" start="00:01:18.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""highlighting some of the interesting features""" start="00:01:21.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with some context and suggestions on how to try them out.""" start="00:01:24.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is more of a collaborative effort.""" start="00:01:28.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So if you see this and think something is missing,""" start="00:01:30.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""feel free to add it.""" start="00:01:32.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So without further ado,""" start="00:01:34.533" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""let's begin taking a look at new features in Emacs 30.""" start="00:01:36.866" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Next to these two official options,""" start="00:01:10.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I also have a page on Emacs Wiki""" start="00:01:14.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""called EmacsThirtyHighlights,""" start="00:01:18.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""highlighting some of the interesting features""" start="00:01:20.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with some context and suggestions on how to try them out.""" start="00:01:24.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is more of a collaborative effort.""" start="00:01:28.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So if you see this and think something is missing,""" start="00:01:30.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""feel free to add it.""" start="00:01:32.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So without further ado,""" start="00:01:34.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""let's begin taking a look at new features in Emacs 30.""" start="00:01:36.840" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""Android""" start="00:01:41.800" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""The biggest one, and the one I want to mention first,""" start="00:01:41.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""is Android support, native Android support.""" start="00:01:44.733" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""As you can see here, Emacs has been ported""" start="00:01:49.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to the Android operating system.""" start="00:01:51.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""What this means is that from Emacs 30 onwards,""" start="00:01:53.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you can build Android to target Android devices natively""" start="00:01:56.533" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and using a graphical interface.""" start="00:02:01.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""While it has been possible to run Emacs""" start="00:02:06.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""inside of terminal emulators on Android for a while,""" start="00:02:08.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""this actually means that you can use Emacs""" start="00:02:11.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""on an Android device, a phone or a tablet,""" start="00:02:13.933" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and have all the usual advantages from GUI Emacs,""" start="00:02:17.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""such as the ability to bind all commands""" start="00:02:20.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""without having to worry about--""" start="00:02:23.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""all keys without having to worry""" start="00:02:25.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""about terminal compatibility issues,""" start="00:02:27.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""displaying images and multiple fonts""" start="00:02:29.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""on the same display of different sizes.""" start="00:02:32.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I should have a recording""" start="00:02:35.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""of that somewhere here--here we are--""" start="00:02:37.333" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Android""" start="00:01:41.760" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""The biggest one, and the one I want to mention first,""" start="00:01:41.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""is Android support, native Android support.""" start="00:01:44.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""As you can see here, Emacs has been ported""" start="00:01:49.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to the Android operating system.""" start="00:01:51.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""What this means is that from Emacs 30 onwards,""" start="00:01:53.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you can build Android to target Android devices natively""" start="00:01:56.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and using a graphical interface.""" start="00:02:01.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""While it has been possible to run Emacs""" start="00:02:06.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""inside of terminal emulators on Android for a while,""" start="00:02:08.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""this actually means that you can use Emacs""" start="00:02:11.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""on an Android device, a phone or a tablet,""" start="00:02:13.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and have all the usual advantages from GUI Emacs,""" start="00:02:17.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""such as the ability to bind all commands""" start="00:02:20.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""without having to worry about--""" start="00:02:23.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""all keys without having to worry""" start="00:02:25.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""about terminal compatibility issues,""" start="00:02:27.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""displaying images and multiple fonts""" start="00:02:29.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""on the same display of different sizes.""" start="00:02:32.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I should have a recording""" start="00:02:35.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""of that somewhere here--here we are--""" start="00:02:37.280" video="mainVideo-emacs30" id="subtitle"]] [[!template text="""which I made earlier on my phone,""" start="00:02:42.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""because I'm recording this on a laptop--""" start="00:02:44.133" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""where we can see how touch interaction works""" start="00:02:47.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""on an Android phone. I can switch between buffers.""" start="00:02:50.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Here I've connected an external keyboard,""" start="00:02:53.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""opening the Emacs website.""" start="00:02:56.133" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""We have images that we can interact with.""" start="00:02:57.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""We could resize them if we wanted to""" start="00:03:02.560" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with the image resizing commands.""" start="00:03:04.320" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Pinch-to-zoom works, so it""" start="00:03:07.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""does realize what touchscreen interactions are.""" start="00:03:10.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""With an external mouse, and for example,""" start="00:03:12.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""enabling context menu mode,""" start="00:03:15.266" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""because I'm recording this on a laptop--""" start="00:02:44.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""where we can see how touch interaction works""" start="00:02:47.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""on an Android phone. I can switch between buffers.""" start="00:02:50.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Here I've connected an external keyboard,""" start="00:02:53.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""opening the Emacs website.""" start="00:02:56.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""We have images that we can interact with.""" start="00:02:58.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""We could resize them if we wanted to""" start="00:03:02.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with the image resizing commands.""" start="00:03:05.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Pinch-to-zoom works, so it""" start="00:03:07.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""does realize what touchscreen interactions are.""" start="00:03:10.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""With an external mouse, and for example,""" start="00:03:12.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""enabling context menu mode,""" start="00:03:15.240" video="mainVideo-emacs30" id="subtitle"]] [[!template text="""I can even pop up little interaction windows,""" start="00:03:17.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which one you would usually also know from GUI Emacs.""" start="00:03:23.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""TUI Emacs actually also supports them since a while now.""" start="00:03:28.140" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""And in this case, I'm demonstrating""" start="00:03:33.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""how even the touchscreen events""" start="00:03:34.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which one you would usually also know from GUI Emacs.""" start="00:03:23.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""TUI Emacs actually also supports them since a while now.""" start="00:03:27.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""And in this case, I'm demonstrating""" start="00:03:32.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""how even the touchscreen events""" start="00:03:34.640" video="mainVideo-emacs30" id="subtitle"]] [[!template text="""can be inspected using the usual help system,""" start="00:03:36.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and how context-mode notices""" start="00:03:39.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""where we are and allows me to, for example,""" start="00:03:43.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""evaluate this specific region,""" start="00:03:45.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and how context-mode notices""" start="00:03:39.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""where we are and allows me to, for example,""" start="00:03:43.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""evaluate this specific region,""" start="00:03:45.240" video="mainVideo-emacs30" id="subtitle"]] [[!template text="""which I've highlighted down there,""" start="00:03:47.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""binding a command to touch-screen-scroll. Yeah.""" start="00:03:49.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""One should note that these additions,""" start="00:03:58.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for example touchscreen interaction,""" start="00:04:00.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""are not specific to Android,""" start="00:04:02.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but they also are supported in other operating systems,""" start="00:04:03.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""such as Wayland and Xorg, which are not operating systems,""" start="00:04:07.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and Windows, insofar as they have touchscreen,""" start="00:04:12.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and devices have touchscreen support.""" start="00:04:15.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""One should mention, or I want to mention,""" start="00:04:18.420" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""that the main developer behind this feature, Po Lu,""" start="00:04:21.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""should be complimented for the additional effort he put""" start="00:04:24.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""into making sure that Emacs for Android""" start="00:04:27.533" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""can be built using only a free software toolchain,""" start="00:04:31.020" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which is certainly not something one has come to expect""" start="00:04:34.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""from working on Android applications,""" start="00:04:36.360" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""as usually you have to agree to some terms and conditions""" start="00:04:40.733" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for Google-specific software.""" start="00:04:43.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Final note is that if you try and look for this online,""" start="00:04:46.520" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""there are APKs you can find,""" start="00:04:49.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but some of them might be outdated.""" start="00:04:52.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""To the best of my knowledge, Po Lu has...""" start="00:04:54.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Emacs 30 Android Sourceforge...""" start="00:04:59.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""He has set up some system where here in Sourceforge,""" start="00:05:03.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""there are regular and updated""" start="00:05:06.533" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""APK files which you can download""" start="00:05:12.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to avoid having to build it yourself,""" start="00:05:14.533" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""testing out the newest version""" start="00:05:16.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""in case there are some bugs which you'd like to report.""" start="00:05:18.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Which-key is a package which has now been moved""" start="00:05:24.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""from ELPA to the core.""" start="00:05:33.133" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If you haven't heard of which-key before, the idea is,""" start="00:05:35.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or the general pitch is that which-key""" start="00:05:39.180" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""is a additional documentation interface for Emacs""" start="00:05:41.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for displaying various keys which you could input,""" start="00:05:45.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or various keys and key maps""" start="00:05:49.733" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""that have been partially inputted.""" start="00:05:53.440" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""A better way to demonstrate this""" start="00:05:54.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or to explain this is just to show it.""" start="00:05:57.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If we enable the which-key mode--it's a global minor mode--""" start="00:05:59.333" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then I can press, for example, C-x,""" start="00:06:03.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which is a prefix for the C-x keymap.""" start="00:06:06.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Then down here in the buffer, in this window down here,""" start="00:06:08.733" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""we see various commands which we could invoke""" start="00:06:12.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and the keys to invoke them with.""" start="00:06:15.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""For example, if I wanted to say C-x i for insert-file,""" start="00:06:17.933" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then I just have to press i to highlight it once again.""" start="00:06:23.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It should be down here. Pressing i without having to repeat""" start="00:06:27.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""the entire key code again,""" start="00:06:32.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""the partial key code again, just works.""" start="00:06:34.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is different from the feature which Emacs has already,""" start="00:06:37.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which is if you have input the partial keychord,""" start="00:06:41.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you can press C-h""" start="00:06:45.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and then a help buffer pops up with a listing""" start="00:06:47.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""of all keybindings that start with C-x.""" start="00:06:51.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""The information is the same, the presentation is different,""" start="00:06:54.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""because now if I wanted to do C-x i,""" start="00:06:56.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I have to repeat the entire keychord again.""" start="00:06:59.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So it's a matter of personal preference, which you prefer.""" start="00:07:03.340" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is more of a traditional static approach""" start="00:07:09.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""because I get a help buffer which I can search""" start="00:07:10.960" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""using usual key commands,""" start="00:07:19.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""while which-key is more of a transient and modern.""" start="00:07:20.933" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Some might prefer that approach""" start="00:07:28.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to solving the same problem.""" start="00:07:31.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Also, don't forget to check out the customization group""" start="00:07:35.720" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for which-key which has a number of options""" start="00:07:39.133" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which you might or might not be interested in.""" start="00:07:41.966" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""binding a command to touch-screen-scroll. Yeah.""" start="00:03:49.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""One should note that these additions,""" start="00:03:58.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""for example touchscreen interaction,""" start="00:04:00.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""are not specific to Android,""" start="00:04:02.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but they also are supported in other operating systems,""" start="00:04:04.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""such as Wayland and Xorg, which are not operating systems,""" start="00:04:06.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and Windows, insofar as they have touchscreen,""" start="00:04:12.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and devices have touchscreen support.""" start="00:04:15.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""One should mention, or I want to mention,""" start="00:04:17.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""that the main developer behind this feature, Po Lu,""" start="00:04:21.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""should be complimented for the additional effort he put""" start="00:04:24.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""into making sure that Emacs for Android""" start="00:04:27.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""can be built using only a free software toolchain,""" start="00:04:29.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which is certainly not something one has come to expect""" start="00:04:33.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""from working on Android applications,""" start="00:04:37.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""as usually you have to agree to some terms and conditions""" start="00:04:40.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""for Google-specific software.""" start="00:04:43.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Final note is that if you try and look for this online,""" start="00:04:46.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""there are APKs you can find,""" start="00:04:49.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but some of them might be outdated.""" start="00:04:52.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""To the best of my knowledge, Po Lu has...""" start="00:04:54.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Emacs 30 Android Sourceforge...""" start="00:04:59.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""He has set up some system where here in Sourceforge,""" start="00:05:02.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""there are regular and updated""" start="00:05:06.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""APK files which you can download""" start="00:05:10.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to avoid having to build it yourself,""" start="00:05:14.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""testing out the newest version""" start="00:05:17.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""in case there are some bugs which you'd like to report.""" start="00:05:18.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Which-key is a package which has now been moved""" start="00:05:30.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""from ELPA to the core.""" start="00:05:33.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If you haven't heard of which-key before, the idea is,""" start="00:05:34.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or the general pitch is that which-key""" start="00:05:38.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""is a additional documentation interface for Emacs""" start="00:05:41.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""for displaying various keys which you could input,""" start="00:05:45.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or various keys and key maps""" start="00:05:49.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""that have been partially inputted.""" start="00:05:52.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""A better way to demonstrate this""" start="00:05:55.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or to explain this is just to show it.""" start="00:05:57.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If we enable the which-key mode--it's a global minor mode--""" start="00:05:59.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then I can press, for example, C-x,""" start="00:06:03.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which is a prefix for the C-x keymap.""" start="00:06:06.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Then down here in the buffer, in this window down here,""" start="00:06:08.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""we see various commands which we could invoke""" start="00:06:11.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and the keys to invoke them with.""" start="00:06:15.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""For example, if I wanted to say C-x i for insert-file,""" start="00:06:17.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then I just have to press i to highlight it once again.""" start="00:06:23.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It should be down here. Pressing i without having to repeat""" start="00:06:27.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""the entire key code again,""" start="00:06:32.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""the partial key code again, just works.""" start="00:06:34.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is different from the feature which Emacs has already,""" start="00:06:37.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which is if you have input the partial keychord,""" start="00:06:41.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you can press C-h""" start="00:06:45.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and then a help buffer pops up with a listing""" start="00:06:47.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""of all keybindings that start with C-x.""" start="00:06:50.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""The information is the same, the presentation is different,""" start="00:06:54.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""because now if I wanted to do C-x i,""" start="00:06:56.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I have to repeat the entire keychord again.""" start="00:06:59.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So it's a matter of personal preference, which you prefer.""" start="00:07:02.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is more of a traditional static approach""" start="00:07:09.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""because I get a help buffer which I can search""" start="00:07:12.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""using usual key commands,""" start="00:07:19.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""while which-key is more of a transient and modern.""" start="00:07:21.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Some might prefer that approach""" start="00:07:28.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to solving the same problem.""" start="00:07:30.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Also, don't forget to check out the customization group""" start="00:07:33.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""for which-key which has a number of options""" start="00:07:39.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which you might or might not be interested in.""" start="00:07:41.960" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""EditorConfig""" start="00:07:45.720" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, Emacs 30 has built-in EditorConfig support.""" start="00:07:45.720" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If you have not heard of EditorConfig before,""" start="00:07:50.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I believe I've linked to it down here somewhere.""" start="00:07:53.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Ah, there it is, EditorConfig.""" start="00:07:56.640" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is a file format used to specify""" start="00:08:00.120" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""common formatting rules in an editor-agnostic way.""" start="00:08:09.420" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""You might compare it to .dir-locals.el files,""" start="00:08:12.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which is a sort of an s-expression""" start="00:08:16.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for setting file-local variables in Emacs.""" start="00:08:19.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Of course, this is restricted to the common subset""" start="00:08:22.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""of what all editors should understand.""" start="00:08:27.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""For example, indentation styles,""" start="00:08:29.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""whether you prefer tabs or spaces,""" start="00:08:31.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""tab width, file encoding, and so on.""" start="00:08:35.120" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So it's nothing too advanced, but it's something...""" start="00:08:38.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It is a file format which one sees popping up more""" start="00:08:43.920" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and more often in lots of projects""" start="00:08:48.533" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which want to enforce a consistent indentation style""" start="00:08:50.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or formatting rules for all editors in a project.""" start="00:08:53.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Having this built in is certainly useful in Emacs.""" start="00:08:56.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Though one should note that it's not enabled by default.""" start="00:09:00.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""You still have to enable the global minor mode,""" start="00:09:03.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which is simply turning on this one option.""" start="00:09:10.940" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Shouldn't be more than that,""" start="00:09:14.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and then Emacs will respect the rules.""" start="00:09:15.533" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If it finds a .editorconfig file in the project directory,""" start="00:09:18.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then it will respect those rules""" start="00:09:23.641" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""without having to do anything else.""" start="00:09:25.321" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""EditorConfig""" start="00:07:43.680" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, Emacs 30 has built-in EditorConfig support.""" start="00:07:43.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If you have not heard of EditorConfig before,""" start="00:07:50.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I believe I've linked to it down here somewhere.""" start="00:07:53.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Ah, there it is, EditorConfig.""" start="00:07:57.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is a file format used to specify""" start="00:08:02.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""common formatting rules in an editor-agnostic way.""" start="00:08:06.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""You might compare it to .dir-locals.el files,""" start="00:08:11.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which is a sort of an s-expression""" start="00:08:16.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""for setting file-local variables in Emacs.""" start="00:08:19.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Of course, this is restricted to the common subset""" start="00:08:22.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""of what all editors should understand.""" start="00:08:25.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""For example, indentation styles,""" start="00:08:28.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""whether you prefer tabs or spaces,""" start="00:08:31.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""tab width, file encoding, and so on.""" start="00:08:34.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So it's nothing too advanced, but it's something...""" start="00:08:38.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It is a file format which one sees popping up more""" start="00:08:42.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and more often in lots of projects""" start="00:08:48.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which want to enforce a consistent indentation style""" start="00:08:50.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or formatting rules for all editors in a project.""" start="00:08:53.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Having this built in is certainly useful in Emacs.""" start="00:08:56.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Though one should note that it's not enabled by default.""" start="00:09:00.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""You still have to enable the global minor mode,""" start="00:09:04.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which is simply turning on this one option.""" start="00:09:09.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Shouldn't be more than that,""" start="00:09:14.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and then Emacs will respect the rules.""" start="00:09:15.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If it finds a .editorconfig file in the project directory,""" start="00:09:18.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then it will respect those rules""" start="00:09:31.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""without having to do anything else.""" start="00:09:35.840" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""use-package integration with package-vc""" start="00:09:27.310" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, use-package integration with package-vc.""" start="00:09:27.310" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""For those not familiar with either of the two,""" start="00:09:33.568" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or at least one of the two,""" start="00:09:36.534" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""use-package is a popular configuration macro.""" start="00:09:37.534" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""What it does is it allows""" start="00:09:40.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""users to declaratively specify packages""" start="00:09:42.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""they would like to have installed and configured""" start="00:09:46.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""in their configuration file,""" start="00:09:48.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""so that, for example, if you copy your init.el""" start="00:09:51.660" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""from one system to another,""" start="00:09:54.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""it could bootstrap the entire configuration,""" start="00:09:55.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""downloading all the packages you want""" start="00:09:58.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""without having to manually do this""" start="00:10:00.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""on every system you'd like to use.""" start="00:10:02.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This allows configurations""" start="00:10:05.140" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to be self-encapsulated and portable.""" start="00:10:07.633" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""package-vc is an extension of package.el,""" start="00:10:10.860" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which allows installing packages from an alternative.""" start="00:10:15.060" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Instead of using the standard way to install packages,""" start="00:10:19.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which is just download tarball and unpack it,""" start="00:10:22.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""byte compile, and so on,""" start="00:10:26.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""it will fetch the files for a package""" start="00:10:27.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""directly from the source code repository""" start="00:10:32.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and initialize it in such a way""" start="00:10:35.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""that package.el can work with it.""" start="00:10:37.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So it's just a front-end for installing packages.""" start="00:10:38.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Even though these two were added to Emacs 29,""" start="00:10:44.240" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""we didn't have the time to work on the""" start="00:10:46.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""use-package integration of package-vc into use-package,""" start="00:10:48.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which has been changed now.""" start="00:10:52.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""What we have with Emacs 30 is that""" start="00:10:54.633" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""there is a :vc keyword for use-package""" start="00:11:00.140" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with which we can instruct use-package""" start="00:11:02.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to not download a package using tarball,""" start="00:11:05.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but instead to fetch the source code""" start="00:11:10.240" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""from a source code repository.""" start="00:11:12.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is useful if you, for example,""" start="00:11:13.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""have packages which you yourself work on""" start="00:11:15.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and know that you always want to have""" start="00:11:18.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""the development version of the package""" start="00:11:19.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""where you can directly commit changes you've made""" start="00:11:21.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to the repository and push them upstream.""" start="00:11:26.820" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Or, if you know that you want to contribute to a package,""" start="00:11:29.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you can use package-vc to download the source code,""" start="00:11:32.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""have all the version control information,""" start="00:11:35.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""prepare a patch and send it upstream.""" start="00:11:37.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""In these examples here,""" start="00:11:41.740" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""the first example Lisp instructs package-vc""" start="00:11:43.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to download the source code from a URL.""" start="00:11:49.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So this is a git URL where it will download""" start="00:11:52.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""the source code from, and in this case,""" start="00:11:55.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""choose the newest checkout of the source code,""" start="00:11:57.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""not the latest release. Down here, we have another example.""" start="00:12:00.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I prefer to consider the following example here.""" start="00:12:04.940" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If we just had written this,""" start="00:12:08.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then package-vc would use the metadata""" start="00:12:10.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which an ELPA server provides""" start="00:12:13.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to fetch the URL from the official repository of,""" start="00:12:15.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""in this case, BBDB, without having to...""" start="00:12:20.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It would be more or less the same like this up here,""" start="00:12:22.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with the simple difference that package-vc integration""" start="00:12:27.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""into use-package doesn't check out the latest commit,""" start="00:12:32.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but the latest release,""" start="00:12:36.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""just to keep configurations more deterministic by default.""" start="00:12:37.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Of course, if you prefer to use latest commit,""" start="00:12:44.980" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you can use a package-vc install command""" start="00:12:47.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or just update the package manually yourself,""" start="00:12:52.180" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which you can use using package-vc-upgrade.""" start="00:12:54.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Next, I'd like to focus on a few features""" start="00:13:01.780" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which one might not necessarily realize directly,""" start="00:13:04.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but will hopefully improve your experience with Emacs.""" start="00:13:07.033" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""use-package integration with package-vc""" start="00:09:38.440" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, use-package integration with package-vc.""" start="00:09:38.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""For those not familiar with either of the two,""" start="00:09:45.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or at least one of the two,""" start="00:09:48.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""use-package is a popular configuration macro.""" start="00:09:49.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""What it does is it allows""" start="00:09:52.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""users to declaratively specify packages""" start="00:09:54.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""they would like to have installed and configured""" start="00:09:56.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""in their configuration file,""" start="00:10:00.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""so that, for example, if you copy your init.el""" start="00:10:01.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""from one system to another,""" start="00:10:05.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""it could bootstrap the entire configuration,""" start="00:10:07.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""downloading all the packages you want""" start="00:10:09.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""without having to manually do this""" start="00:10:12.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""on every system you'd like to use.""" start="00:10:13.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This allows configurations""" start="00:10:15.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to be self-encapsulated and portable.""" start="00:10:19.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""package-vc is an extension of package.el,""" start="00:10:21.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which allows installing packages from an alternative.""" start="00:10:27.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Instead of using the standard way to install packages,""" start="00:10:30.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which is just download tarball and unpack it,""" start="00:10:33.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""byte compile, and so on,""" start="00:10:37.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""it will fetch the files for a package""" start="00:10:39.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""directly from the source code repository""" start="00:10:44.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and initialize it in such a way""" start="00:10:46.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""that package.el can work with it.""" start="00:10:48.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So it's just a front-end for installing packages.""" start="00:10:50.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Even though these two were added to Emacs 29,""" start="00:10:54.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""we didn't have the time to work on the""" start="00:10:58.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""use-package integration of package-vc into use-package,""" start="00:10:59.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which has been changed now.""" start="00:11:04.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""What we have with Emacs 30 is that""" start="00:11:06.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""there is a :vc keyword for use-package""" start="00:11:10.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with which we can instruct use-package""" start="00:11:14.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to not download a package using tarball,""" start="00:11:16.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but instead to fetch the source code""" start="00:11:20.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""from a source code repository.""" start="00:11:23.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is useful if you, for example,""" start="00:11:25.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""have packages which you yourself work on""" start="00:11:27.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and know that you always want to have""" start="00:11:29.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""the development version of the package""" start="00:11:31.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""where you can directly commit changes you've made""" start="00:11:33.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to the repository and push them upstream.""" start="00:11:37.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Or, if you know that you want to contribute to a package,""" start="00:11:40.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you can use package-vc to download the source code,""" start="00:11:43.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""have all the version control information,""" start="00:11:46.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""prepare a patch and send it upstream.""" start="00:11:48.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""In these examples here,""" start="00:11:50.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""the first example Lisp instructs package-vc""" start="00:11:54.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to download the source code from a URL.""" start="00:12:00.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So this is a git URL where it will download""" start="00:12:03.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""the source code from, and in this case,""" start="00:12:06.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""choose the newest checkout of the source code,""" start="00:12:08.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""not the latest release. Down here, we have another example.""" start="00:12:11.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I prefer to consider the following example here.""" start="00:12:15.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If we just had written this,""" start="00:12:20.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then package-vc would use the metadata""" start="00:12:22.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which an ELPA server provides""" start="00:12:24.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to fetch the URL from the official repository of,""" start="00:12:26.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""in this case, BBDB, without having to...""" start="00:12:31.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It would be more or less the same like this up here,""" start="00:12:34.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with the simple difference that package-vc integration""" start="00:12:39.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""into use-package doesn't check out the latest commit,""" start="00:12:44.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but the latest release,""" start="00:12:47.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""just to keep configurations more deterministic by default.""" start="00:12:49.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Of course, if you prefer to use latest commit,""" start="00:12:54.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you can use a package-vc install command""" start="00:12:59.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or just update the package manually yourself,""" start="00:13:01.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which you can use using package-vc-upgrade.""" start="00:13:06.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Next, I'd like to focus on a few features""" start="00:13:13.060" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which one might not necessarily realize directly,""" start="00:13:15.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but will hopefully improve your experience with Emacs.""" start="00:13:18.920" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""JSON""" start="00:13:11.560" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""First up in this list is a new JSON parser.""" start="00:13:11.560" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Let's maybe show the source code for that one:""" start="00:13:15.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""not json.el, json.c. The history of JSON parsing in Emacs""" start="00:13:21.960" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""started with Emacs 23 with the addition of json.el.""" start="00:13:39.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This was the file which we had just opened a moment ago.""" start="00:13:43.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is a JSON parser in Emacs Lisp.""" start="00:13:46.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It's fine, it does the job, but it can get slow""" start="00:13:50.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""if we have a situation like where""" start="00:13:53.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Eglot uses a LSP server to communicate with""" start="00:13:55.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and the LSP server can get a bit chatty,""" start="00:14:00.320" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""sending a lot of JSON data,""" start="00:14:03.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which all has to be parsed and garbage collected,""" start="00:14:05.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which can slow down Emacs a bit.""" start="00:14:08.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""The situation was improved upon in Emacs 29""" start="00:14:09.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""when JSON parsing was added to the core.""" start="00:14:13.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This was the json.c file, which we see on this side,""" start="00:14:18.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""the old version of the json.c file,""" start="00:14:21.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which employed the Jansson library (it's the C library)""" start="00:14:22.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for parsing and accelerating JSON parsing in Emacs.""" start="00:14:26.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This was good enough,""" start="00:14:31.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or it certainly improved the situation""" start="00:14:34.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for a lot of LSP clients.""" start="00:14:36.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""But in Emacs 30, the situation has been improved once more""" start="00:14:38.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with the addition of a JSON parser directly in Emacs.""" start="00:14:44.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So instead of using an external library,""" start="00:14:49.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""there's a custom JSON parser written in C in the Emacs core,""" start="00:14:53.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which directly generates Elisp objects.""" start="00:14:57.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""The advantage to this approach""" start="00:15:01.540" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""compared to the Jansson approach""" start="00:15:05.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""is that there's no intermediate format""" start="00:15:06.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which has to be allocated""" start="00:15:07.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and memory managed and freed again,""" start="00:15:09.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which of course incurs an additional performance overhead.""" start="00:15:11.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Next to this, there's also a custom serializer""" start="00:15:19.540" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""for JSON contents translating a JSON object into a string.""" start="00:15:22.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""... The consequence of this is that""" start="00:15:29.240" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""there is absolutely no dependency on Jansson anymore.""" start="00:15:30.641" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This in turn means that now all Emacs users""" start="00:15:35.520" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""from Emacs 30 onwards""" start="00:15:38.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""can take advantage of this new JSON parser""" start="00:15:39.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and don't have to worry about whether""" start="00:15:42.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or not they have Jansson, this JSON parsing library,""" start="00:15:44.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""installed on their system or not when they want""" start="00:15:47.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to take advantage of this accelerated JSON parsing.""" start="00:15:50.466" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""JSON""" start="00:13:22.860" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""First up in this list is a new JSON parser.""" start="00:13:22.860" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Let's maybe show the source code for that one:""" start="00:13:26.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""not json.el, json.c. The history of JSON parsing in Emacs""" start="00:13:29.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""started with Emacs 23 with the addition of json.el.""" start="00:13:51.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This was the file which we had just opened a moment ago.""" start="00:13:54.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is a JSON parser in Emacs Lisp.""" start="00:13:58.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It's fine, it does the job, but it can get slow""" start="00:14:02.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""if we have a situation like where""" start="00:14:04.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Eglot uses a LSP server to communicate with""" start="00:14:06.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and the LSP server can get a bit chatty,""" start="00:14:11.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""sending a lot of JSON data,""" start="00:14:14.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which all has to be parsed and garbage collected,""" start="00:14:17.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which can slow down Emacs a bit.""" start="00:14:19.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""The situation was improved upon in Emacs 29""" start="00:14:21.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""when JSON parsing was added to the core.""" start="00:14:25.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This was the json.c file, which we see on this side,""" start="00:14:29.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""the old version of the json.c file,""" start="00:14:32.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which employed the Jansson library (it's the C library)""" start="00:14:34.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""for parsing and accelerating JSON parsing in Emacs.""" start="00:14:38.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This was good enough,""" start="00:14:42.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or it certainly improved the situation""" start="00:14:45.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""for a lot of LSP clients.""" start="00:14:47.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""But in Emacs 30, the situation has been improved once more""" start="00:14:50.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with the addition of a JSON parser directly in Emacs.""" start="00:14:53.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So instead of using an external library,""" start="00:15:01.175" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""there's a custom JSON parser written in C in the Emacs core,""" start="00:15:03.875" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which directly generates Elisp objects.""" start="00:15:08.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""The advantage to this approach""" start="00:15:12.241" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""compared to the Jansson approach""" start="00:15:16.575" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""is that there's no intermediate format""" start="00:15:18.008" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which has to be allocated""" start="00:15:19.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and memory managed and freed again,""" start="00:15:20.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which of course incurs an additional performance overhead.""" start="00:15:23.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""There is absolutely no dependency on Jansson anymore.""" start="00:15:30.241" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This in turn means that now all Emacs users""" start="00:15:35.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""from Emacs 30 onwards""" start="00:15:38.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""can take advantage of this new JSON parser""" start="00:15:39.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and don't have to worry about whether""" start="00:15:42.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or not they have Jansson, this JSON parsing library,""" start="00:15:44.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""installed on their system or not when they want""" start="00:15:47.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to take advantage of this accelerated JSON parsing.""" start="00:15:51.000" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""Native compilation""" start="00:15:56.680" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, another behind-the-scenes feature""" start="00:15:56.680" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""is that if you build Emacs on your own from source,""" start="00:16:00.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you might know that if you wanted""" start="00:16:06.407" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to use native compilation,""" start="00:16:07.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""so the translation of Elisp bytecodes""" start="00:16:09.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to whatever the native assembly""" start="00:16:12.380" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or native instruction set is on your system,""" start="00:16:15.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you have to specify with native compilation.""" start="00:16:19.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""when invoking the configure script,""" start="00:16:24.340" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""otherwise it would not have been enabled at all.""" start="00:16:25.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""With Emacs 30, this step is not necessary anymore.""" start="00:16:28.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""The configure script will automatically check""" start="00:16:32.480" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""if you have the libgccjit library installed on your system,""" start="00:16:36.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and if that is so,""" start="00:16:41.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then native compilation will be enabled by default.""" start="00:16:42.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""In other words, if you have an issue with native compilation""" start="00:16:45.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or prefer not to use it for whatever reason,""" start="00:16:49.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you now have to type --without-native-compilation""" start="00:16:52.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""when compiling Emacs to prevent this from happening.""" start="00:16:55.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""But native compilation was added in Emacs 28""" start="00:16:58.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and has proven to be a very stable""" start="00:17:02.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and useful feature for most people,""" start="00:17:04.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""so there's probably no reason to do this""" start="00:17:06.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and you can just invoke the configure script""" start="00:17:09.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with one argument less. Right, and I'd like to finish up""" start="00:17:11.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with a few smaller features, a few smaller highlights.""" start="00:17:16.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Maybe we can go back to the listing here. Here we have it.""" start="00:17:19.500" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Native compilation""" start="00:15:56.800" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Next up, another behind-the-scenes feature""" start="00:15:56.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""is that if you build Emacs on your own from source,""" start="00:16:00.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you might know that if you wanted""" start="00:16:03.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to use native compilation,""" start="00:16:07.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""so the translation of Elisp bytecodes""" start="00:16:09.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to whatever the native assembly""" start="00:16:13.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or native instruction set is on your system,""" start="00:16:15.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you have to specify with native compilation.""" start="00:16:19.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""when invoking the configure script,""" start="00:16:24.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""otherwise it would not have been enabled at all.""" start="00:16:25.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""With Emacs 30, this step is not necessary anymore.""" start="00:16:28.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""The configure script will automatically check""" start="00:16:31.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""if you have the libgccjit library installed on your system,""" start="00:16:36.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and if that is so,""" start="00:16:41.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then native compilation will be enabled by default.""" start="00:16:42.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""In other words, if you have an issue with native compilation""" start="00:16:45.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or prefer not to use it for whatever reason,""" start="00:16:49.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you now have to type --without-native-compilation""" start="00:16:52.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""when compiling Emacs to prevent this from happening.""" start="00:16:55.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""But native compilation was added in Emacs 28""" start="00:16:58.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and has proven to be a very stable""" start="00:17:02.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and useful feature for most people,""" start="00:17:04.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""so there's probably no reason to do this""" start="00:17:06.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and you can just invoke the configure script""" start="00:17:09.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with one argument less. Right, and I'd like to finish up""" start="00:17:11.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with a few smaller features, a few smaller highlights.""" start="00:17:16.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Maybe we can go back to the listing here. Here we have it.""" start="00:17:19.400" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""Tree-sitter""" start="00:17:29.640" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""There are a few new major modes""" start="00:17:29.640" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""based on the tree-sitter library.""" start="00:17:32.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""tree-sitter is this parser library""" start="00:17:34.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which has been integrated into Emacs 29.""" start="00:17:37.940" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It allows the integration""" start="00:17:39.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""of external, specialized, and quick parsers into Emacs,""" start="00:17:44.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which improve stuff like syntax highlighting, indentation,""" start="00:17:48.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""structural navigation, imenu support,""" start="00:17:52.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""by simply having a better understanding of, for example,""" start="00:17:55.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""a HTML file, or a Lua file, a PHP file,""" start="00:18:01.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""than what people usually implement""" start="00:18:03.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""using regular expressions in traditional major modes.""" start="00:18:06.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So, a few new major modes which you can try out here.""" start="00:18:10.400" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Tree-sitter""" start="00:17:29.580" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""There are a few new major modes""" start="00:17:29.580" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""based on the tree-sitter library.""" start="00:17:32.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""tree-sitter is this parser library""" start="00:17:34.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which has been integrated into Emacs 29.""" start="00:17:37.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It allows the integration""" start="00:17:42.700" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""of external, specialized, and quick parsers into Emacs,""" start="00:17:44.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which improve stuff like syntax highlighting, indentation,""" start="00:17:48.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""structural navigation, imenu support,""" start="00:17:52.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""by simply having a better understanding of, for example,""" start="00:17:55.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""a HTML file, or a Lua file, a PHP file,""" start="00:18:00.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""than what people usually implement""" start="00:18:03.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""using regular expressions in traditional major modes.""" start="00:18:06.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So, a few new major modes which you can try out here.""" start="00:18:10.320" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""Completion preview mode""" start="00:18:16.780" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another interesting feature is the completion-preview-mode.""" start="00:18:16.780" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""We can maybe try it out here in the scratch buffer.""" start="00:18:20.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If I enable completion-preview-mode...""" start="00:18:23.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is a non-global minor mode,""" start="00:18:28.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which will display completion options inline using overlays.""" start="00:18:32.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""For example, if I start typing a longer symbol like define,""" start="00:18:38.633" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""now we have a derived mode. It suggests me to...""" start="00:18:43.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I can just press TAB and then it completes the option here,""" start="00:18:48.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but it didn't actually...""" start="00:18:51.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It's not actually modifying the buffer, it's not pressing,""" start="00:18:51.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""these are just overlays,""" start="00:18:55.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""so if I move around, it gets deleted.""" start="00:18:57.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It wouldn't get saved if I were to save the buffer.""" start="00:18:59.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""The same also should work in a shell buffer.""" start="00:19:02.620" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If I enable completion preview mode here and start...""" start="00:19:05.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""In this case, I'm using the bash completion package,""" start="00:19:08.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which provides additional completion information.""" start="00:19:12.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is not only limited to programming systems,""" start="00:19:15.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but anywhere where you have completion at point in Emacs.""" start="00:19:17.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I can start typing here, ignore, and put ignore-backups,""" start="00:19:22.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and it hints to the options which I have""" start="00:19:26.160" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and allows me to complete them quickly.""" start="00:19:30.033" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Completion preview mode""" start="00:18:16.680" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another interesting feature is the completion-preview-mode.""" start="00:18:16.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""We can maybe try it out here in the scratch buffer.""" start="00:18:19.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If I enable completion-preview-mode...""" start="00:18:23.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is a non-global minor mode,""" start="00:18:28.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which will display completion options inline using overlays.""" start="00:18:32.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""For example, if I start typing a longer symbol like define,""" start="00:18:38.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""now we have a derived mode. It suggests me to...""" start="00:18:43.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I can just press TAB and then it completes the option here,""" start="00:18:48.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but it didn't actually...""" start="00:18:51.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It's not actually modifying the buffer, it's not pressing,""" start="00:18:51.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""these are just overlays,""" start="00:18:55.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""so if I move around, it gets deleted.""" start="00:18:57.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It wouldn't get saved if I were to save the buffer.""" start="00:18:59.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""The same also should work in a shell buffer.""" start="00:19:01.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If I enable completion preview mode here and start...""" start="00:19:04.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""In this case, I'm using the bash completion package,""" start="00:19:08.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which provides additional completion information.""" start="00:19:12.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is not only limited to programming systems,""" start="00:19:15.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but anywhere where you have completion at point in Emacs.""" start="00:19:17.840" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I can start typing here, ignore, and put ignore-backups,""" start="00:19:22.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and it hints to the options which I have""" start="00:19:26.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and allows me to complete them quickly.""" start="00:19:29.880" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""package-isolate""" start="00:19:34.233" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another small feature is the package-isolate command.""" start="00:19:34.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""What this does is it will start""" start="00:19:38.000" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or it will prompt me for packages""" start="00:19:40.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I have installed in my system""" start="00:19:42.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and will start an isolated""" start="00:19:44.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or like "emacs -Q"-ish instance of emacs""" start="00:19:46.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""with only these packages installed.""" start="00:19:51.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So for example, if I said I want slime and I want diff-hl,""" start="00:19:53.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then this is a new Emacs window.""" start="00:20:00.440" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It's unrelated to the one around.""" start="00:20:02.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It uses the same executable, of course,""" start="00:20:04.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but will not load your configuration file""" start="00:20:06.500" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or any other further customizations on your system.""" start="00:20:09.940" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""All it does, it will ensure""" start="00:20:13.680" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""that these packages, which are listed here,""" start="00:20:15.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""so in our case SLIME and dependencies of SLIME and diff-hl,""" start="00:20:17.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""in the system""" start="00:20:24.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""so that I could, for example, as you can see here,""" start="00:20:25.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""diff-hl-mode works.""" start="00:20:29.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Okay, this is not a version-controlled file.""" start="00:20:32.140" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Maybe if we take a look at, have I enabled diff-hl-mode?""" start="00:20:34.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It's enabled in this case. What diff-hl-mode does""" start="00:20:41.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""is it displays these version control changes""" start="00:20:44.633" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""in the fringe of a buffer.""" start="00:20:48.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""And even though this is a uncustomized version of Emacs,""" start="00:20:49.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or an uncustomized instance of Emacs,""" start="00:20:54.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""it was easy for me to load this one package,""" start="00:20:56.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""or these two packages and all the dependencies necessary.""" start="00:20:59.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""As you can imagine, the main purpose for this""" start="00:21:02.066" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""is to make debugging issues easier.""" start="00:21:05.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If you want to report about an issue""" start="00:21:07.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""you have with a package. And if I close this, it's closed""" start="00:21:10.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and everything's thrown away.""" start="00:21:14.900" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""package-isolate""" start="00:19:33.240" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Another small feature is the package-isolate command.""" start="00:19:33.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""What this does is it will start""" start="00:19:37.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or it will prompt me for packages""" start="00:19:39.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I have installed in my system""" start="00:19:42.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and will start an isolated""" start="00:19:44.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or like "emacs -Q"-ish instance of emacs""" start="00:19:46.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""with only these packages installed.""" start="00:19:51.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So for example, if I said I want slime and I want diff-hl,""" start="00:19:53.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then this is a new Emacs window.""" start="00:20:00.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It's unrelated to the one around.""" start="00:20:02.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It uses the same executable, of course,""" start="00:20:04.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but will not load your configuration file""" start="00:20:06.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or any other further customizations on your system.""" start="00:20:09.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""All it does, it will ensure""" start="00:20:13.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""that these packages, which are listed here,""" start="00:20:15.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""so in our case SLIME and dependencies of SLIME and diff-hl,""" start="00:20:17.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""in the system""" start="00:20:24.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""so that I could, for example, as you can see here,""" start="00:20:25.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""diff-hl-mode works.""" start="00:20:29.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Okay, this is not a version-controlled file.""" start="00:20:32.020" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Maybe if we take a look at, have I enabled diff-hl-mode?""" start="00:20:35.320" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It's enabled in this case. What diff-hl-mode does""" start="00:20:41.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""is it displays these version control changes""" start="00:20:44.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""in the fringe of a buffer.""" start="00:20:48.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""And even though this is a uncustomized version of Emacs,""" start="00:20:50.000" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or an uncustomized instance of Emacs,""" start="00:20:54.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""it was easy for me to load this one package,""" start="00:20:56.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""or these two packages and all the dependencies necessary.""" start="00:20:58.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""As you can imagine, the main purpose for this""" start="00:21:01.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""is to make debugging issues easier.""" start="00:21:04.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If you want to report about an issue""" start="00:21:07.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""you have with a package. And if I close this, it's closed""" start="00:21:10.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and everything's thrown away.""" start="00:21:14.520" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""Reindenting""" start="00:21:16.920" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Last up, a nice feature I think""" start="00:21:16.920" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""a lot of people will appreciate is,""" start="00:21:19.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""if you are familiar with... Let's open a text buffer.""" start="00:21:20.966" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""The M-q key is traditionally bound to fill-paragraph.""" start="00:21:24.300" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""What this means is that...""" start="00:21:30.280" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Let's, for example, copy this text from here""" start="00:21:32.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and squash it all into one line. If I press M-q here,""" start="00:21:35.033" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then the lines will be broken""" start="00:21:40.400" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""according to the fill column indicator up here.""" start="00:21:42.720" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""This is the traditional usage of M-q,""" start="00:21:49.880" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and it still works in text-mode buffers,""" start="00:21:52.633" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""but in prog-mode buffers--""" start="00:21:54.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""so any major mode inheriting prog-mode--""" start="00:21:55.860" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""M-q will now by default be bound""" start="00:22:00.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to prog-fill-reindent-defun. To summarize the point,""" start="00:22:02.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""if you are editing a string or a comment,""" start="00:22:09.780" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then the comment will be filled.""" start="00:22:13.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""But if you are outside of a comment or outside of a string,""" start="00:22:16.040" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then the defun or the top-level construct""" start="00:22:19.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""in the programming language will be re-indented.""" start="00:22:23.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Let's try that out with maybe some file I have open here.""" start="00:22:26.160" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If I'm in this... Let's choose some function,""" start="00:22:34.100" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""let's take this for example.""" start="00:22:38.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If we followed all of this again,""" start="00:22:40.766" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and I press M-q in on this paragraph,""" start="00:22:43.960" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then the paragraph gets re-indented.""" start="00:22:47.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""But if I'm down here and I choose to break the indentation""" start="00:22:49.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and then press M-q,""" start="00:22:55.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then as you see, it practically selected the defun""" start="00:22:58.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and re-indented everything""" start="00:23:02.366" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""without having me to move the point around in the buffer.""" start="00:23:03.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""So I think that's a really nice feature,""" start="00:23:06.960" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which a lot of people can appreciate.""" start="00:23:08.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""It's one of those niceties which comes from time to time.""" start="00:23:11.100" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Reindenting""" start="00:21:15.960" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Last up, a nice feature I think""" start="00:21:15.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""a lot of people will appreciate is,""" start="00:21:18.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""if you are familiar with... Let's open a text buffer.""" start="00:21:21.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""The M-q key is traditionally bound to fill-paragraph.""" start="00:21:24.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""What this means is that...""" start="00:21:29.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Let's, for example, copy this text from here""" start="00:21:32.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and squash it all into one line. If I press M-q here,""" start="00:21:34.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then the lines will be broken""" start="00:21:40.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""according to the fill column indicator up here.""" start="00:21:43.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""This is the traditional usage of M-q,""" start="00:21:49.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and it still works in text-mode buffers,""" start="00:21:52.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""but in prog-mode buffers--""" start="00:21:54.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""so any major mode inheriting prog-mode--""" start="00:21:56.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""M-q will now by default be bound""" start="00:22:00.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to prog-fill-reindent-defun. To summarize the point,""" start="00:22:02.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""if you are editing a string or a comment,""" start="00:22:09.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then the comment will be filled.""" start="00:22:13.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""But if you are outside of a comment or outside of a string,""" start="00:22:15.940" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then the defun or the top-level construct""" start="00:22:19.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""in the programming language will be re-indented.""" start="00:22:22.920" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Let's try that out with maybe some file I have open here.""" start="00:22:25.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If I'm in this... Let's choose some function,""" start="00:22:33.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""let's take this for example.""" start="00:22:37.720" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If we followed all of this again,""" start="00:22:41.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and I press M-q in on this paragraph,""" start="00:22:42.880" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then the paragraph gets re-indented.""" start="00:22:46.480" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""But if I'm down here and I choose to break the indentation""" start="00:22:49.400" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and then press M-q,""" start="00:22:55.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then as you see, it practically selected the defun""" start="00:22:58.240" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and re-indented everything""" start="00:23:02.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""without having me to move the point around in the buffer.""" start="00:23:03.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""So I think that's a really nice feature,""" start="00:23:06.700" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which a lot of people can appreciate.""" start="00:23:08.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""It's one of those niceties which comes from time to time.""" start="00:23:12.920" video="mainVideo-emacs30" id="subtitle"]] -<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:23:17.940" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Right, so that was my overview""" start="00:23:17.940" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""of what's going to be new in Emacs 30.""" start="00:23:20.666" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""I hope that most people could take away""" start="00:23:22.633" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""something from this presentation""" start="00:23:24.433" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and have something to look forward""" start="00:23:25.580" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""to try out after upgrading.""" start="00:23:28.900" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""As mentioned initially, as of recording,""" start="00:23:31.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""this release has not been completed yet.""" start="00:23:33.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If this is still not the case""" start="00:23:36.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""when you're seeing this video,""" start="00:23:38.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""please consider downloading and building Emacs 30 yourself.""" start="00:23:40.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""If you have any issues, which is always the case,""" start="00:23:43.866" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""please report them to using report-emacs-bug.""" start="00:23:48.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""That will pop up a mail buffer,""" start="00:23:56.440" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and then you can describe your issue and send them out.""" start="00:23:57.908" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""All bug reports are valuable,""" start="00:23:59.633" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""even if they are false positives or duplicates--""" start="00:24:01.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""it doesn't matter--""" start="00:24:04.466" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""because when you take the time to submit a bug report,""" start="00:24:05.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which describes something that's specific to your setup,""" start="00:24:08.566" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which the developers might not have noticed or known about,""" start="00:24:12.266" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""then you are certainly helping out a lot of other people""" start="00:24:16.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which might run into the same issue in the future.""" start="00:24:19.166" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Especially with upgrades,""" start="00:24:21.800" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""it would be nice to figure out small problems""" start="00:24:23.233" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""which make upgrading difficult for some people.""" start="00:24:26.600" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""The ideal is, of course, to have no issues""" start="00:24:30.833" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""when upgrading from one version to another.""" start="00:24:34.700" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""Having said that, I thank you for your attention,""" start="00:24:37.200" video="mainVideo-emacs30" id="subtitle"]] -[[!template text="""and I'm saying goodbye.""" start="00:24:39.600" video="mainVideo-emacs30" id="subtitle"]] +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:23:18.280" video="mainVideo-emacs30" id="subtitle"]]</div>[[!template text="""Right, so that was my overview""" start="00:23:18.280" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""of what's going to be new in Emacs 30.""" start="00:23:20.600" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""I hope that most people could take away""" start="00:23:22.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""something from this presentation""" start="00:23:24.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and have something to look forward""" start="00:23:26.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""to try out after upgrading.""" start="00:23:28.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""As mentioned initially, as of recording,""" start="00:23:31.040" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""this release has not been completed yet.""" start="00:23:33.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If this is still not the case""" start="00:23:36.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""when you're seeing this video,""" start="00:23:38.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""please consider downloading and building Emacs 30 yourself.""" start="00:23:40.200" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""If you have any issues, which is always the case,""" start="00:23:43.800" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""please report them to using report-emacs-bug.""" start="00:23:48.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""That will pop up a mail buffer,""" start="00:23:51.960" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and then you can describe your issue and send them out.""" start="00:23:55.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""All bug reports are valuable,""" start="00:23:59.520" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""even if they are false positives or duplicates--""" start="00:24:01.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""it doesn't matter--""" start="00:24:04.360" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""because when you take the time to submit a bug report,""" start="00:24:05.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which describes something that's specific to your setup,""" start="00:24:08.440" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which the developers might not have noticed or known about,""" start="00:24:12.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""then you are certainly helping out a lot of other people""" start="00:24:16.640" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which might run into the same issue in the future.""" start="00:24:19.080" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Especially with upgrades,""" start="00:24:21.680" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""it would be nice to figure out small problems""" start="00:24:23.120" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""which make upgrading difficult for some people.""" start="00:24:26.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""The ideal is, of course, to have no issues""" start="00:24:30.760" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""when upgrading from one version to another.""" start="00:24:34.560" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""Having said that, I thank you for your attention,""" start="00:24:36.160" video="mainVideo-emacs30" id="subtitle"]] +[[!template text="""and I'm saying goodbye.""" start="00:24:39.520" video="mainVideo-emacs30" id="subtitle"]] </div> diff --git a/2024/info/emacs30-before.md b/2024/info/emacs30-before.md index dc1141b8..13f0e5c9 100644 --- a/2024/info/emacs30-before.md +++ b/2024/info/emacs30-before.md @@ -11,18 +11,18 @@ Status: TO_CAPTION_QA <div class="vid mainVideo"><video controls preload="none" id="mainVideo-emacs30"><source src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-emacs30" data=""" 00:00.000 Introduction -01:41.800 Android -07:45.720 EditorConfig -09:27.310 use-package integration with package-vc -13:11.560 JSON -15:56.680 Native compilation -17:29.640 Tree-sitter -18:16.780 Completion preview mode -19:34.233 package-isolate -21:16.920 Reindenting -23:17.940 Wrapping up - -"""]]<div></div>Duration: 24:55 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--edited.webm">Download --edited.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm">Download --main.webm (60MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--notes.org">Download --notes.org</a></li><li><a href="https://toobnix.org/w/fxFD5JMMkmj1bazUw4zErx">View on Toobnix</a></li><li><a href="https://youtu.be/xZJhMAMI7A0">View on Youtube</a></li></ul></div></div> +01:41.760 Android +07:43.680 EditorConfig +09:38.440 use-package integration with package-vc +13:22.860 JSON +15:56.800 Native compilation +17:29.580 Tree-sitter +18:16.680 Completion preview mode +19:33.240 package-isolate +21:15.960 Reindenting +23:18.280 Wrapping up + +"""]]<div></div>Duration: 24:55 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-emacs30">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--edited.webm">Download --edited.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--notes.org">Download --notes.org</a></li><li><a href="https://toobnix.org/w/fxFD5JMMkmj1bazUw4zErx">View on Toobnix</a></li><li><a href="https://youtu.be/xZJhMAMI7A0">View on Youtube</a></li></ul></div></div> # Q&A @@ -35,6 +35,6 @@ Status: TO_CAPTION_QA 09:08.648 Q: I am worried about the situation on non-free systems. There was talk about the Windows and the macOS versions being as good as unmaintained. Where do we go from here? 11:35.280 Q: Is there a best practice on what Org to use when following emacs-latest? -"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-emacs30-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus"></audio></div><div></div>Duration: 23:36 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus">Download --answers.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.webm">Download --answers.webm (39MB)</a></li><li><a href="https://www.youtube.com/watch?v=xFPpk_lE9Ss">View on Youtube</a></li></ul></div></div> +"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-emacs30-audio" src="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus"></audio></div><div></div>Duration: 23:36 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-emacs30">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.opus">Download --answers.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--answers.webm">Download --answers.webm (39MB)</a></li><li><a href="https://www.youtube.com/watch?v=xFPpk_lE9Ss">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file |