diff options
Diffstat (limited to '2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt')
-rw-r--r-- | 2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt | 1361 |
1 files changed, 1361 insertions, 0 deletions
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 new file mode 100644 index 00000000..feebc2ed --- /dev/null +++ b/2024/captions/emacsconf-2024-emacs30--emacs-30-highlights--philip-kaludercic--main.vtt @@ -0,0 +1,1361 @@ +WEBVTT captioned by anush + +NOTE Introduction + +00:00:00.000 --> 00:00:06.119 +Hello, and welcome to Emacs 30 Highlights at EmacsConf 2024. + +00:00:06.120 --> 00:00:08.839 +Before I begin, I'd like to thank the organizers + +00:00:08.840 --> 00:00:11.799 +and everyone involved for putting this all together. + +00:00:11.800 --> 00:00:13.759 +While this talk is being pre-recorded, + +00:00:13.760 --> 00:00:15.239 +my experience from the last few years + +00:00:15.240 --> 00:00:19.159 +assures me that it will be a great experience for everyone. + +00:00:19.160 --> 00:00:21.359 +My name is Philip Kaludercic. + +00:00:21.360 --> 00:00:24.479 +I am a core contributor and ELPA co-maintainer. + +00:00:24.480 --> 00:00:26.079 +I was honored when Sacha asked me + +00:00:26.080 --> 00:00:28.359 +to take over the slot for this year. + +00:00:28.360 --> 00:00:29.879 +In the past few iterations, + +00:00:29.880 --> 00:00:32.199 +John Wiegley has filled a similar presentation + +00:00:32.200 --> 00:00:35.679 +focusing on more general Emacs development updates. + +00:00:35.680 --> 00:00:38.519 +This year, I will specifically focus on + +00:00:38.520 --> 00:00:41.919 +highlight features from the upcoming Emacs 30 release, + +00:00:41.920 --> 00:00:43.919 +which might or might not have been released + +00:00:43.920 --> 00:00:48.079 +by the time you are seeing this. + +00:00:48.080 --> 00:00:51.079 +As you can imagine, everything new about Emacs + +00:00:51.080 --> 00:00:55.059 +can always be found in the Emacs NEWS file. + +00:00:55.060 --> 00:00:57.079 +Or, alternatively, + +00:00:57.080 --> 00:01:01.919 +if one doesn't want to read through the 3,000 lines here, + +00:01:01.920 --> 00:01:05.279 +one can also take a look at the Emacs FAQ + +00:01:05.280 --> 00:01:07.999 +and then go to the what's new about + +00:01:08.000 --> 00:01:12.219 +or what's different about Emacs 30 node. + +00:01:12.220 --> 00:01:14.759 +Next to these two official options, + +00:01:14.760 --> 00:01:18.599 +I also have a page on Emacs Wiki + +00:01:18.600 --> 00:01:21.439 +called EmacsThirtyHighlights, + +00:01:21.440 --> 00:01:24.279 +highlighting some of the interesting features + +00:01:24.280 --> 00:01:28.439 +with some context and suggestions on how to try them out. + +00:01:28.440 --> 00:01:30.039 +This is more of a collaborative effort. + +00:01:30.040 --> 00:01:32.719 +So if you see this and think something is missing, + +00:01:32.720 --> 00:01:34.519 +feel free to add it. + +00:01:34.520 --> 00:01:36.839 +So without further ado, + +00:01:36.840 --> 00:01:41.759 +let's begin taking a look at new features in Emacs 30. + +NOTE Android + +00:01:41.760 --> 00:01:44.679 +The biggest one, and the one I want to mention first, + +00:01:44.680 --> 00:01:49.039 +is Android support, native Android support. + +00:01:49.040 --> 00:01:51.879 +As you can see here, Emacs has been ported + +00:01:51.880 --> 00:01:53.639 +to the Android operating system. + +00:01:53.640 --> 00:01:56.479 +What this means is that from Emacs 30 onwards, + +00:01:56.480 --> 00:02:01.279 +you can build Android to target Android devices natively + +00:02:01.280 --> 00:02:06.759 +and using a graphical interface. + +00:02:06.760 --> 00:02:08.799 +While it has been possible to run Emacs + +00:02:08.800 --> 00:02:11.159 +inside of terminal emulators on Android for a while, + +00:02:11.160 --> 00:02:13.919 +this actually means that you can use Emacs + +00:02:13.920 --> 00:02:17.519 +on an Android device, a phone or a tablet, + +00:02:17.520 --> 00:02:20.959 +and have all the usual advantages from GUI Emacs, + +00:02:20.960 --> 00:02:23.479 +such as the ability to bind all commands + +00:02:23.480 --> 00:02:25.479 +without having to worry about-- + +00:02:25.480 --> 00:02:27.279 +all keys without having to worry + +00:02:27.280 --> 00:02:29.359 +about terminal compatibility issues, + +00:02:29.360 --> 00:02:32.759 +displaying images and multiple fonts + +00:02:32.760 --> 00:02:35.359 +on the same display of different sizes. + +00:02:35.360 --> 00:02:37.279 +I should have a recording + +00:02:37.280 --> 00:02:42.199 +of that somewhere here--here we are-- + +00:02:42.200 --> 00:02:44.439 +which I made earlier on my phone, + +00:02:44.440 --> 00:02:47.319 +because I'm recording this on a laptop-- + +00:02:47.320 --> 00:02:50.479 +where we can see how touch interaction works + +00:02:50.480 --> 00:02:53.199 +on an Android phone. I can switch between buffers. + +00:02:53.200 --> 00:02:56.119 +Here I've connected an external keyboard, + +00:02:56.120 --> 00:02:58.559 +opening the Emacs website. + +00:02:58.560 --> 00:03:02.679 +We have images that we can interact with. + +00:03:02.680 --> 00:03:05.319 +We could resize them if we wanted to + +00:03:05.320 --> 00:03:07.559 +with the image resizing commands. + +00:03:07.560 --> 00:03:10.359 +Pinch-to-zoom works, so it + +00:03:10.360 --> 00:03:12.759 +does realize what touchscreen interactions are. + +00:03:12.760 --> 00:03:15.239 +With an external mouse, and for example, + +00:03:15.240 --> 00:03:17.799 +enabling context menu mode, + +00:03:17.800 --> 00:03:22.679 +I can even pop up little interaction windows, + +00:03:22.680 --> 00:03:27.239 +which one you would usually also know from GUI Emacs. + +00:03:27.240 --> 00:03:32.959 +TUI Emacs actually also supports them since a while now. + +00:03:32.960 --> 00:03:34.639 +And in this case, I'm demonstrating + +00:03:34.640 --> 00:03:35.999 +how even the touchscreen events + +00:03:36.000 --> 00:03:39.119 +can be inspected using the usual help system, + +00:03:39.120 --> 00:03:43.359 +and how context-mode notices + +00:03:43.360 --> 00:03:45.239 +where we are and allows me to, for example, + +00:03:45.240 --> 00:03:47.799 +evaluate this specific region, + +00:03:47.800 --> 00:03:49.079 +which I've highlighted down there, + +00:03:49.080 --> 00:03:58.319 +binding a command to touch-screen-scroll. Yeah. + +00:03:58.320 --> 00:04:00.479 +One should note that these additions, + +00:04:00.480 --> 00:04:02.359 +for example touchscreen interaction, + +00:04:02.360 --> 00:04:04.159 +are not specific to Android, + +00:04:04.160 --> 00:04:06.839 +but they also are supported in other operating systems, + +00:04:06.840 --> 00:04:12.279 +such as Wayland and Xorg, which are not operating systems, + +00:04:12.280 --> 00:04:15.279 +and Windows, insofar as they have touchscreen, + +00:04:15.280 --> 00:04:18.419 +and devices have touchscreen support. + +00:04:18.420 --> 00:04:21.239 +One should mention, or I want to mention, + +00:04:21.240 --> 00:04:24.039 +that the main developer behind this feature, Po Lu, + +00:04:24.040 --> 00:04:27.319 +should be complimented for the additional effort he put + +00:04:27.320 --> 00:04:30.979 +into making sure that Emacs for Android + +00:04:30.980 --> 00:04:33.719 +can be built using only a free software toolchain, + +00:04:33.720 --> 00:04:36.999 +which is certainly not something one has come to expect + +00:04:37.000 --> 00:04:40.759 +from working on Android applications, + +00:04:40.760 --> 00:04:43.839 +as usually you have to agree to some terms and conditions + +00:04:43.840 --> 00:04:46.479 +for Google-specific software. + +00:04:46.480 --> 00:04:49.639 +Final note is that if you try and look for this online, + +00:04:49.640 --> 00:04:52.119 +there are APKs you can find, + +00:04:52.120 --> 00:04:54.679 +but some of them might be outdated. + +00:04:54.680 --> 00:04:59.359 +To the best of my knowledge, Po Lu has... + +00:04:59.360 --> 00:05:02.399 +Emacs 30 Android Sourceforge... + +00:05:02.400 --> 00:05:06.759 +He has set up some system where here in Sourceforge, + +00:05:06.760 --> 00:05:12.799 +there are regular and updated + +00:05:12.800 --> 00:05:14.519 +APK files which you can download + +00:05:14.520 --> 00:05:17.039 +to avoid having to build it yourself, + +00:05:17.040 --> 00:05:18.559 +testing out the newest version + +00:05:18.560 --> 00:05:27.619 +in case there are some bugs which you'd like to report. + +00:05:27.620 --> 00:05:33.119 +Which-key is a package which has now been moved + +00:05:33.120 --> 00:05:34.719 +from ELPA to the core. + +00:05:34.720 --> 00:05:38.879 +If you haven't heard of which-key before, the idea is, + +00:05:38.880 --> 00:05:41.399 +or the general pitch is that which-key + +00:05:41.400 --> 00:05:45.279 +is a additional documentation interface for Emacs + +00:05:45.280 --> 00:05:49.639 +for displaying various keys which you could input, + +00:05:49.640 --> 00:05:53.479 +or various keys and key maps + +00:05:53.480 --> 00:05:55.479 +that have been partially inputted. + +00:05:55.480 --> 00:05:57.639 +A better way to demonstrate this + +00:05:57.640 --> 00:05:59.319 +or to explain this is just to show it. + +00:05:59.320 --> 00:06:03.519 +If we enable the which-key mode--it's a global minor mode-- + +00:06:03.520 --> 00:06:06.399 +then I can press, for example, C-x, + +00:06:06.400 --> 00:06:08.719 +which is a prefix for the C-x keymap. + +00:06:08.720 --> 00:06:11.719 +Then down here in the buffer, in this window down here, + +00:06:11.720 --> 00:06:15.599 +we see various commands which we could invoke + +00:06:15.600 --> 00:06:17.919 +and the keys to invoke them with. + +00:06:17.920 --> 00:06:23.039 +For example, if I wanted to say C-x i for insert-file, + +00:06:23.040 --> 00:06:27.319 +then I just have to press i to highlight it once again. + +00:06:27.320 --> 00:06:32.559 +It should be down here. Pressing i without having to repeat + +00:06:32.560 --> 00:06:34.759 +the entire key code again, + +00:06:34.760 --> 00:06:37.719 +the partial key code again, just works. + +00:06:37.720 --> 00:06:41.679 +This is different from the feature which Emacs has already, + +00:06:41.680 --> 00:06:45.519 +which is if you have input the partial keychord, + +00:06:45.520 --> 00:06:47.039 +you can press C-h + +00:06:47.040 --> 00:06:50.959 +and then a help buffer pops up with a listing + +00:06:50.960 --> 00:06:54.159 +of all keybindings that start with C-x. + +00:06:54.160 --> 00:06:56.639 +The information is the same, the presentation is different, + +00:06:56.640 --> 00:06:59.159 +because now if I wanted to do C-x i, + +00:06:59.160 --> 00:07:03.319 +I have to repeat the entire keychord again. + +00:07:03.320 --> 00:07:09.479 +So it's a matter of personal preference, which you prefer. + +00:07:09.480 --> 00:07:12.519 +This is more of a traditional static approach + +00:07:12.520 --> 00:07:19.639 +because I get a help buffer which I can search + +00:07:19.640 --> 00:07:21.119 +using usual key commands, + +00:07:21.120 --> 00:07:28.159 +while which-key is more of a transient and modern. + +00:07:28.160 --> 00:07:31.299 +Some might prefer that approach + +00:07:31.300 --> 00:07:35.519 +to solving the same problem. + +00:07:35.520 --> 00:07:39.119 +Also, don't forget to check out the customization group + +00:07:39.120 --> 00:07:41.959 +for which-key which has a number of options + +00:07:41.960 --> 00:07:44.699 +which you might or might not be interested in. + +NOTE EditorConfig + +00:07:44.700 --> 00:07:50.879 +Next up, Emacs 30 has built-in EditorConfig support. + +00:07:50.880 --> 00:07:53.679 +If you have not heard of EditorConfig before, + +00:07:53.680 --> 00:07:56.379 +I believe I've linked to it down here somewhere. + +00:07:56.380 --> 00:08:00.160 +Ah, there it is, EditorConfig. + +00:08:00.161 --> 00:08:05.260 +This is a file format used to specify + +00:08:05.261 --> 00:08:11.959 +common formatting rules in an editor-agnostic way. + +00:08:11.960 --> 00:08:16.319 +You might compare it to .dir-locals.el files, + +00:08:16.320 --> 00:08:19.159 +which is a sort of an s-expression + +00:08:19.160 --> 00:08:22.159 +for setting file-local variables in Emacs. + +00:08:22.160 --> 00:08:26.559 +Of course, this is restricted to the common subset + +00:08:26.560 --> 00:08:29.299 +of what all editors should understand. + +00:08:29.300 --> 00:08:31.839 +For example, indentation styles, + +00:08:31.840 --> 00:08:36.699 +whether you prefer tabs or spaces, + +00:08:36.700 --> 00:08:38.759 +tab width, file encoding, and so on. + +00:08:38.760 --> 00:08:43.959 +So it's nothing too advanced, but it's something... + +00:08:43.960 --> 00:08:48.559 +It is a file format which one sees popping up more + +00:08:48.560 --> 00:08:50.439 +and more often in lots of projects + +00:08:50.440 --> 00:08:53.479 +which want to enforce a consistent indentation style + +00:08:53.480 --> 00:08:56.639 +or formatting rules for all editors in a project. + +00:08:56.640 --> 00:09:00.159 +Having this built in is certainly useful in Emacs. + +00:09:00.160 --> 00:09:03.579 +Though one should note that it's not enabled by default. + +00:09:03.580 --> 00:09:11.039 +You still have to enable the global minor mode, + +00:09:11.040 --> 00:09:14.239 +which is simply turning on this one option. + +00:09:14.240 --> 00:09:15.599 +Shouldn't be more than that, + +00:09:15.600 --> 00:09:18.759 +and then Emacs will respect the rules. + +00:09:18.760 --> 00:09:22.999 +If it finds a .editorconfig file in the project directory, + +00:09:23.000 --> 00:09:25.319 +then it will respect those rules + +00:09:25.320 --> 00:09:30.239 +without having to do anything else. + +NOTE use-package integration with package-vc + +00:09:30.240 --> 00:09:34.599 +Next up, use-package integration with package-vc. + +00:09:34.600 --> 00:09:36.519 +For those not familiar with either of the two, + +00:09:36.520 --> 00:09:38.119 +or at least one of the two, + +00:09:38.120 --> 00:09:41.079 +use-package is a popular configuration macro. + +00:09:41.080 --> 00:09:43.119 +What it does is it allows + +00:09:43.120 --> 00:09:46.274 +users to declaratively specify packages + +00:09:46.275 --> 00:09:48.879 +they would like to have installed and configured + +00:09:48.880 --> 00:09:51.539 +in their configuration file, + +00:09:51.540 --> 00:09:54.359 +so that, for example, if you copy your init.el + +00:09:54.360 --> 00:09:55.959 +from one system to another, + +00:09:55.960 --> 00:09:58.519 +it could bootstrap the entire configuration, + +00:09:58.520 --> 00:10:00.719 +downloading all the packages you want + +00:10:00.720 --> 00:10:02.239 +without having to manually do this + +00:10:02.240 --> 00:10:05.039 +on every system you'd like to use. + +00:10:05.040 --> 00:10:07.559 +This allows configurations + +00:10:07.560 --> 00:10:11.039 +to be self-encapsulated and portable. + +00:10:11.040 --> 00:10:15.959 +package-vc is an extension of package.el, + +00:10:15.960 --> 00:10:19.679 +which allows installing packages from an alternative. + +00:10:19.680 --> 00:10:22.279 +Instead of using the standard way to install packages, + +00:10:22.280 --> 00:10:26.239 +which is just download tarball and unpack it, + +00:10:26.240 --> 00:10:28.359 +byte compile, and so on, + +00:10:28.360 --> 00:10:32.759 +it will fetch the files for a package + +00:10:32.760 --> 00:10:35.279 +directly from the source code repository + +00:10:35.280 --> 00:10:37.239 +and initialize it in such a way + +00:10:37.240 --> 00:10:39.119 +that package.el can work with it. + +00:10:39.120 --> 00:10:44.319 +So it's just a front-end for installing packages. + +00:10:44.320 --> 00:10:46.519 +Even though these two were added to Emacs 29, + +00:10:46.520 --> 00:10:48.399 +we didn't have the time to work on the + +00:10:48.400 --> 00:10:52.639 +use-package integration of package-vc into use-package, + +00:10:52.640 --> 00:10:55.359 +which has been changed now. + +00:10:55.360 --> 00:11:00.119 +What we have with Emacs 30 is that + +00:11:00.120 --> 00:11:02.839 +there is a :vc keyword for use-package + +00:11:02.840 --> 00:11:05.319 +with which we can instruct use-package + +00:11:05.320 --> 00:11:10.760 +to not download a package using tarball, + +00:11:10.774 --> 00:11:12.519 +but instead to fetch the source code + +00:11:12.520 --> 00:11:13.799 +from a source code repository. + +00:11:13.800 --> 00:11:15.919 +This is useful if you, for example, + +00:11:15.920 --> 00:11:18.319 +have packages which you yourself work on + +00:11:18.320 --> 00:11:19.959 +and know that you always want to have + +00:11:19.960 --> 00:11:21.919 +the development version of the package + +00:11:21.920 --> 00:11:26.639 +where you can directly commit changes you've made + +00:11:26.640 --> 00:11:29.159 +to the repository and push them upstream. + +00:11:29.160 --> 00:11:32.399 +Or, if you know that you want to contribute to a package, + +00:11:32.400 --> 00:11:35.559 +you can use package-vc to download the source code, + +00:11:35.560 --> 00:11:37.319 +have all the version control information, + +00:11:37.320 --> 00:11:41.759 +prepare a patch and send it upstream. + +00:11:41.760 --> 00:11:44.119 +In these examples here, + +00:11:44.120 --> 00:11:49.119 +the first example Lisp instructs package-vc + +00:11:49.120 --> 00:11:52.959 +to download the source code from a URL. + +00:11:52.960 --> 00:11:55.119 +So this is a git URL where it will download + +00:11:55.120 --> 00:11:57.399 +the source code from, and in this case, + +00:11:57.400 --> 00:12:00.399 +choose the newest checkout of the source code, + +00:12:00.400 --> 00:12:05.680 +not the latest release. Down here, we have another example. + +00:12:05.060 --> 00:12:09.159 +I prefer to consider the following example here. + +00:12:09.160 --> 00:12:10.879 +If we just had written this, + +00:12:10.880 --> 00:12:13.159 +then package-vc would use the metadata + +00:12:13.160 --> 00:12:16.279 +which an ELPA server provides + +00:12:16.280 --> 00:12:19.799 +to fetch the URL from the official repository of, + +00:12:19.800 --> 00:12:22.839 +in this case, BBDB, without having to... + +00:12:22.840 --> 00:12:28.239 +It would be more or less the same like this up here, + +00:12:28.240 --> 00:12:32.639 +with the simple difference that package-vc integration + +00:12:32.640 --> 00:12:36.359 +into use-package doesn't check out the latest commit, + +00:12:36.360 --> 00:12:38.359 +but the latest release, + +00:12:38.360 --> 00:12:44.159 +just to keep configurations more deterministic by default. + +00:12:44.160 --> 00:12:47.879 +Of course, if you prefer to use latest commit, + +00:12:47.880 --> 00:12:52.439 +you can use a package-vc install command + +00:12:52.440 --> 00:12:54.879 +or just update the package manually yourself, + +00:12:54.880 --> 00:13:01.739 +which you can use using package-vc-upgrade. + +00:13:01.740 --> 00:13:04.319 +Next, I'd like to focus on a few features + +00:13:04.320 --> 00:13:07.740 +which one might not necessarily realize directly, + +00:13:07.741 --> 00:13:11.399 +but will hopefully improve your experience with Emacs. + +NOTE JSON + +00:13:11.400 --> 00:13:15.119 +First up in this list is a new JSON parser. + +00:13:15.120 --> 00:13:21.399 +Let's maybe show the source code for that one: + +00:13:21.400 --> 00:13:39.319 +not json.el, json.c. The history of JSON parsing in Emacs + +00:13:39.320 --> 00:13:43.279 +started with Emacs 23 with the addition of json.el. + +00:13:43.280 --> 00:13:46.919 +This was the file which we had just opened a moment ago. + +00:13:46.920 --> 00:13:50.959 +This is a JSON parser in Emacs Lisp. + +00:13:50.960 --> 00:13:53.199 +It's fine, it does the job, but it can get slow + +00:13:53.200 --> 00:13:55.479 +if we have a situation like where + +00:13:55.480 --> 00:14:00.479 +Eglot uses a LSP server to communicate with + +00:14:00.480 --> 00:14:02.959 +and the LSP server can get a bit chatty, + +00:14:02.960 --> 00:14:05.479 +sending a lot of JSON data, + +00:14:05.480 --> 00:14:08.199 +which all has to be parsed and garbage collected, + +00:14:08.200 --> 00:14:10.199 +which can slow down Emacs a bit. + +00:14:10.200 --> 00:14:14.119 +The situation was improved upon in Emacs 29 + +00:14:14.120 --> 00:14:17.959 +when JSON parsing was added to the core. + +00:14:17.960 --> 00:14:21.039 +This was the json.c file, which we see on this side, + +00:14:21.040 --> 00:14:23.279 +the old version of the json.c file, + +00:14:23.280 --> 00:14:27.119 +which employed the Jansson library (it's the C library) + +00:14:27.120 --> 00:14:33.159 +for parsing and accelerating JSON parsing in Emacs. + +00:14:33.160 --> 00:14:33.999 +This was good enough, + +00:14:34.000 --> 00:14:36.159 +or it certainly improved the situation + +00:14:36.160 --> 00:14:38.559 +for a lot of LSP clients. + +00:14:38.560 --> 00:14:45.479 +But in Emacs 30, the situation has been improved once more + +00:14:45.480 --> 00:14:50.359 +with the addition of a JSON parser directly in Emacs. + +00:14:50.360 --> 00:14:52.999 +So instead of using an external library, + +00:14:53.000 --> 00:14:57.719 +there's a custom JSON parser written in C in the Emacs core, + +00:14:57.720 --> 00:15:01.559 +which directly generates Elisp objects. + +00:15:01.560 --> 00:15:04.999 +The advantage to this approach + +00:15:05.000 --> 00:15:06.359 +compared to the Jansson approach + +00:15:06.360 --> 00:15:07.919 +is that there's no intermediate format + +00:15:07.920 --> 00:15:09.199 +which has to be allocated + +00:15:09.200 --> 00:15:11.559 +and memory managed and freed again, + +00:15:11.560 --> 00:15:19.479 +which of course incurs an additional performance overhead. + +00:15:19.480 --> 00:15:22.659 +Next to this, there's also a custom serializer + +00:15:22.660 --> 00:15:27.119 +for JSON contents translating a JSON object into a string. + +00:15:27.120 --> 00:15:30.279 +... The consequence of this is that + +00:15:30.280 --> 00:15:35.600 +there is absolutely no dependency on Jansson anymore. + +00:15:35.640 --> 00:15:38.559 +This in turn means that now all Emacs users + +00:15:38.560 --> 00:15:39.799 +from Emacs 30 onwards + +00:15:39.800 --> 00:15:43.119 +can take advantage of this new JSON parser + +00:15:43.120 --> 00:15:44.879 +and don't have to worry about whether + +00:15:44.880 --> 00:15:47.799 +or not they have Jansson, this JSON parsing library, + +00:15:47.800 --> 00:15:50.999 +installed on their system or not when they want + +00:15:51.000 --> 00:15:56.839 +to take advantage of this accelerated JSON parsing. + +NOTE Native compilation + +00:15:56.840 --> 00:16:00.639 +Next up, another behind-the-scenes feature + +00:16:00.640 --> 00:16:04.559 +is that if you build Emacs on your own from source, + +00:16:04.560 --> 00:16:07.879 +you might know that if you wanted + +00:16:07.880 --> 00:16:09.559 +to use native compilation, + +00:16:09.560 --> 00:16:12.319 +so the translation of Elisp bytecodes + +00:16:12.320 --> 00:16:15.559 +to whatever the native assembly + +00:16:15.560 --> 00:16:19.319 +or native instruction set is on your system, + +00:16:19.320 --> 00:16:24.359 +you have to specify with native compilation. + +00:16:24.360 --> 00:16:25.879 +when invoking the configure script, + +00:16:25.880 --> 00:16:28.879 +otherwise it would not have been enabled at all. + +00:16:28.880 --> 00:16:34.119 +With Emacs 30, this step is not necessary anymore. + +00:16:34.120 --> 00:16:36.719 +The configure script will automatically check + +00:16:36.720 --> 00:16:41.759 +if you have the libgccjit library installed on your system, + +00:16:41.760 --> 00:16:42.879 +and if that is so, + +00:16:42.880 --> 00:16:45.999 +then native compilation will be enabled by default. + +00:16:46.000 --> 00:16:49.559 +In other words, if you have an issue with native compilation + +00:16:49.560 --> 00:16:52.799 +or prefer not to use it for whatever reason, + +00:16:52.800 --> 00:16:55.559 +you now have to type --without-native-compilation + +00:16:55.560 --> 00:16:58.199 +when compiling Emacs to prevent this from happening. + +00:16:58.200 --> 00:17:02.279 +But native compilation was added in Emacs 28 + +00:17:02.280 --> 00:17:04.399 +and has proven to be a very stable + +00:17:04.400 --> 00:17:06.199 +and useful feature for most people, + +00:17:06.200 --> 00:17:10.199 +so there's probably no reason to do this + +00:17:10.200 --> 00:17:10.939 +and you can just invoke the configure script + +00:17:10.940 --> 00:17:16.239 +with one argument less. Right, and I'd like to finish up + +00:17:16.240 --> 00:17:19.399 +with a few smaller features, a few smaller highlights. + +00:17:19.400 --> 00:17:30.719 +Maybe we can go back to the listing here. Here we have it. + +NOTE Tree-sitter + +00:17:30.720 --> 00:17:32.839 +There are a few new major modes + +00:17:32.840 --> 00:17:34.239 +based on the tree-sitter library. + +00:17:34.240 --> 00:17:37.739 +tree-sitter is this parser library + +00:17:37.740 --> 00:17:42.879 +which has been integrated into Emacs 29. + +00:17:42.880 --> 00:17:44.079 +It allows the integration + +00:17:44.080 --> 00:17:48.359 +of external, specialized, and quick parsers into Emacs, + +00:17:48.360 --> 00:17:52.119 +which improve stuff like syntax highlighting, indentation, + +00:17:52.120 --> 00:17:55.279 +structural navigation, imenu support, + +00:17:55.280 --> 00:18:00.839 +by simply having a better understanding of, for example, + +00:18:00.840 --> 00:18:03.919 +a HTML file, or a Lua file, a PHP file, + +00:18:03.920 --> 00:18:06.239 +than what people usually implement + +00:18:06.240 --> 00:18:10.319 +using regular expressions in traditional major modes. + +00:18:10.320 --> 00:18:16.819 +So, a few new major modes which you can try out here. + +NOTE Completion preview mode + +00:18:16.820 --> 00:18:19.959 +Another interesting feature is the completion-preview-mode. + +00:18:19.960 --> 00:18:23.319 +We can maybe try it out here in the scratch buffer. + +00:18:23.320 --> 00:18:28.199 +If I enable completion-preview-mode... + +00:18:28.200 --> 00:18:32.719 +This is a non-global minor mode, + +00:18:32.720 --> 00:18:38.479 +which will display completion options inline using overlays. + +00:18:38.480 --> 00:18:43.199 +For example, if I start typing a longer symbol like define, + +00:18:43.200 --> 00:18:48.119 +now we have a derived mode. It suggests me to... + +00:18:48.120 --> 00:18:51.039 +I can just press TAB and then it completes the option here, + +00:18:51.040 --> 00:18:51.839 +but it didn't actually... + +00:18:51.840 --> 00:18:55.279 +It's not actually modifying the buffer, it's not pressing, + +00:18:55.280 --> 00:18:57.039 +these are just overlays, + +00:18:57.040 --> 00:18:59.519 +so if I move around, it gets deleted. + +00:18:59.520 --> 00:19:02.539 +It wouldn't get saved if I were to save the buffer. + +00:19:02.540 --> 00:19:04.999 +The same also should work in a shell buffer. + +00:19:05.000 --> 00:19:09.239 +If I enable completion preview mode here and start... + +00:19:09.240 --> 00:19:12.759 +In this case, I'm using the bash completion package, + +00:19:12.760 --> 00:19:15.199 +which provides additional completion information. + +00:19:15.200 --> 00:19:17.839 +This is not only limited to programming systems, + +00:19:17.840 --> 00:19:22.919 +but anywhere where you have completion at point in Emacs. + +00:19:22.920 --> 00:19:26.059 +I can start typing here, ignore, and put ignore-backups, + +00:19:26.060 --> 00:19:29.919 +and it hints to the options which I have + +00:19:29.920 --> 00:19:34.219 +and allows me to complete them quickly. + +NOTE package-isolate + +00:19:34.220 --> 00:19:37.879 +Another small feature is the package-isolate command. + +00:19:37.880 --> 00:19:39.959 +What this does is it will start + +00:19:39.960 --> 00:19:42.759 +or it will prompt me for packages + +00:19:42.760 --> 00:19:44.119 +I have installed in my system + +00:19:44.120 --> 00:19:46.439 +and will start an isolated + +00:19:46.440 --> 00:19:51.079 +or like "emacs -Q"-ish instance of emacs + +00:19:51.080 --> 00:19:53.639 +with only these packages installed. + +00:19:53.640 --> 00:20:00.279 +So for example, if I said I want slime and I want diff-hl, + +00:20:00.280 --> 00:20:02.279 +then this is a new Emacs window. + +00:20:02.280 --> 00:20:04.439 +It's unrelated to the one around. + +00:20:04.440 --> 00:20:06.839 +It uses the same executable, of course, + +00:20:06.840 --> 00:20:09.939 +but will not load your configuration file + +00:20:09.940 --> 00:20:13.619 +or any other further customizations on your system. + +00:20:13.620 --> 00:20:15.159 +All it does, it will ensure + +00:20:15.160 --> 00:20:17.919 +that these packages, which are listed here, + +00:20:17.920 --> 00:20:24.499 +so in our case SLIME and dependencies of SLIME and diff-hl, + +00:20:24.500 --> 00:20:25.239 +in the system + +00:20:25.240 --> 00:20:29.039 +so that I could, for example, as you can see here, + +00:20:29.040 --> 00:20:31.959 +diff-hl-mode works. + +00:20:31.960 --> 00:20:35.479 +Okay, this is not a version-controlled file. + +00:20:35.480 --> 00:20:41.119 +Maybe if we take a look at, have I enabled diff-hl-mode? + +00:20:41.120 --> 00:20:44.559 +It's enabled in this case. What diff-hl-mode does + +00:20:44.560 --> 00:20:48.479 +is it displays these version control changes + +00:20:48.480 --> 00:20:49.999 +in the fringe of a buffer. + +00:20:50.000 --> 00:20:54.079 +And even though this is a uncustomized version of Emacs, + +00:20:54.080 --> 00:20:56.319 +or an uncustomized instance of Emacs, + +00:20:56.320 --> 00:20:58.959 +it was easy for me to load this one package, + +00:20:58.960 --> 00:21:01.959 +or these two packages and all the dependencies necessary. + +00:21:01.960 --> 00:21:05.319 +As you can imagine, the main purpose for this + +00:21:05.320 --> 00:21:07.719 +is to make debugging issues easier. + +00:21:07.720 --> 00:21:10.519 +If you want to report about an issue + +00:21:10.520 --> 00:21:14.519 +you have with a package. And if I close this, it's closed + +00:21:14.520 --> 00:21:16.779 +and everything's thrown away. + +NOTE Reindenting + +00:21:16.780 --> 00:21:18.959 +Last up, a nice feature I think + +00:21:18.960 --> 00:21:21.199 +a lot of people will appreciate is, + +00:21:21.200 --> 00:21:24.239 +if you are familiar with... Let's open a text buffer. + +00:21:24.240 --> 00:21:30.079 +The M-q key is traditionally bound to fill-paragraph. + +00:21:30.080 --> 00:21:32.119 +What this means is that... + +00:21:32.120 --> 00:21:34.999 +Let's, for example, copy this text from here + +00:21:35.000 --> 00:21:40.359 +and squash it all into one line. If I press M-q here, + +00:21:40.360 --> 00:21:42.399 +then the lines will be broken + +00:21:42.400 --> 00:21:49.479 +according to the fill column indicator up here. + +00:21:49.480 --> 00:21:52.399 +This is the traditional usage of M-q, + +00:21:52.400 --> 00:21:54.119 +and it still works in text-mode buffers, + +00:21:54.120 --> 00:21:56.639 +but in prog-mode buffers-- + +00:21:56.640 --> 00:22:00.079 +so any major mode inheriting prog-mode-- + +00:22:00.080 --> 00:22:02.199 +M-q will now by default be bound + +00:22:02.200 --> 00:22:09.719 +to prog-fill-reindent-defun. To summarize the point, + +00:22:09.720 --> 00:22:13.479 +if you are editing a string or a comment, + +00:22:13.480 --> 00:22:15.919 +then the comment will be filled. + +00:22:15.920 --> 00:22:19.159 +But if you are outside of a comment or outside of a string, + +00:22:19.160 --> 00:22:22.919 +then the defun or the top-level construct + +00:22:22.920 --> 00:22:26.119 +in the programming language will be re-indented. + +00:22:26.120 --> 00:22:33.859 +Let's try that out with maybe some file I have open here. + +00:22:33.860 --> 00:22:38.819 +If I'm in this... Let's choose some function, + +00:22:38.820 --> 00:22:41.279 +let's take this for example. + +00:22:41.280 --> 00:22:43.879 +If we followed all of this again, + +00:22:43.880 --> 00:22:47.619 +and I press M-q in on this paragraph, + +00:22:47.620 --> 00:22:50.039 +then the paragraph gets re-indented. + +00:22:50.040 --> 00:22:54.859 +But if I'm down here and I choose to break the indentation + +00:22:54.860 --> 00:22:56.180 +and then press M-q, + +00:22:56.181 --> 00:23:02.399 +then as you see, it practically selected the defun + +00:23:02.400 --> 00:23:03.559 +and re-indented everything + +00:23:03.560 --> 00:23:05.959 +without having need to move the point around in the buffer. + +00:23:06.800 --> 00:23:08.679 +So I think that's a really nice feature, + +00:23:08.680 --> 00:23:11.039 +which a lot of people can appreciate. + +00:23:11.040 --> 00:23:17.879 +It's one of those niceties which comes from time to time. + +NOTE Wrapping up + +00:23:17.880 --> 00:23:20.679 +Right, so that was my overview + +00:23:20.680 --> 00:23:22.559 +of what's going to be new in Emacs 30. + +00:23:22.560 --> 00:23:24.359 +I hope that most people could take away + +00:23:24.360 --> 00:23:25.659 +something from this presentation + +00:23:25.660 --> 00:23:29.419 +and have something to look forward + +00:23:29.420 --> 00:23:31.599 +to try out after upgrading. + +00:23:31.600 --> 00:23:33.839 +As mentioned initially, as of recording, + +00:23:33.840 --> 00:23:36.939 +this release has not been completed yet. + +00:23:36.940 --> 00:23:38.879 +If this is still not the case + +00:23:38.880 --> 00:23:40.199 +when you're seeing this video, + +00:23:40.200 --> 00:23:43.799 +please consider downloading and building Emacs 30 yourself. + +00:23:43.800 --> 00:23:48.319 +If you have any issues, which is always the case, + +00:23:48.320 --> 00:23:56.339 +please report them to using report-emacs-bug. + +00:23:56.340 --> 00:23:57.740 +That will pop up a mail buffer, + +00:23:57.741 --> 00:23:59.519 +and then you can describe your issue and send them out. + +00:23:59.520 --> 00:24:01.839 +All bug reports are valuable, + +00:24:01.840 --> 00:24:03.999 +even if they are false positives or duplicates-- + +00:24:04.000 --> 00:24:05.239 +it doesn't matter-- + +00:24:05.240 --> 00:24:08.919 +because when you take the time to submit a bug report, + +00:24:08.920 --> 00:24:12.359 +which describes something that's specific to your setup, + +00:24:12.360 --> 00:24:16.839 +which the developers might not have noticed or known about, + +00:24:16.840 --> 00:24:19.079 +then you are certainly helping out a lot of other people + +00:24:19.080 --> 00:24:21.679 +which might run into the same issue in the future. + +00:24:21.680 --> 00:24:23.359 +Especially with upgrades, + +00:24:23.360 --> 00:24:26.559 +it would be nice to figure out small problems + +00:24:26.560 --> 00:24:30.879 +which make upgrading difficult for some people. + +00:24:30.880 --> 00:24:34.559 +The ideal is, of course, to have no issues + +00:24:34.560 --> 00:24:37.199 +when upgrading from one version to another. + +00:24:37.200 --> 00:24:41.939 +Having said that, I thank you for your attention, + +00:24:41.940 --> 00:24:43.120 +and I'm saying goodbye. |