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
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
|
<!-- Automatically generated by emacsconf-publish-after-page -->
<div class="transcript transcript-mainVideo"><a name="completion-mainVideo-transcript"></a><h1>Transcript (unedited)</h1>
<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Nice to have you here on this talk.""" start="00:00:00.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""This is my second talk this year.""" start="00:00:02.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""First one was on things that I've done to Org Mode.""" start="00:00:04.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Just as a side note, this presentation""" start="00:00:09.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that I'm going to share with you""" start="00:00:13.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""about my work on Corfu and Yasnippet.""" start="00:00:16.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I've prepared that on Org Mode""" start="00:00:19.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and exported that with a work I've been doing""" start="00:00:21.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to the latest exporter.""" start="00:00:25.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Anyhow, what is my talk going to be about?""" start="00:00:26.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""It's going to be about Corfu and Yasnippet,""" start="00:00:31.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which I thought would be difficult to integrate,""" start="00:00:34.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and it was much easier than I thought.""" start="00:00:36.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So just a short outline, my motivation,""" start="00:00:42.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""step-by-step of the things that I've been investigating,""" start="00:00:46.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and some takeaways.""" start="00:00:49.960" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Motivation""" start="00:00:52.516" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So my motivation, yasnippet is old.""" start="00:00:52.516" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So I've tried another. I've tried Tempel""" start="00:00:55.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and other template management packages,""" start="00:00:59.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but it was really not my cup of tea. So mainly why?""" start="00:01:02.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Mainly because I have a nice base of yasnippets""" start="00:01:08.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have generated for my needs.""" start="00:01:10.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So it's not that I've been importing snippets""" start="00:01:14.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""from packages which are out there.""" start="00:01:17.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""No, they are my snippets. I'm used to them.""" start="00:01:20.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And of course, migration counts as a cost.""" start="00:01:23.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I've been using Company as my completion point function GUI for years,""" start="00:01:26.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but with the time coming in features and so on,""" start="00:01:32.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""it was not as easy to set up as I wanted for my needs.""" start="00:01:38.168" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So I had been working,""" start="00:01:44.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I've been playing with Eglot already some time""" start="00:01:47.182" video="mainVideo-completion" id="subtitle"]]
[[!template text="""for a language server protocol.""" start="00:01:49.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I had read about how easy it was to integrate with Corfu,""" start="00:01:53.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which was really nice, and I had given it a try,""" start="00:01:57.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but I'm using both graphical user interface mode in Emacs""" start="00:02:02.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and text mode,""" start="00:02:10.251" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and for text mode you need corfu-terminal,""" start="00:02:11.001" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which was yet another package that I didn't download.""" start="00:02:13.043" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Well, and I didn't really find a quick way""" start="00:02:16.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to get rid of company to get yasnippet.""" start="00:02:21.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So at the end, when, at the beginning,""" start="00:02:24.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""when I was using Corfu and Eglot,""" start="00:02:26.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I also needed to load company""" start="00:02:30.108" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to have yasnippet support,""" start="00:02:33.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which was really like sort of weird""" start="00:02:35.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because I wanted to get rid of yasnippet.""" start="00:02:37.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Anyhow, while I try now, I'm following the mailing list,""" start="00:02:40.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""the development mailing list,""" start="00:02:47.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I got interested when I heard something about""" start="00:02:48.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""TTY child frames being announced for master.""" start="00:02:51.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""That would mean less packages to download""" start="00:02:57.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because I thought I could get rid of Corfu,""" start="00:02:59.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I wanted to try if I could get rid of corfu-terminal""" start="00:03:04.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and run Corfu without that.""" start="00:03:07.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So, there were some hints there in that mailing list""" start="00:03:11.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that made it interesting for me.""" start="00:03:18.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And at the end, I'm also like a "why not try"ing man,""" start="00:03:21.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so I said, let's give it a try.""" start="00:03:26.640" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""My requirements""" start="00:03:29.120" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""My requirements, I'm working always on a new Emacs,""" start="00:03:29.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""a decently new Emacs, normally from master, vanilla,""" start="00:03:33.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""completely vanilla, and I don't have any extras""" start="00:03:36.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""like Doom or things like that.""" start="00:03:41.210" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So I'm only vanilla. And one of the things""" start="00:03:42.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that I don't want is that on this vanilla recent Emacs,""" start="00:03:45.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't want a corfu-terminal. I need yasnippet.""" start="00:03:50.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm basically an old man.""" start="00:03:55.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Old dog doesn't do new tricks and snippets must,""" start="00:03:57.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in my way of working, must be easy and quick to configure,""" start="00:04:02.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and tempel or others that I've seen are not.""" start="00:04:06.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't want any reminiscence of company in my setup.""" start="00:04:10.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And of course, don't forget that I've embraced""" start="00:04:13.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""the language protocol implementations and basically Eglot.""" start="00:04:18.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""My main focus now is Python and LaTeX,""" start="00:04:24.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I have pylsp and texlab.""" start="00:04:28.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't want to have to stop using them.""" start="00:04:31.720" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Basic setup: corfu + eglot""" start="00:04:37.600" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So basic setup for Corfu and Eglot.""" start="00:04:37.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""You can find it everywhere you look for it.""" start="00:04:40.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""It's really easy.""" start="00:04:43.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And actually, I also do something somehow naughty,""" start="00:04:46.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is to set this variable,""" start="00:04:51.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""the corfu-auto variable to true,""" start="00:04:53.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""although I know it's not recommended, blah, blah, blah.""" start="00:04:55.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""But I use that because I'm a bit lazy in that.""" start="00:04:58.400" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Looking at completion-at-point functions""" start="00:05:02.960" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So next step was looking at completion at point functions.""" start="00:05:02.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So the information there, if you go through, is scattered""" start="00:05:07.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and sometimes a bit cryptic.""" start="00:05:10.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""At the end I came up with something like the thing""" start="00:05:13.740" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that you see there on the screen.""" start="00:05:16.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""It's a function for yas-completion-at-point.""" start="00:05:18.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I need my list of keywords,""" start="00:05:21.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so that I'm going to be talking later,""" start="00:05:24.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I have my bounds, which is normally a word,""" start="00:05:30.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and from that, I get the start and the end""" start="00:05:34.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""of the thing that I want to""" start="00:05:37.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""be my seed for looking and bringing up Corfu,""" start="00:05:40.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and of course, I need some completion properties here.""" start="00:05:47.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""This looked like this is what you need to do,""" start="00:05:52.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but I had to dig quite deep""" start="00:05:55.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to create a yasnippet keyword test""" start="00:05:57.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and to understand the completion props.""" start="00:06:01.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And as an update of what I've been doing in the last weeks,""" start="00:06:04.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I've created a bound of things at point for me""" start="00:06:11.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with a different thing""" start="00:06:17.607" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that doesn't skip over non-blank characters,""" start="00:06:18.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that only skips over non-blank characters.""" start="00:06:22.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Why? Because 'word was confusing LaTeX,""" start="00:06:25.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because the backslash,""" start="00:06:29.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""like in the example for the teletype text,""" start="00:06:30.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""was not taken into account by 'word.""" start="00:06:35.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So I had to create my own one,""" start="00:06:38.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which was a bounds-of-thing-at-point,""" start="00:06:39.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and then my thing is non-blanks.""" start="00:06:42.120" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Making my own (basic) c-a-p-f for yasnippet: the completion properties""" start="00:06:44.880" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Completion at point properties, what are they?""" start="00:06:44.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""They allow Emacs to know how to handle the information""" start="00:06:51.180" video="mainVideo-completion" id="subtitle"]]
[[!template text="""for a specific completion time.""" start="00:06:56.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So you normally will have an annotation,""" start="00:06:58.900" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which then can disappear if you use nerd-icons-corfu,""" start="00:07:03.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is what I'm doing currently,""" start="00:07:08.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but I keep it commented just in case I get tired of Corfu""" start="00:07:11.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I want to have my completion function.""" start="00:07:17.901" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Then the :company-kind is actually not something""" start="00:07:20.001" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that comes from the company package, but does not require.""" start="00:07:24.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And that's going to allow nerd-icons-corfu to identify""" start="00:07:31.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and put the right icon there in the completion list,""" start="00:07:39.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""as you will see in a couple of minutes.""" start="00:07:44.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So it's a snippet key.""" start="00:07:47.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So basically what this is telling you""" start="00:07:50.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""is that this is a snippet keyword.""" start="00:07:52.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""These two lines, either line,""" start="00:07:54.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""tell you that this is a snippet keyword,""" start="00:07:56.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and that it should be added to the other completions""" start="00:08:00.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that you already have in your list.""" start="00:08:05.280" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Getting yas-kw-list right: What do I want?""" start="00:08:10.900" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Problems. Looking... Now, next step,""" start="00:08:10.900" video="mainVideo-completion" id="subtitle"]]
[[!template text="""once I had the completion props""" start="00:08:15.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which was relatively easy was to go""" start="00:08:18.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and get the keyword list right.""" start="00:08:21.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I've been looking at pre-existing solutions""" start="00:08:24.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""like, for example, how the menu""" start="00:08:27.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""is built in by yasnippet""" start="00:08:29.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and it looked a bit like Mission Impossible,""" start="00:08:32.540" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because the approach by all the things""" start="00:08:34.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that I have seen and I have examined""" start="00:08:40.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""is to get the keys and the names""" start="00:08:43.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and then further process them.""" start="00:08:48.660" video="mainVideo-completion" id="subtitle"]]
[[!template text="""My take was, do I really need both?""" start="00:08:50.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""At the end, if I use my own snippets,""" start="00:08:55.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm going to be using something""" start="00:08:58.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I would call meaningful keys for them,""" start="00:09:00.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""or at least meaningful for... These keys are meaningful for me,""" start="00:09:02.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I try not to repeat them,""" start="00:09:06.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because it makes little sense to repeat a keyword.""" start="00:09:07.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So why not center everything around the keys only,""" start="00:09:09.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and can that help simplify my code?""" start="00:09:13.920" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Diving in yasnippet""" start="00:09:18.880" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So I started to dive into yasnippet""" start="00:09:18.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I found a lot of useful semi-hidden functions there.""" start="00:09:23.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I discovered that getting the list,""" start="00:09:27.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""the list of keys for a given mode was not that difficult.""" start="00:09:30.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And at the end, what I started doing""" start="00:09:34.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""is get all the snippet tables used by a major mode""" start="00:09:40.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and get the lists of the keys that you have in each table.""" start="00:09:43.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Sometimes the list is empty""" start="00:09:48.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so it's going to return a nil and that you have to discard.""" start="00:09:50.376" video="mainVideo-completion" id="subtitle"]]
[[!template text="""When you're using structured snippets""" start="00:09:54.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""like snippets and submenus and so on""" start="00:09:57.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to get a structured menu.""" start="00:10:02.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""You also get some non-strings that you need to filter out""" start="00:10:06.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in order to get a workable keyword list.""" start="00:10:09.835" video="mainVideo-completion" id="subtitle"]]
[[!template text="""At the end of the day, what I had was something like this.""" start="00:10:15.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have, for a mode, I went through all modes.""" start="00:10:21.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""through all modes associated to that, and then I went,""" start="00:10:29.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I got my results from all the tables that I had""" start="00:10:38.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""for a given time, for a given table.""" start="00:10:42.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So what you do is you get the tables""" start="00:10:45.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that are associated to a mode, because, surprise, surprise,""" start="00:10:48.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""some modes have more than one table.""" start="00:10:53.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And then what you do is you filter out all non strings""" start="00:10:55.959" video="mainVideo-completion" id="subtitle"]]
[[!template text="""from each of the keys list that you have for each table.""" start="00:11:00.918" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So as you see, it's a 1, 2, 3, 4, 5, 6, 7 liner,""" start="00:11:07.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which was not too much.""" start="00:11:12.380" video="mainVideo-completion" id="subtitle"]]
[[!template text="""By the way, if someone from Yasnippet is around,""" start="00:11:14.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I sent a pull request to include this""" start="00:11:20.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""as a public function in Yasnipit""" start="00:11:26.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because it might be nice to have it in the package""" start="00:11:29.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in order to do this kind of things.""" start="00:11:32.320" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Fine-tuning: adding cape""" start="00:11:33.840" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So fine-tuning. Just adding a yas completion""" start="00:11:33.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to the completion point functions was not enough.""" start="00:11:41.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't really know,""" start="00:11:44.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but :exclusive no didn't seem to work how I wanted""" start="00:11:46.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so I needed to escape... Sorry. Yeah.""" start="00:11:51.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I was saying I was getting rid of packages,""" start="00:11:54.550" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I had to add one package""" start="00:11:57.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in order to get a function, which is very, very, nice,""" start="00:12:00.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and which is part of the cape function of the cape package,""" start="00:12:04.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and that's cape-capf-super.""" start="00:12:08.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So at the end, using that, you define an alias,""" start="00:12:12.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which, for that, where you use cape-capf-super""" start="00:12:16.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to have a list of what you want...""" start="00:12:23.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So in this case, for example, for the demo""" start="00:12:25.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm going to make, I'm using yas completion""" start="00:12:29.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and then the elisp-completion-at-point function""" start="00:12:31.420" video="mainVideo-completion" id="subtitle"]]
[[!template text="""provided by Emacs.""" start="00:12:36.173" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I combine them using cape-capf-super,""" start="00:12:37.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and with that, I create a completion point,""" start="00:12:44.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""a new completion point function which I call cape-lisp-mode,""" start="00:12:47.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and then I add this alias to the completion functions list,""" start="00:12:53.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and with that, it is enough.""" start="00:12:58.520" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Automatic snippet expansion""" start="00:13:03.804" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Snippet expansion.""" start="00:13:03.804" video="mainVideo-completion" id="subtitle"]]
[[!template text="""If you want to have your snippets expanded automatically,""" start="00:13:05.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""you have to add an exit function to the, I'm sorry,""" start="00:13:13.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to the completion properties.""" start="00:13:28.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Yet another functionality you have to add.""" start="00:13:30.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And to avoid this automatic selection to be too eager,""" start="00:13:34.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""you need to add this setq corfu-on-exact-match to nil""" start="00:13:39.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because otherwise, you will always get the snippet expanded,""" start="00:13:47.974" video="mainVideo-completion" id="subtitle"]]
[[!template text="""even if you don't want it. Basically, why?""" start="00:13:51.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Basically, because this would be suboptimal""" start="00:13:55.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because the key can appear as part of a variable name.""" start="00:13:57.640" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Themes""" start="00:14:05.360" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Another nice thing, I'm also creating my own themes.""" start="00:14:05.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm trying to have very sleek themes""" start="00:14:10.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that only cover the modes that I use""" start="00:14:13.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and for that I have my own theme creator fork""" start="00:14:16.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""from the original theme creator.""" start="00:14:22.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""In my personal fork that I'm running at home,""" start="00:14:26.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I only have the faces for the modes I use.""" start="00:14:29.293" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't want to overload the thing""" start="00:14:33.860" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with too much different things.""" start="00:14:38.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Looking at this, I really didn't need, as you will see now,""" start="00:14:41.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't need to add anything to my themes,""" start="00:14:46.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because the default faces for Corfu""" start="00:14:50.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""adapt quite well to most of the themes.""" start="00:14:53.280" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""My check-list""" start="00:14:58.320" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""So if I go back to my checklist,""" start="00:14:58.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""decently new Emacs, yes,""" start="00:15:01.479" video="mainVideo-completion" id="subtitle"]]
[[!template text="""compiled. The one you'll see""" start="00:15:02.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in the demo I'm doing is a master""" start="00:15:06.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""compiled the day before yesterday""" start="00:15:09.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I don't need corfu-terminal there.""" start="00:15:12.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I need yasnippet,""" start="00:15:15.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and you're going to see that in a second""" start="00:15:16.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with a couple of snippets that I can expand here.""" start="00:15:20.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't want any reminiscence of a company in my setup,""" start="00:15:24.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and there's none. Well, actually, :company-kind is there""" start="00:15:27.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""you see the company there,""" start="00:15:32.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but it isn't defined by company strictly speaking,""" start="00:15:33.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and for... I don't want... I need Eglot integration""" start="00:15:39.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which I will also be showing you.""" start="00:15:44.680" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Takeaways""" start="00:15:48.584" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Takeaways from all this,""" start="00:15:48.584" video="mainVideo-completion" id="subtitle"]]
[[!template text="""if you accept the extra burden""" start="00:15:50.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""of corfu-terminal for Emacs 30 or earlier Emacs 30s,""" start="00:15:55.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""it's not too difficult to get this set up running.""" start="00:16:02.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Corfu was easier to integrate and configure than Company,""" start="00:16:07.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and it's much lighter in terms""" start="00:16:11.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""of number of lines, et cetera. I learned a lot.""" start="00:16:13.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Well, actually, yes, with the help of Cape,""" start="00:16:20.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but it is much lighter and much easier""" start="00:16:25.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to integrate and configure.""" start="00:16:27.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I've learned a lot about computational functions in the process,""" start="00:16:30.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is, something that is always nice to learn new things""" start="00:16:34.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and the nerd-icons-corfu makes the...""" start="00:16:40.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""at least, at this point in time... I might get tired of it,""" start="00:16:45.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but at this point in time, it makes""" start="00:16:48.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""a very nice overall look and feel for Emacs.""" start="00:16:50.400" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Requests (to whom it may concern)""" start="00:16:58.040" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Requests (to whom it may concern): cape has nice features""" start="00:16:58.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that maybe could make their way into emacs.""" start="00:17:02.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm thinking basically about""" start="00:17:06.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""this super cape functionality""" start="00:17:08.065" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is very nice, and overcomes the problem of linking,""" start="00:17:12.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and this :exclusive and all this kind of things""" start="00:17:18.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that we have currently in Corfu""" start="00:17:22.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with the completion-at-point functions.""" start="00:17:26.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Corfu is also really nice to have, and it's not too big.""" start="00:17:28.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So is there any possibility""" start="00:17:32.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that it makes its way into Emacs?""" start="00:17:35.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Please keep yasnippet alive.""" start="00:17:40.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm not saying here that my pull request should be there,""" start="00:17:42.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but it would be nice if someone took a look""" start="00:17:48.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and made it part of Yasnippet.""" start="00:17:51.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And P.S., currently on master,""" start="00:17:57.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""there's a lot of semantic highlighting going on,""" start="00:18:01.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is very, very nice. No criticism on that.""" start="00:18:04.293" video="mainVideo-completion" id="subtitle"]]
[[!template text="""But you may need to add to your snippet hook""" start="00:18:07.126" video="mainVideo-completion" id="subtitle"]]
[[!template text="""this simple local value for elisp-fontify-semantically,""" start="00:18:12.418" video="mainVideo-completion" id="subtitle"]]
[[!template text="""because at least in my case, I felt that""" start="00:18:25.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""the faces were a bit too pushy,""" start="00:18:30.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so I had to make the snippet mode""" start="00:18:32.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""use the old Emacs Lisp fontification.""" start="00:18:37.334" video="mainVideo-completion" id="subtitle"]]
[[!template text="""This would be my talk.""" start="00:18:43.580" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Any initial reactions to this? There's a question here.""" start="00:18:46.280" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Did you try yasnippet-capf? If so, what did you miss from it that this approach has? Thanks! https://github.com/elken/yasnippet-capf""" start="00:18:55.000" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Someone asked, did you try yasnippet-capf?""" start="00:18:55.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""If so, what did you miss from this approach? I tried that.""" start="00:18:59.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And it's not that I missed anything.""" start="00:19:05.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""It was more or less that I wanted to do it myself.""" start="00:19:11.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So I wanted to see what was behind it. That's my answer.""" start="00:19:15.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""There are lots of packages there,""" start="00:19:24.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but I try to keep learning. So, this was a nice objective""" start="00:19:26.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""to learn a bit more about Emacs. And now, just a second.""" start="00:19:31.720" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""A small demo""" start="00:19:40.160" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Now, a small demo. This is the interaction.""" start="00:19:40.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And as you see, I have the snippet there.""" start="00:19:44.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I have a couple of snippets.""" start="00:19:47.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So, for example, if I would like to say""" start="00:19:52.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I want to define a function, I can go like this.""" start="00:19:55.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And what you see here is that""" start="00:19:58.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have two snippets appearing and then some variables.""" start="00:20:00.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So, I could go for defun or if I want a key map, for def-keymap,""" start="00:20:04.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which would be something like this.""" start="00:20:09.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And then when I press enter, I get directly into the map""" start="00:20:11.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I could say like, show off map.""" start="00:20:18.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Then it sets out directly a :prefix t,""" start="00:20:26.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is something that I asked for in Emacs master.""" start="00:20:30.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So with :prefix t, for those who prefix it true,""" start="00:20:35.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""for those who don't know it,""" start="00:20:39.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""it makes integrating this into keymaps""" start="00:20:41.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in use-package much easier.""" start="00:20:49.043" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So the next thing would be,""" start="00:20:52.126" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I would like to write a description,""" start="00:20:54.168" video="mainVideo-completion" id="subtitle"]]
[[!template text="""like, for example, a cool show-off keymap,""" start="00:20:56.501" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and then my keys are my functions, and that would be it.""" start="00:21:05.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Of course, you also have like this define function.""" start="00:21:08.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And of course you can say, that's nice,""" start="00:21:15.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but you're not showing the integration""" start="00:21:21.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with Eglot, and you're right.""" start="00:21:23.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So I'm going just to open up a small program""" start="00:21:25.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that I'm currently developing in Python.""" start="00:21:30.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""This is a tool to do things in MP3.""" start="00:21:33.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And here I would have, like, all these things.""" start="00:21:38.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""As you see here in the bottom,""" start="00:21:42.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""server is running, file is local, eglot is active.""" start="00:21:45.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So I have my eglot stop and then I go down.""" start="00:21:49.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And I want to add a new argument here.""" start="00:21:57.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I would go like for it. I would go like add flag.""" start="00:22:00.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""For example, I would add a flag""" start="00:22:08.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I would get a new flag to add here.""" start="00:22:13.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Oops. Of course, this is integrated into Eglot,""" start="00:22:27.860" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so I'm getting your information about what I have.""" start="00:22:33.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I could... I don't have os, so I would need to import here,""" start="00:22:42.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but I can go up just to see...""" start="00:22:52.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""If I would like to, for example,""" start="00:22:59.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""create a new regular expression,""" start="00:23:01.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm getting this information that you see right now on call.""" start="00:23:11.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm getting that from Eglot.""" start="00:23:15.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So you see there's the integration""" start="00:23:17.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with Eglot too in Python.""" start="00:23:18.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have Eglot, and as you've seen""" start="00:23:20.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I also have the... and all these are snippets. Fine.""" start="00:23:23.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""More reactions and questions?""" start="00:23:30.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Because that would be my show off here.""" start="00:23:38.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Any questions? Any more questions on the pad?""" start="00:23:54.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but anyhow I'm going to try,""" start="00:24:09.380" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm going to try yasnippet too""" start="00:24:11.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I'm going to be answering this question more""" start="00:24:13.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""yeah time is good okay fine""" start="00:24:16.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so I would be done if there's no more reactions...""" start="00:24:21.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Thank you so much. You're welcome.""" start="00:24:30.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""If you have any other questions, folks,""" start="00:24:33.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""you can always follow up on the pad.""" start="00:24:34.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""That was a great demonstration, and I'm sure lots of people""" start="00:24:37.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""are looking forward to trying it out.""" start="00:24:39.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Oh, I see some questions coming in now.""" start="00:24:43.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""You may go ahead if you like.""" start="00:24:45.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Okay, fine. There's someone asking:""" start="00:24:46.200" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Do special characters in yasnippets work well too? example <FD ?""" start="00:24:51.880" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""Do special characters in your snippets work well too?""" start="00:24:51.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""what kind of... I don't use special characters in the key name,""" start="00:24:57.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so in this case everything works quite nicely,""" start="00:25:02.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and then I'm passing, I'm passing the control to yasnippet,""" start="00:25:05.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so if there's any problem in yasnippet""" start="00:25:11.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with special characters,""" start="00:25:13.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that, I don't know. I don't use that as a key.""" start="00:25:15.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm just using for key names.""" start="00:25:24.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I normally use a... I only use letters, but that should work.""" start="00:25:30.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I mean, let's, uh, let's give it a trial.""" start="00:25:38.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Let's kill here. Yes. I don't want, I don't want to touch this.""" start="00:25:43.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Ugh. Let's go into this one.""" start="00:25:58.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Let's say I'm going to define this, for example, like this,""" start="00:26:01.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I'm going to create a new snippet.""" start="00:26:06.959" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm going to create a new snippet""" start="00:26:10.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and use this. For example, when you look at this,""" start="00:26:15.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""if you have the new way of the new Emacs""" start="00:26:18.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""semantical highlighting working,""" start="00:26:31.043" video="mainVideo-completion" id="subtitle"]]
[[!template text="""this would be quite cramped. This is why I'm using,""" start="00:26:37.668" video="mainVideo-completion" id="subtitle"]]
[[!template text="""this is why I said the snippet, the...""" start="00:26:40.626" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So is this more or less what you're talking about?""" start="00:26:44.900" video="mainVideo-completion" id="subtitle"]]
[[!template text="""This is what you're talking about. Snippet. Save the snippet.""" start="00:26:55.140" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Snippet, load and put window.""" start="00:27:12.580" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Enable interaction mode. Yes, I'm going to save.""" start="00:27:15.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And I'm going to save that as fd test in the file.""" start="00:27:21.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""No, I'm going to save this. Load. Load input window.""" start="00:27:31.060" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm going to put this in Emacs Lisp mode. I want to save it. No.""" start="00:27:41.480" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm going to write that directly into Emacs Lisp mode.""" start="00:27:53.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Going to go back into scratch buffer,""" start="00:28:27.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and here I have it. We have it here. But anyhow...""" start="00:28:30.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And I'm just going to try to see, if I feel like...""" start="00:28:43.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Empty? Of course, there's only one.""" start="00:28:46.935" video="mainVideo-completion" id="subtitle"]]
[[!template text="""It will not show in Corfu.""" start="00:28:52.664" video="mainVideo-completion" id="subtitle"]]
[[!template text="""but I mean, I don't have any problems""" start="00:28:58.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""with that, as you see. Was that what you were meaning?""" start="00:29:01.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Yeah, I guess that works. Fine.""" start="00:29:21.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""All right, shall we wrap up here""" start="00:29:24.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so that you can have supper""" start="00:29:29.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and have lunch and other things? Okay, fine for me.""" start="00:29:31.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I was hoping to see the drop down. Just a second.""" start="00:29:40.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I think we can do that too. Two seconds.""" start="00:29:46.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""How can we do that with a drop down?""" start="00:29:49.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Yeah, if I say something like this.""" start="00:29:52.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And then I go and save it.""" start="00:29:57.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And I'm going to go and write this""" start="00:30:04.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""into, with a second, fine.""" start="00:30:08.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And now I need to quit here, sorry.""" start="00:30:16.720" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And I'm going to come back in a second with another remark.""" start="00:30:18.180" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Well, I'm bringing back and now let's see.""" start="00:30:26.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Let's see what we have in yasnippet.""" start="00:30:31.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""It's not there. Why not? Just a second. Let's see if I go.""" start="00:30:34.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't know if it matters that the name was""" start="00:30:44.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""that didn't have the characters in the beginning.""" start="00:30:47.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Just a second. I think I know what is happening here.""" start="00:30:52.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Do I have them? I'm going to clean.""" start="00:31:05.700" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Sacha]: Oh, you're back in your home directories is why.""" start="00:31:21.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""cd - to get back in.""" start="00:31:28.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Yeah. That's right.""" start="00:31:35.005" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So you see how the name also has...""" start="00:31:35.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""it doesn't have the same as the keys.""" start="00:31:37.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I don't know if that affects what shows up.""" start="00:31:39.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Pedro]: Yeah, we we can try that.""" start="00:31:41.040" video="mainVideo-completion" id="subtitle"]]
[[!template text="""That's a quick one. This is my...""" start="00:31:44.881" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Fine, now that I have this,""" start="00:31:50.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is going to be quicker, we check again.""" start="00:31:51.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""They both seem to be the same now""" start="00:31:55.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I don't know if that affects, but anyhow, let's try it.""" start="00:31:57.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I go and then I look at the yasnippet, if it's there.""" start="00:32:03.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""Yes, it is.""" start="00:32:07.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Sacha]: Yeah, it's there.""" start="00:32:09.957" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Pedro]: And then if I say there, there you are. Oh, look at that.""" start="00:32:11.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""It doesn't seem to be affecting.""" start="00:32:18.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Sacha]: Fantastic.""" start="00:32:22.168" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Pedro]: And by the way, it is there.""" start="00:32:24.160" video="mainVideo-completion" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Emacs Lisp""" start="00:32:32.120" video="mainVideo-completion" id="subtitle"]]</div>[[!template text="""[Sacha]: Yeah, I really should spend time""" start="00:32:32.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""getting more templates set up with yasnippet.""" start="00:32:34.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I really love the fact that""" start="00:32:36.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""you can evaluate Emacs Lisp in it too.""" start="00:32:37.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Pedro]: Yeah, I mean, just to make it bigger,""" start="00:32:40.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""try that because if I go into my, for example,""" start="00:32:43.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""into my org mode stuff""" start="00:32:51.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and in my org mode, I go to the article,""" start="00:32:55.680" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is one of the big ones.""" start="00:32:59.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have things like, for example,""" start="00:33:03.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I defined a couple of functions here to do if it's empty,""" start="00:33:05.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""if that is empty, just add a white space.""" start="00:33:09.200" video="mainVideo-completion" id="subtitle"]]
[[!template text="""If one is empty, add a white space.""" start="00:33:16.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""add a white space here so it becomes a comment.""" start="00:33:19.600" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have functions to do more things on that,""" start="00:33:23.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and I also have menus to see""" start="00:33:27.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""what language I want to choose for""" start="00:33:29.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""my spell checking and so on.""" start="00:33:31.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And that's all... As you see,""" start="00:33:33.251" video="mainVideo-completion" id="subtitle"]]
[[!template text="""this is Lisp being evaluated.""" start="00:33:35.481" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So yes, do. I really encourage you""" start="00:33:39.418" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Sacha]: I've also heard people use it,""" start="00:33:45.120" video="mainVideo-completion" id="subtitle"]]
[[!template text="""like, especially if they're working""" start="00:33:46.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in different programming languages,""" start="00:33:47.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""so they can just have the syntax""" start="00:33:49.920" video="mainVideo-completion" id="subtitle"]]
[[!template text="""for the different languages""" start="00:33:52.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""be condensed into a consistent abbreviation.""" start="00:33:54.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Pedro]: Yeah. And look, this is my article. I have another.""" start="00:33:58.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""This is when I'm writing articles. I have another one.""" start="00:34:01.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have another one for writing letters""" start="00:34:07.800" video="mainVideo-completion" id="subtitle"]]
[[!template text="""in org mode and so on. So, it's like letter, block,""" start="00:34:10.280" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and you have the complete infrastructure""" start="00:34:14.400" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and you don't have to type it by hand.""" start="00:34:16.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So, it's really, really nice.""" start="00:34:20.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Sacha]: Hmm, I think it might be nice to have""" start="00:34:22.880" video="mainVideo-completion" id="subtitle"]]
[[!template text="""a future Emacs carnival, you know,""" start="00:34:25.960" video="mainVideo-completion" id="subtitle"]]
[[!template text="""shared blogging theme thing be around""" start="00:34:28.080" video="mainVideo-completion" id="subtitle"]]
[[!template text="""having people share their snippets.""" start="00:34:31.240" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Pedro]: Yasnippets and other things. Like for example,""" start="00:34:33.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""this is something stupid.""" start="00:34:39.360" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm switching my themes. All right.""" start="00:34:41.320" video="mainVideo-completion" id="subtitle"]]
[[!template text="""And of course, there you see,""" start="00:34:44.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I have also, this is also with,""" start="00:34:48.640" video="mainVideo-completion" id="subtitle"]]
[[!template text="""this is my way of switching buffers,""" start="00:34:51.440" video="mainVideo-completion" id="subtitle"]]
[[!template text="""which is with the shift control and tab,""" start="00:34:55.793" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I can switch different families""" start="00:34:58.160" video="mainVideo-completion" id="subtitle"]]
[[!template text="""and then when I'm in a family,""" start="00:35:00.560" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I can go and switch with control tab between the different,""" start="00:35:02.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm using tab line by the way. I'm not using the other one.""" start="00:35:07.000" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I'm using the old plain tab line with my themes.""" start="00:35:13.660" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So that's more or less everything.""" start="00:35:20.840" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Sacha]: Thank you for the peek into your workflow.""" start="00:35:23.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I will work on getting the recordings for the live talks""" start="00:35:26.520" video="mainVideo-completion" id="subtitle"]]
[[!template text="""sorted out at some point very soon.""" start="00:35:30.760" video="mainVideo-completion" id="subtitle"]]
[[!template text="""I might even be able to get them out next week.""" start="00:35:34.459" video="mainVideo-completion" id="subtitle"]]
[[!template text="""So thanks again. All right. Have a nice supper.""" start="00:35:37.085" video="mainVideo-completion" id="subtitle"]]
[[!template text="""[Pedro]: Same to you.""" start="00:35:43.668" video="mainVideo-completion" id="subtitle"]]
</div>Questions or comments? Please e-mail [paaguti@gmail.com](mailto:paaguti@gmail.com?subject=Comment%20for%20EmacsConf%202023%20completion%3A%20corfu%2Byasnippet%3A%20Easier%20than%20I%20thought)
<!-- End of emacsconf-publish-after-page -->
|