1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
|
<!-- Automatically generated by emacsconf-publish-after-page -->
<a name="emacs30-mainVideo-transcript"></a>
# Transcript
[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emacs30" id="subtitle"]]
[[!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="""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="""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 new="1" text="""Android""" start="00:01:41.800" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!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="""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="""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="""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 new="1" text="""EditorConfig""" start="00:07:45.720" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""use-package integration with package-vc""" start="00:09:27.310" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""JSON""" start="00:13:11.560" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Native compilation""" start="00:15:56.680" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Tree-sitter""" start="00:17:29.640" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Completion preview mode""" start="00:18:16.780" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""package-isolate""" start="00:19:34.233" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Reindenting""" start="00:21:16.920" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Wrapping up""" start="00:23:17.940" video="mainVideo-emacs30" id="subtitle"]]
[[!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"]]
Captioner: anush
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacs30%3A%20Emacs%2030%20Highlights)
<!-- End of emacsconf-publish-after-page -->
|