Transcript (unedited)

[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Motivation""" start="00:00:52.516" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""My requirements""" start="00:03:29.120" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Basic setup: corfu + eglot""" start="00:04:37.600" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Looking at completion-at-point functions""" start="00:05:02.960" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!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"]]
[[!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"]]
[[!template new="1" text="""Getting yas-kw-list right: What do I want?""" start="00:08:10.900" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Diving in yasnippet""" start="00:09:18.880" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Fine-tuning: adding cape""" start="00:11:33.840" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Automatic snippet expansion""" start="00:13:03.804" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Themes""" start="00:14:05.360" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""My check-list""" start="00:14:58.320" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Takeaways""" start="00:15:48.584" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!template new="1" text="""Requests (to whom it may concern)""" start="00:16:58.040" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!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"]]
[[!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"]]
[[!template new="1" text="""A small demo""" start="00:19:40.160" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
[[!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"]]
[[!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"]]
[[!template new="1" text="""Emacs Lisp""" start="00:32:32.120" video="mainVideo-completion" id="subtitle"]]
[[!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"]]
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)