diff options
15 files changed, 2226 insertions, 931 deletions
diff --git a/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt new file mode 100644 index 00000000..9d9dc2ba --- /dev/null +++ b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt @@ -0,0 +1,56 @@ +WEBVTT + + +00:00:00.000 --> 00:00:52.515 +Introduction + +00:00:52.516 --> 00:03:29.119 +Motivation + +00:03:29.120 --> 00:04:37.599 +My requirements + +00:04:37.600 --> 00:05:02.959 +Basic setup: corfu + eglot + +00:05:02.960 --> 00:06:44.879 +Looking at completion-at-point functions + +00:06:44.880 --> 00:08:10.899 +Making my own (basic) c-a-p-f for yasnippet: the completion properties + +00:08:10.900 --> 00:09:18.879 +Getting yas-kw-list right: What do I want? + +00:09:18.880 --> 00:11:33.840 +Diving in yasnippet + +00:11:33.840 --> 00:13:03.803 +Fine-tuning: adding cape + +00:13:03.804 --> 00:14:05.359 +Automatic snippet expansion + +00:14:05.360 --> 00:14:58.319 +Themes + +00:14:58.320 --> 00:15:48.583 +My check-list + +00:15:48.584 --> 00:16:58.039 +Takeaways + +00:16:58.040 --> 00:18:54.999 +Requests (to whom it may concern) + +00:18:55.000 --> 00:19:40.159 +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 + +00:19:40.160 --> 00:24:51.879 +A small demo + +00:24:51.880 --> 00:32:32.119 +Q: Do special characters in yasnippets work well too? example <FD ? + +00:32:32.120 --> 00:35:44.920 +Emacs Lisp diff --git a/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt index 49bf10f3..ba28468e 100644 --- a/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt +++ b/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt @@ -1,5 +1,7 @@ WEBVTT +NOTE Introduction + 00:00:00.000 --> 00:00:02.319 Nice to have you here on this talk. @@ -16,7 +18,7 @@ Just as a side note, this presentation that I'm going to share with you 00:00:16.280 --> 00:00:19.879 -about my work on Corfu and Jasnipit. +about my work on Corfu and Yasnippet. 00:00:19.880 --> 00:00:21.839 I've prepared that on Org Mode @@ -45,11 +47,16 @@ So just a short outline, my motivation, 00:00:46.960 --> 00:00:49.959 step-by-step of the things that I've been investigating, -00:00:49.960 --> 00:00:55.919 -and some takeaways. So my motivation, yeah, snippet is old. +00:00:49.960 --> 00:00:52.515 +and some takeaways. + +NOTE Motivation + +00:00:52.516 --> 00:00:55.919 +So my motivation, yasnippet is old. 00:00:55.920 --> 00:00:59.599 -So I've tried another, I've tried Temple +So I've tried another. I've tried Tempel 00:00:59.600 --> 00:01:02.519 and other template management packages, @@ -58,7 +65,7 @@ and other template management packages, but it was really not my cup of tea. So mainly why? 00:01:08.160 --> 00:01:10.919 -Mainly because I have a nice base of VR snippets +Mainly because I have a nice base of yasnippets 00:01:10.920 --> 00:01:14.479 I have generated for my needs. @@ -78,53 +85,62 @@ And of course, migration counts as a cost. 00:01:26.560 --> 00:01:32.639 I've been using Company as my completion point function GUI for years, -00:01:32.640 --> 00:01:38.919 -but with the time coming in features and so on it +00:01:32.640 --> 00:01:38.167 +but with the time coming in features and so on, + +00:01:38.168 --> 00:01:44.359 +it was not as easy to set up as I wanted for my needs. + +00:01:44.360 --> 00:01:47.181 +So I had been working, -00:01:38.920 --> 00:01:44.359 -was it's was not as easy to set up as I wanted for my needs +00:01:47.182 --> 00:01:49.839 +I've been playing with Eglot already some time -00:01:44.360 --> 00:01:53.119 -so I had been working I've been playing with Eaglet already some time for a language server protocol +00:01:49.840 --> 00:01:53.119 +for a language server protocol. 00:01:53.120 --> 00:01:57.039 -I had read about how easy it was to integrate with Corfu +I had read about how easy it was to integrate with Corfu, 00:01:57.040 --> 00:02:02.839 -which was really nice and I had given it a try, +which was really nice, and I had given it a try, -00:02:02.840 --> 00:02:06.439 +00:02:02.840 --> 00:02:10.250 but I'm using both graphical user interface mode in Emacs -00:02:06.440 --> 00:02:07.839 +00:02:10.251 --> 00:02:11.000 and text mode, -00:02:07.840 --> 00:02:10.319 -and for text mode you need a corporate terminal, +00:02:11.001 --> 00:02:13.042 +and for text mode you need corfu-terminal, -00:02:10.320 --> 00:02:16.399 -which was yet another package that I don't download. +00:02:13.043 --> 00:02:16.399 +which was yet another package that I didn't download. 00:02:16.400 --> 00:02:21.479 Well, and I didn't really find a quick way 00:02:21.480 --> 00:02:24.479 -to get rid of company to get just snippet. +to get rid of company to get yasnippet. 00:02:24.480 --> 00:02:26.679 So at the end, when, at the beginning, -00:02:26.680 --> 00:02:33.959 -when I was using Corfu and Eglot, I also needed to load a company +00:02:26.680 --> 00:02:30.107 +when I was using Corfu and Eglot, + +00:02:30.108 --> 00:02:33.959 +I also needed to load company 00:02:33.960 --> 00:02:35.759 -to have a snippet support, +to have yasnippet support, 00:02:35.760 --> 00:02:37.639 which was really like sort of weird 00:02:37.640 --> 00:02:40.559 -because I wanted to get rid of, of your snippet. +because I wanted to get rid of yasnippet. 00:02:40.560 --> 00:02:47.199 Anyhow, while I try now, I'm following the mailing list, @@ -136,7 +152,7 @@ the development mailing list, and I got interested when I heard something about 00:02:51.800 --> 00:02:57.119 -TTI charge frames being announced for master. +TTY child frames being announced for master. 00:02:57.120 --> 00:02:59.599 That would mean less packages to download @@ -145,7 +161,7 @@ That would mean less packages to download because I thought I could get rid of Corfu, 00:03:04.160 --> 00:03:07.359 -and I wanted to try if I could get rid of Corfu terminal +and I wanted to try if I could get rid of corfu-terminal 00:03:07.360 --> 00:03:11.199 and run Corfu without that. @@ -157,43 +173,48 @@ So, there were some hints there in that mailing list that made it interesting for me. 00:03:21.880 --> 00:03:26.639 -And at the end, I'm also like a why not trying man, +And at the end, I'm also like a "why not try"ing man, 00:03:26.640 --> 00:03:29.119 -so I said let's give it a try. +so I said, let's give it a try. + +NOTE My requirements 00:03:29.120 --> 00:03:33.479 My requirements, I'm working always on a new Emacs, 00:03:33.480 --> 00:03:36.759 -a decently new Emacs, normally from Master Vanilla. +a decently new Emacs, normally from master, vanilla, + +00:03:36.760 --> 00:03:41.209 +completely vanilla, and I don't have any extras -00:03:36.760 --> 00:03:42.559 -completely Vanilla and I don't have any extras like Doom or things like that. +00:03:41.210 --> 00:03:42.559 +like Doom or things like that. 00:03:42.560 --> 00:03:45.519 -So I'm only Vanilla. And one of the things +So I'm only vanilla. And one of the things 00:03:45.520 --> 00:03:50.279 -that I don't want is that on this Vanilla recent Emacs, +that I don't want is that on this vanilla recent Emacs, 00:03:50.280 --> 00:03:55.719 -I don't want a Kung Fu Terminal. I need your snippet. +I don't want a corfu-terminal. I need yasnippet. 00:03:55.720 --> 00:03:57.359 I'm basically an old man. 00:03:57.360 --> 00:04:02.479 -Old dog does new tricks and snippets must, +Old dog doesn't do new tricks and snippets must, 00:04:02.480 --> 00:04:06.239 -in my way of working, must be easy and quick to configure +in my way of working, must be easy and quick to configure, 00:04:06.240 --> 00:04:10.479 -and Tempo or others that I've seen are not. +and tempel or others that I've seen are not. 00:04:10.480 --> 00:04:13.919 -I don't want any reminiscence of a company in my setup. +I don't want any reminiscence of company in my setup. 00:04:13.920 --> 00:04:18.679 And of course, don't forget that I've embraced @@ -205,10 +226,12 @@ the language protocol implementations and basically Eglot. My main focus now is Python and LaTeX, 00:04:28.160 --> 00:04:31.719 -and I have PyLSB and TechLab. +and I have pylsp and texlab. 00:04:31.720 --> 00:04:37.599 -And I don't want to have to stop using them. +I don't want to have to stop using them. + +NOTE Basic setup: corfu + eglot 00:04:37.600 --> 00:04:40.479 So basic setup for Corfu and Eglot. @@ -226,7 +249,7 @@ And actually, I also do something somehow naughty, which is to set this variable, 00:04:53.080 --> 00:04:55.519 -the Corfu auto variable to true, +the corfu-auto variable to true, 00:04:55.520 --> 00:04:58.399 although I know it's not recommended, blah, blah, blah. @@ -234,53 +257,55 @@ although I know it's not recommended, blah, blah, blah. 00:04:58.400 --> 00:05:02.959 But I use that because I'm a bit lazy in that. +NOTE Looking at completion-at-point functions + 00:05:02.960 --> 00:05:07.239 So next step was looking at completion at point functions. 00:05:07.240 --> 00:05:10.479 -So the information there if you go through the scatter +So the information there, if you go through, is scattered -00:05:10.480 --> 00:05:13.999 +00:05:10.480 --> 00:05:13.739 and sometimes a bit cryptic. -00:05:14.000 --> 00:05:16.599 +00:05:13.740 --> 00:05:16.599 At the end I came up with something like the thing 00:05:16.600 --> 00:05:18.399 that you see there on the screen. 00:05:18.400 --> 00:05:21.879 -So it's a function for just completion point +It's a function for yas-completion-at-point. 00:05:21.880 --> 00:05:24.639 -so I need my list of keywords +I need my list of keywords, 00:05:24.640 --> 00:05:30.039 -so that I'm going to be talking later +so that I'm going to be talking later, 00:05:30.040 --> 00:05:34.399 -and I have my bounds which is normally a word +and I have my bounds, which is normally a word, 00:05:34.400 --> 00:05:37.119 -and from that I get the start and the end +and from that, I get the start and the end -00:05:37.120 --> 00:05:38.919 -of the of the thing that I want to +00:05:37.120 --> 00:05:40.879 +of the thing that I want to -00:05:38.920 --> 00:05:47.319 -that I want to be my seed for looking and bringing up Corfu +00:05:40.880 --> 00:05:47.319 +be my seed for looking and bringing up Corfu, -00:05:47.320 --> 00:05:53.439 -and of course I need some completion properties here +00:05:47.320 --> 00:05:52.599 +and of course, I need some completion properties here. -00:05:53.440 --> 00:05:55.719 +00:05:52.600 --> 00:05:55.719 This looked like this is what you need to do, 00:05:55.720 --> 00:05:57.519 but I had to dig quite deep 00:05:57.520 --> 00:06:01.319 -to create a JavaScript keyword test +to create a yasnippet keyword test 00:06:01.320 --> 00:06:04.759 and to understand the completion props. @@ -288,11 +313,11 @@ and to understand the completion props. 00:06:04.760 --> 00:06:11.759 And as an update of what I've been doing in the last weeks, -00:06:11.760 --> 00:06:13.879 -I've created a bound of things +00:06:11.760 --> 00:06:17.606 +I've created a bound of things at point for me -00:06:13.880 --> 00:06:18.679 -that point for me with a different thing +00:06:17.607 --> 00:06:18.679 +with a different thing 00:06:18.680 --> 00:06:22.039 that doesn't skip over non-blank characters, @@ -301,7 +326,7 @@ that doesn't skip over non-blank characters, that only skips over non-blank characters. 00:06:25.040 --> 00:06:28.999 -Why? Because Word was confusingly tech, +Why? Because 'word was confusing LaTeX, 00:06:29.000 --> 00:06:30.759 because the backslash, @@ -309,50 +334,52 @@ because the backslash, 00:06:30.760 --> 00:06:34.999 like in the example for the teletype text, -00:06:35.000 --> 00:06:36.919 -was not taken into account by Word. +00:06:35.000 --> 00:06:37.999 +was not taken into account by 'word. -00:06:36.920 --> 00:06:39.959 +00:06:38.000 --> 00:06:39.959 So I had to create my own one, 00:06:39.960 --> 00:06:42.119 -which was a bunch of thing at point, +which was a bounds-of-thing-at-point, 00:06:42.120 --> 00:06:44.879 and then my thing is non-blanks. -00:06:44.880 --> 00:06:53.239 +NOTE Making my own (basic) c-a-p-f for yasnippet: the completion properties + +00:06:44.880 --> 00:06:51.179 Completion at point properties, what are they? -00:06:53.240 --> 00:06:56.039 +00:06:51.180 --> 00:06:56.039 They allow Emacs to know how to handle the information -00:06:56.040 --> 00:06:57.879 +00:06:56.040 --> 00:06:58.899 for a specific completion time. -00:06:57.880 --> 00:07:02.319 +00:06:58.900 --> 00:07:03.239 So you normally will have an annotation, -00:07:02.320 --> 00:07:08.519 -which then can disappear if you use NerdIconScoreFull. +00:07:03.240 --> 00:07:08.519 +which then can disappear if you use nerd-icons-corfu, 00:07:08.520 --> 00:07:11.839 which is what I'm doing currently, -00:07:11.840 --> 00:07:17.559 +00:07:11.840 --> 00:07:17.900 but I keep it commented just in case I get tired of Corfu -00:07:17.560 --> 00:07:20.079 +00:07:17.901 --> 00:07:20.000 and I want to have my completion function. -00:07:20.080 --> 00:07:26.759 -Then the company kind is actually not something +00:07:20.001 --> 00:07:24.959 +Then the :company-kind is actually not something -00:07:26.760 --> 00:07:30.999 +00:07:24.960 --> 00:07:30.999 that comes from the company package, but does not require. 00:07:31.000 --> 00:07:39.439 -And that's going to allow NerdEye Conscorfu to identify +And that's going to allow nerd-icons-corfu to identify 00:07:39.440 --> 00:07:44.839 and put the right icon there in the completion list, @@ -373,21 +400,23 @@ is that this is a snippet keyword. These two lines, either line, 00:07:56.800 --> 00:07:59.999 -tell you that this is a snippet keyword. +tell you that this is a snippet keyword, 00:08:00.000 --> 00:08:05.279 -And that it should be added to the other completions +and that it should be added to the other completions -00:08:05.280 --> 00:08:08.079 +00:08:05.280 --> 00:08:10.899 that you already have in your list. -00:08:08.080 --> 00:08:15.479 -Problems looking now next step +NOTE Getting yas-kw-list right: What do I want? + +00:08:10.900 --> 00:08:15.479 +Problems. Looking... Now, next step, -00:08:15.480 --> 00:08:19.079 +00:08:15.480 --> 00:08:18.479 once I had the completion props -00:08:19.080 --> 00:08:21.439 +00:08:18.480 --> 00:08:21.439 which was relatively easy was to go 00:08:21.440 --> 00:08:24.399 @@ -397,10 +426,13 @@ and get the keyword list right. I've been looking at pre-existing solutions 00:08:27.200 --> 00:08:29.319 -like for example how the menu +like, for example, how the menu + +00:08:29.320 --> 00:08:32.539 +is built in by yasnippet -00:08:29.320 --> 00:08:34.399 -is built in by your snippet and it looked a bit like Mission Impossible. +00:08:32.540 --> 00:08:34.399 +and it looked a bit like Mission Impossible, 00:08:34.400 --> 00:08:40.439 because the approach by all the things @@ -408,10 +440,10 @@ because the approach by all the things 00:08:40.440 --> 00:08:43.199 that I have seen and I have examined -00:08:43.200 --> 00:08:45.639 +00:08:43.200 --> 00:08:48.659 is to get the keys and the names -00:08:45.640 --> 00:08:50.799 +00:08:48.660 --> 00:08:50.799 and then further process them. 00:08:50.800 --> 00:08:55.279 @@ -424,99 +456,101 @@ At the end, if I use my own snippets, I'm going to be using something 00:09:00.440 --> 00:09:02.559 -I would call meaningful keys for them +I would call meaningful keys for them, 00:09:02.560 --> 00:09:06.359 -or at least meaningful for these keys are meaningful for me +or at least meaningful for... These keys are meaningful for me, 00:09:06.360 --> 00:09:07.679 -and I try not to repeat them +and I try not to repeat them, 00:09:07.680 --> 00:09:09.959 because it makes little sense to repeat a keyword. 00:09:09.960 --> 00:09:13.919 -So why not center everything around the keys only +So why not center everything around the keys only, 00:09:13.920 --> 00:09:18.879 and can that help simplify my code? +NOTE Diving in yasnippet + 00:09:18.880 --> 00:09:23.639 -So I started to dive into your snippet +So I started to dive into yasnippet 00:09:23.640 --> 00:09:27.319 and I found a lot of useful semi-hidden functions there. 00:09:27.320 --> 00:09:30.679 -I discovered that getting the list +I discovered that getting the list, 00:09:30.680 --> 00:09:34.959 the list of keys for a given mode was not that difficult. 00:09:34.960 --> 00:09:40.079 -And at the end what I started doing +And at the end, what I started doing -00:09:40.080 --> 00:09:47.079 -is get all the snipple tables used by a major mode +00:09:40.080 --> 00:09:43.399 +is get all the snippet tables used by a major mode -00:09:47.080 --> 00:09:52.399 +00:09:43.400 --> 00:09:47.999 and get the lists of the keys that you have in each table. -00:09:52.400 --> 00:09:55.839 +00:09:48.000 --> 00:09:50.375 Sometimes the list is empty -00:09:55.840 --> 00:10:01.959 +00:09:50.376 --> 00:09:54.319 so it's going to return a nil and that you have to discard. -00:10:01.960 --> 00:10:05.999 +00:09:54.320 --> 00:09:57.559 When you're using structured snippets -00:10:06.000 --> 00:10:08.919 +00:09:57.560 --> 00:10:02.479 like snippets and submenus and so on -00:10:08.920 --> 00:10:12.359 -to get a structured menu, +00:10:02.480 --> 00:10:06.399 +to get a structured menu. -00:10:12.360 --> 00:10:14.999 -you also get some non-strings that you need to filter out +00:10:06.400 --> 00:10:09.834 +You also get some non-strings that you need to filter out -00:10:15.000 --> 00:10:18.999 +00:10:09.835 --> 00:10:15.039 in order to get a workable keyword list. -00:10:19.000 --> 00:10:24.879 +00:10:15.040 --> 00:10:21.799 At the end of the day, what I had was something like this. -00:10:24.880 --> 00:10:30.959 +00:10:21.800 --> 00:10:29.519 I have, for a mode, I went through all modes. -00:10:30.960 --> 00:10:37.159 -through all modes associated to that and then I went +00:10:29.520 --> 00:10:38.799 +through all modes associated to that, and then I went, -00:10:37.160 --> 00:10:42.519 +00:10:38.800 --> 00:10:42.480 I got my results from all the tables that I had 00:10:42.520 --> 00:10:45.279 -for a for a given time for a given table +for a given time, for a given table. 00:10:45.280 --> 00:10:48.079 -so what you do is you get your the tables +So what you do is you get the tables 00:10:48.080 --> 00:10:53.119 -that are associated to a mode because surprise surprise +that are associated to a mode, because, surprise, surprise, 00:10:53.120 --> 00:10:55.958 -Some modes have more than one table, +some modes have more than one table. 00:10:55.959 --> 00:11:00.917 -and then what you do is you filter out all non strings +And then what you do is you filter out all non strings 00:11:00.918 --> 00:11:07.719 from each of the keys list that you have for each table. -00:11:07.720 --> 00:11:12.679 +00:11:07.720 --> 00:11:12.379 So as you see, it's a 1, 2, 3, 4, 5, 6, 7 liner, -00:11:12.680 --> 00:11:14.319 +00:11:12.380 --> 00:11:14.319 which was not too much. 00:11:14.320 --> 00:11:20.039 @@ -529,104 +563,116 @@ I sent a pull request to include this as a public function in Yasnipit 00:11:29.000 --> 00:11:32.319 -because it might be nice to have it in a packet +because it might be nice to have it in the package 00:11:32.320 --> 00:11:33.840 in order to do this kind of things. +NOTE Fine-tuning: adding cape + 00:11:33.840 --> 00:11:41.239 -So fine-tuning I just adding a yes completion +So fine-tuning. Just adding a yas completion 00:11:41.240 --> 00:11:44.719 -to the completion point functions was not enough +to the completion point functions was not enough. 00:11:44.720 --> 00:11:46.799 -I don't really know +I don't really know, 00:11:46.800 --> 00:11:51.199 -but exclusive node didn't seem to work how I wanted +but :exclusive no didn't seem to work how I wanted -00:11:51.200 --> 00:11:57.399 -so I needed to escape sorry yeah I was saying I was getting rid of packages +00:11:51.200 --> 00:11:54.549 +so I needed to escape... Sorry. Yeah. -00:11:57.400 --> 00:12:00.999 +00:11:54.550 --> 00:11:57.399 +I was saying I was getting rid of packages, + +00:11:57.400 --> 00:12:00.279 and I had to add one package -00:12:01.000 --> 00:12:04.479 -in order to get a function which is very very nice +00:12:00.280 --> 00:12:04.479 +in order to get a function, which is very, very, nice, 00:12:04.480 --> 00:12:08.919 -and which is part of the cape function of the cape package +and which is part of the cape function of the cape package, 00:12:08.920 --> 00:12:12.799 -and that's cape cap super. +and that's cape-capf-super. 00:12:12.800 --> 00:12:16.439 -So at the end using that you define an alias +So at the end, using that, you define an alias, 00:12:16.440 --> 00:12:23.199 -which for that where you use cape cap super +which, for that, where you use cape-capf-super 00:12:23.200 --> 00:12:25.799 -to have a list of what you want +to have a list of what you want... 00:12:25.800 --> 00:12:29.079 -so in this case for example for the demo +So in this case, for example, for the demo + +00:12:29.080 --> 00:12:31.419 +I'm going to make, I'm using yas completion -00:12:29.080 --> 00:12:32.759 -I'm going to make I'm using yes completion +00:12:31.420 --> 00:12:36.172 +and then the elisp-completion-at-point function -00:12:32.760 --> 00:12:37.719 -and then the elisp completion point function provided by Emacs. +00:12:36.173 --> 00:12:37.719 +provided by Emacs. 00:12:37.720 --> 00:12:43.999 -I combine them using cape cap super +I combine them using cape-capf-super, 00:12:44.000 --> 00:12:47.679 -and with that I create a completion point +and with that, I create a completion point, 00:12:47.680 --> 00:12:53.159 -a new completion point function which I call cape list mode +a new completion point function which I call cape-lisp-mode, 00:12:53.160 --> 00:12:58.480 -and then I add this alias to the completion functions list +and then I add this alias to the completion functions list, + +00:12:58.520 --> 00:13:03.803 +and with that, it is enough. + +NOTE Automatic snippet expansion -00:12:58.520 --> 00:13:05.719 -and with that it is enough snippet expansion +00:13:03.804 --> 00:13:05.719 +Snippet expansion. -00:13:05.720 --> 00:13:14.479 -if you want to have your snippets expanded automatically, +00:13:05.720 --> 00:13:13.839 +If you want to have your snippets expanded automatically, -00:13:14.480 --> 00:13:27.999 +00:13:13.840 --> 00:13:27.999 you have to add an exit function to the, I'm sorry, 00:13:28.000 --> 00:13:30.879 -to the completion properties +to the completion properties. 00:13:30.880 --> 00:13:34.119 -yet another functionality you have to add +Yet another functionality you have to add. 00:13:34.120 --> 00:13:39.199 -and to avoid this automatic selection to be too eager +And to avoid this automatic selection to be too eager, -00:13:39.200 --> 00:13:43.319 -you need to add this set corfu +00:13:39.200 --> 00:13:47.973 +you need to add this setq corfu-on-exact-match to nil -00:13:43.320 --> 00:13:48.599 -on exact match to nil because otherwise - -00:13:48.600 --> 00:13:51.839 -you will always get the snippet expanded +00:13:47.974 --> 00:13:51.839 +because otherwise, you will always get the snippet expanded, 00:13:51.840 --> 00:13:55.039 -even if you don't want it Basically why? +even if you don't want it. Basically, why? 00:13:55.040 --> 00:13:57.639 -Basically because this would be suboptimal +Basically, because this would be suboptimal 00:13:57.640 --> 00:14:05.359 because the key can appear as part of a variable name. +NOTE Themes + 00:14:05.360 --> 00:14:10.599 Another nice thing, I'm also creating my own themes. @@ -640,15 +686,15 @@ that only cover the modes that I use and for that I have my own theme creator fork 00:14:22.960 --> 00:14:26.959 -from the original team creator. +from the original theme creator. -00:14:26.960 --> 00:14:31.719 -In my personal work that I'm running at home, +00:14:26.960 --> 00:14:29.292 +In my personal fork that I'm running at home, -00:14:31.720 --> 00:14:34.159 +00:14:29.293 --> 00:14:33.859 I only have the faces for the modes I use. -00:14:34.160 --> 00:14:38.159 +00:14:33.860 --> 00:14:38.159 I don't want to overload the thing 00:14:38.160 --> 00:14:41.839 @@ -658,7 +704,7 @@ with too much different things. Looking at this, I really didn't need, as you will see now, 00:14:46.000 --> 00:14:50.079 -I don't need to add anything to my themes +I don't need to add anything to my themes, 00:14:50.080 --> 00:14:53.279 because the default faces for Corfu @@ -666,23 +712,28 @@ because the default faces for Corfu 00:14:53.280 --> 00:14:58.319 adapt quite well to most of the themes. -00:14:58.320 --> 00:15:02.839 -So if I go back to my checklist decently remax yes +NOTE My check-list + +00:14:58.320 --> 00:15:01.478 +So if I go back to my checklist, + +00:15:01.479 --> 00:15:02.839 +decently new Emacs, yes, 00:15:02.840 --> 00:15:06.559 -compiled the one you'll see +compiled. The one you'll see 00:15:06.560 --> 00:15:09.239 -for the for in the demo I'm doing is a master +in the demo I'm doing is a master 00:15:09.240 --> 00:15:11.999 compiled the day before yesterday 00:15:12.000 --> 00:15:15.199 -so and I don't need Corfu terminal there. +and I don't need corfu-terminal there. 00:15:15.200 --> 00:15:16.559 -I need your snippet, +I need yasnippet, 00:15:16.560 --> 00:15:20.159 and you're going to see that in a second @@ -694,25 +745,30 @@ with a couple of snippets that I can expand here. I don't want any reminiscence of a company in my setup, 00:15:27.480 --> 00:15:32.119 -and there's none. Well, actually, company kind is there +and there's none. Well, actually, :company-kind is there 00:15:32.120 --> 00:15:33.719 -you see the company there +you see the company there, 00:15:33.720 --> 00:15:39.559 -but it isn't if I buy companies strictly speaking +but it isn't defined by company strictly speaking, 00:15:39.560 --> 00:15:44.679 -and for I don't want I need Eglot integration +and for... I don't want... I need Eglot integration + +00:15:44.680 --> 00:15:48.583 +which I will also be showing you. -00:15:44.680 --> 00:15:50.400 -which I will also be showing you. Takeaways from all this, +NOTE Takeaways + +00:15:48.584 --> 00:15:50.400 +Takeaways from all this, 00:15:50.440 --> 00:15:55.279 if you accept the extra burden 00:15:55.280 --> 00:16:02.239 -of Corfu terminal for Emacs 30 or earlier Emacs 30s, +of corfu-terminal for Emacs 30 or earlier Emacs 30s, 00:16:02.240 --> 00:16:07.559 it's not too difficult to get this set up running. @@ -742,55 +798,54 @@ I've learned a lot about computational functions in the process, which is, something that is always nice to learn new things 00:16:40.440 --> 00:16:45.039 -and the Nerd Icons Corfu makes the +and the nerd-icons-corfu makes the... 00:16:45.040 --> 00:16:48.319 -at least at this point in time I might get tired of it +at least, at this point in time... I might get tired of it, 00:16:48.320 --> 00:16:50.399 -but at this point in time it makes +but at this point in time, it makes -00:16:50.400 --> 00:16:53.679 -a makes a very nice overall look +00:16:50.400 --> 00:16:58.039 +a very nice overall look and feel for Emacs. -00:16:53.680 --> 00:16:58.039 -and look and feel for for Emacs. +NOTE Requests (to whom it may concern) 00:16:58.040 --> 00:17:02.039 -requests to whom it may concern cape has nice features +Requests (to whom it may concern): cape has nice features 00:17:02.040 --> 00:17:06.279 -that maybe could make their way into emacs +that maybe could make their way into emacs. -00:17:06.280 --> 00:17:09.159 -i'm thinking basically about this cape super fun +00:17:06.280 --> 00:17:08.064 +I'm thinking basically about -00:17:09.160 --> 00:17:12.399 -uh super function super cape function functionality +00:17:08.065 --> 00:17:12.399 +this super cape functionality 00:17:12.400 --> 00:17:18.799 -which is very nice and overcomes the problem of linking +which is very nice, and overcomes the problem of linking, 00:17:18.800 --> 00:17:22.239 -and this exclusive and all this kind of things +and this :exclusive and all this kind of things 00:17:22.240 --> 00:17:26.479 that we have currently in Corfu 00:17:26.480 --> 00:17:28.439 -with the computational point functions. +with the completion-at-point functions. 00:17:28.440 --> 00:17:32.959 -Corfu is also really nice to have and it's not too big +Corfu is also really nice to have, and it's not too big. 00:17:32.960 --> 00:17:35.559 -so is there any possibility +So is there any possibility 00:17:35.560 --> 00:17:40.079 that it makes its way into Emacs? 00:17:40.080 --> 00:17:42.399 -Please keep Yarn Snippet alive. +Please keep yasnippet alive. 00:17:42.400 --> 00:17:48.559 I'm not saying here that my pull request should be there, @@ -799,43 +854,45 @@ I'm not saying here that my pull request should be there, but it would be nice if someone took a look 00:17:51.560 --> 00:17:57.399 -and made it part of Yarn Snippet. +and made it part of Yasnippet. 00:17:57.400 --> 00:18:01.799 -And PS, currently on master, +And P.S., currently on master, -00:18:01.800 --> 00:18:07.799 +00:18:01.800 --> 00:18:04.292 there's a lot of semantic highlighting going on, -00:18:07.800 --> 00:18:13.719 +00:18:04.293 --> 00:18:07.125 which is very, very nice. No criticism on that. -00:18:13.720 --> 00:18:19.639 -but you may need to add to your snippet hook +00:18:07.126 --> 00:18:12.417 +But you may need to add to your snippet hook -00:18:19.640 --> 00:18:25.039 -this simple local value for ElixirFontify semantically +00:18:12.418 --> 00:18:25.039 +this simple local value for elisp-fontify-semantically, 00:18:25.040 --> 00:18:30.719 -because at least in my case I felt that +because at least in my case, I felt that 00:18:30.720 --> 00:18:32.439 -the face were a bit too pushy +the faces were a bit too pushy, 00:18:32.440 --> 00:18:37.280 -so I had to make a snippet mode +so I had to make the snippet mode -00:18:37.334 --> 00:18:41.279 +00:18:37.334 --> 00:18:43.579 use the old Emacs Lisp fontification. -00:18:41.280 --> 00:18:46.279 -That's what we want to talk about. +00:18:43.580 --> 00:18:46.279 +This would be my talk. 00:18:46.280 --> 00:18:54.999 Any initial reactions to this? There's a question here. +NOTE 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 + 00:18:55.000 --> 00:18:59.159 -Someone asked, did you try Jasnepet Cup? +Someone asked, did you try yasnippet-capf? 00:18:59.160 --> 00:19:05.959 If so, what did you miss from this approach? I tried that. @@ -843,10 +900,10 @@ If so, what did you miss from this approach? I tried that. 00:19:05.960 --> 00:19:11.239 And it's not that I missed anything. -00:19:11.240 --> 00:19:16.519 +00:19:11.240 --> 00:19:15.839 It was more or less that I wanted to do it myself. -00:19:16.520 --> 00:19:24.159 +00:19:15.840 --> 00:19:24.159 So I wanted to see what was behind it. That's my answer. 00:19:24.160 --> 00:19:26.679 @@ -858,6 +915,8 @@ but I try to keep learning. So, this was a nice objective 00:19:31.720 --> 00:19:40.159 to learn a bit more about Emacs. And now, just a second. +NOTE A small demo + 00:19:40.160 --> 00:19:44.879 Now, a small demo. This is the interaction. @@ -880,7 +939,7 @@ And what you see here is that I have two snippets appearing and then some variables. 00:20:04.320 --> 00:20:09.879 -So, I could go for def one or if I want a key map, for def key map, +So, I could go for defun or if I want a key map, for def-keymap, 00:20:09.880 --> 00:20:11.479 which would be something like this. @@ -889,46 +948,49 @@ which would be something like this. And then when I press enter, I get directly into the map 00:20:18.320 --> 00:20:26.719 -and I could say like, Show off mob. +and I could say like, show off map. 00:20:26.720 --> 00:20:30.079 -Then it sets out directly a prefix T, +Then it sets out directly a :prefix t, 00:20:30.080 --> 00:20:35.039 which is something that I asked for in Emacs master. 00:20:35.040 --> 00:20:39.479 -So with prefix T, for those who prefix it true, +So with :prefix t, for those who prefix it true, 00:20:39.480 --> 00:20:41.399 for those who don't know it, -00:20:41.400 --> 00:20:46.799 -it makes integrating this into keymaps in use package much easier. +00:20:41.400 --> 00:20:49.042 +it makes integrating this into keymaps + +00:20:49.043 --> 00:20:52.125 +in use-package much easier. -00:20:46.800 --> 00:20:51.119 -So the next thing would be +00:20:52.126 --> 00:20:54.167 +So the next thing would be, -00:20:51.120 --> 00:20:55.999 -I would like to write a description +00:20:54.168 --> 00:20:56.500 +I would like to write a description, -00:20:56.000 --> 00:21:04.999 -like for example a cool show off team up +00:20:56.501 --> 00:21:04.999 +like, for example, a cool show-off keymap, 00:21:05.000 --> 00:21:08.599 -and then my keys are my functions and that would be it +and then my keys are my functions, and that would be it. 00:21:08.600 --> 00:21:15.839 -but you also have like but also have like this define function +Of course, you also have like this define function. 00:21:15.840 --> 00:21:21.679 -and of course you can say that's nice but there's no +And of course you can say, that's nice, 00:21:21.680 --> 00:21:23.799 but you're not showing the integration 00:21:23.800 --> 00:21:25.439 -with Eglot and you're right. +with Eglot, and you're right. 00:21:25.440 --> 00:21:30.279 So I'm going just to open up a small program @@ -937,16 +999,16 @@ So I'm going just to open up a small program that I'm currently developing in Python. 00:21:33.320 --> 00:21:38.239 -X is a tool to do things in MP3. +This is a tool to do things in MP3. 00:21:38.240 --> 00:21:42.279 -And here I would have like all these things. +And here I would have, like, all these things. 00:21:42.280 --> 00:21:45.359 As you see here in the bottom, 00:21:45.360 --> 00:21:49.079 -service running, pilot is local, eglot is active. +server is running, file is local, eglot is active. 00:21:49.080 --> 00:21:57.919 So I have my eglot stop and then I go down. @@ -960,71 +1022,71 @@ I would go like for it. I would go like add flag. 00:22:08.800 --> 00:22:13.759 For example, I would add a flag -00:22:13.760 --> 00:22:21.759 +00:22:13.760 --> 00:22:27.859 and I would get a new flag to add here. -00:22:21.760 --> 00:22:33.119 -Oops. Of course, this is integrated into Eagle Lord. +00:22:27.860 --> 00:22:33.119 +Oops. Of course, this is integrated into Eglot, 00:22:33.120 --> 00:22:42.759 -So I'm getting your information about what I have. +so I'm getting your information about what I have. 00:22:42.760 --> 00:22:52.359 -I don't have OS, so I would need to import here, +I could... I don't have os, so I would need to import here, 00:22:52.360 --> 00:22:59.279 -but I can go up just to see +but I can go up just to see... 00:22:59.280 --> 00:23:01.759 -if I would like to, for example, +If I would like to, for example, 00:23:01.760 --> 00:23:11.879 -create a new a regular expression +create a new regular expression, 00:23:11.880 --> 00:23:15.439 -I'm getting this information that you see right now on call +I'm getting this information that you see right now on call. 00:23:15.440 --> 00:23:17.359 -for I'm getting that from Eglot +I'm getting that from Eglot. 00:23:17.360 --> 00:23:18.919 -so you see there's the integration +So you see there's the integration 00:23:18.920 --> 00:23:20.839 -with with Eglot too in Python +with Eglot too in Python. 00:23:20.840 --> 00:23:23.559 -I have Eglot and as you've seen +I have Eglot, and as you've seen 00:23:23.560 --> 00:23:30.239 -I also have the and all these are snippets fine +I also have the... and all these are snippets. Fine. 00:23:30.240 --> 00:23:38.199 -more reactions and questions +More reactions and questions? 00:23:38.200 --> 00:23:54.239 Because that would be my show off here. -00:23:54.240 --> 00:23:56.759 +00:23:54.240 --> 00:24:09.379 Any questions? Any more questions on the pad? -00:23:56.760 --> 00:24:11.479 -but anyhow i'm going to try +00:24:09.380 --> 00:24:11.479 +but anyhow I'm going to try, 00:24:11.480 --> 00:24:13.239 -i'm going to try your snippet too +I'm going to try yasnippet too 00:24:13.240 --> 00:24:16.279 -and i'm going to be answering this question more +and I'm going to be answering this question more 00:24:16.280 --> 00:24:21.079 yeah time is good okay fine 00:24:21.080 --> 00:24:30.039 -so I would be done if there's no more reactions +so I would be done if there's no more reactions... 00:24:30.040 --> 00:24:33.239 -thank you so much You're welcome. +Thank you so much. You're welcome. 00:24:33.240 --> 00:24:34.919 If you have any other questions, folks, @@ -1045,34 +1107,36 @@ Oh, I see some questions coming in now. You may go ahead if you like. 00:24:46.200 --> 00:24:51.879 -okay fine uh what uh there's someone asking +Okay, fine. There's someone asking: + +NOTE Q: Do special characters in yasnippets work well too? example <FD ? 00:24:51.880 --> 00:24:57.079 -what do special characters in your snippets work well too +Do special characters in your snippets work well too? 00:24:57.080 --> 00:25:02.479 -what kind of i don't use special characters in the key name +what kind of... I don't use special characters in the key name, 00:25:02.480 --> 00:25:05.199 -so in this case everything works quite nicely +so in this case everything works quite nicely, 00:25:05.200 --> 00:25:11.359 -and then i'm passing i'm passing the control to your snippets +and then I'm passing, I'm passing the control to yasnippet, 00:25:11.360 --> 00:25:13.679 -so if there's any problem in your snippets +so if there's any problem in yasnippet 00:25:13.680 --> 00:25:15.359 -with uh special characters +with special characters, 00:25:15.360 --> 00:25:24.399 -that i don't know I don't use that as a key. +that, I don't know. I don't use that as a key. 00:25:24.400 --> 00:25:30.519 I'm just using for key names. 00:25:30.520 --> 00:25:38.399 -I normally use a, I only use letters, but that should work. +I normally use a... I only use letters, but that should work. 00:25:38.400 --> 00:25:43.959 I mean, let's, uh, let's give it a trial. @@ -1081,51 +1145,48 @@ I mean, let's, uh, let's give it a trial. Let's kill here. Yes. I don't want, I don't want to touch this. 00:25:58.040 --> 00:26:01.039 -Ugh. let's go into this one uh +Ugh. Let's go into this one. 00:26:01.040 --> 00:26:06.920 -let's say I'm going to define this for example like this +Let's say I'm going to define this, for example, like this, 00:26:06.959 --> 00:26:10.919 -and I'm going to create a new snippet +and I'm going to create a new snippet. 00:26:10.920 --> 00:26:15.359 I'm going to create a new snippet 00:26:15.360 --> 00:26:18.119 -and use this is for example when you look at this - -00:26:18.120 --> 00:26:20.599 -if you if you have the the venue uh the new +and use this. For example, when you look at this, -00:26:20.600 --> 00:26:26.159 -sorry the new way of the the new emacs uh +00:26:18.120 --> 00:26:31.042 +if you have the new way of the new Emacs -00:26:26.160 --> 00:26:31.639 -semantical highlighting working +00:26:31.043 --> 00:26:37.667 +semantical highlighting working, -00:26:31.640 --> 00:26:39.199 -this would be quite cramped this is why i'm using +00:26:37.668 --> 00:26:40.625 +this would be quite cramped. This is why I'm using, -00:26:39.200 --> 00:26:43.039 -this is why i said uh the snippet the +00:26:40.626 --> 00:26:44.899 +this is why I said the snippet, the... -00:26:43.040 --> 00:26:49.039 -so is this more or less what you're talking about +00:26:44.900 --> 00:26:55.139 +So is this more or less what you're talking about? -00:26:49.040 --> 00:27:01.479 +00:26:55.140 --> 00:27:12.579 This is what you're talking about. Snippet. Save the snippet. -00:27:01.480 --> 00:27:15.479 -So I'm going to... Snippet, load and put window. +00:27:12.580 --> 00:27:15.479 +Snippet, load and put window. 00:27:15.480 --> 00:27:21.279 Enable interaction mode. Yes, I'm going to save. -00:27:21.280 --> 00:27:24.439 -And I'm going to save that as FD test. on the file. +00:27:21.280 --> 00:27:31.059 +And I'm going to save that as fd test in the file. -00:27:24.440 --> 00:27:41.479 +00:27:31.060 --> 00:27:41.479 No, I'm going to save this. Load. Load input window. 00:27:41.480 --> 00:27:53.679 @@ -1135,16 +1196,19 @@ I'm going to put this in Emacs Lisp mode. I want to save it. No. I'm going to write that directly into Emacs Lisp mode. 00:28:27.360 --> 00:28:30.639 -going to go back into scratch buffer +Going to go back into scratch buffer, 00:28:30.640 --> 00:28:43.079 -and here I have it and we have it here but anyhow +and here I have it. We have it here. But anyhow... + +00:28:43.080 --> 00:28:46.934 +And I'm just going to try to see, if I feel like... -00:28:43.080 --> 00:28:52.079 -and I'm just going to try to see if I feel like empty of course +00:28:46.935 --> 00:28:52.663 +Empty? Of course, there's only one. -00:28:52.080 --> 00:28:58.839 -there's only one it will not show in Corfu, +00:28:52.664 --> 00:28:58.839 +It will not show in Corfu. 00:28:58.840 --> 00:29:01.519 but I mean, I don't have any problems @@ -1185,17 +1249,17 @@ And I'm going to go and write this 00:30:08.800 --> 00:30:16.719 into, with a second, fine. -00:30:16.720 --> 00:30:19.919 +00:30:16.720 --> 00:30:18.179 And now I need to quit here, sorry. -00:30:19.920 --> 00:30:26.639 +00:30:18.180 --> 00:30:26.639 And I'm going to come back in a second with another remark. 00:30:26.640 --> 00:30:31.559 Well, I'm bringing back and now let's see. 00:30:31.560 --> 00:30:34.839 -Let's see what we have in your snippets. +Let's see what we have in yasnippet. 00:30:34.840 --> 00:30:44.159 It's not there. Why not? Just a second. Let's see if I go. @@ -1206,20 +1270,23 @@ I don't know if it matters that the name was 00:30:47.840 --> 00:30:52.599 that didn't have the characters in the beginning. -00:30:52.600 --> 00:31:03.159 +00:30:52.600 --> 00:31:05.699 Just a second. I think I know what is happening here. -00:31:03.160 --> 00:31:21.439 -Do I have here? I have them. I'm going to clean. +00:31:05.700 --> 00:31:21.439 +Do I have them? I'm going to clean. 00:31:21.440 --> 00:31:28.879 -Oh, you're back in your home directories. Why? +[Sacha]: Oh, you're back in your home directories is why. -00:31:28.880 --> 00:31:35.879 -CD dash to get back in. Yeah. That's right. +00:31:28.880 --> 00:31:35.004 +cd - to get back in. + +00:31:35.005 --> 00:31:35.879 +Yeah. That's right. 00:31:35.880 --> 00:31:37.799 -So you see how the name also has +So you see how the name also has... 00:31:37.800 --> 00:31:39.319 it doesn't have the same as the keys. @@ -1227,10 +1294,13 @@ it doesn't have the same as the keys. 00:31:39.320 --> 00:31:41.039 I don't know if that affects what shows up. -00:31:41.040 --> 00:31:49.399 -Yeah, we we can try that. That's a quick one. This is my. +00:31:41.040 --> 00:31:44.880 +[Pedro]: Yeah, we we can try that. + +00:31:44.881 --> 00:31:49.999 +That's a quick one. This is my... -00:31:49.400 --> 00:31:51.279 +00:31:50.000 --> 00:31:51.279 Fine, now that I have this, 00:31:51.280 --> 00:31:55.359 @@ -1243,25 +1313,33 @@ They both seem to be the same now and I don't know if that affects, but anyhow, let's try it. 00:32:03.080 --> 00:32:07.679 -I go and then I look at the AR snippets, if it's there. +I go and then I look at the yasnippet, if it's there. -00:32:07.680 --> 00:32:11.879 -Yes, it is. Yeah, it's there. +00:32:07.680 --> 00:32:09.956 +Yes, it is. + +00:32:09.957 --> 00:32:11.879 +[Sacha]: Yeah, it's there. 00:32:11.880 --> 00:32:18.559 -And then if I say there, there you are. Oh, look at that. +[Pedro]: And then if I say there, there you are. Oh, look at that. + +00:32:18.560 --> 00:32:22.167 +It doesn't seem to be affecting. -00:32:18.560 --> 00:32:24.159 -It doesn't seem to be affecting. Fantastic. +00:32:22.168 --> 00:32:24.159 +[Sacha]: Fantastic. 00:32:24.160 --> 00:32:32.119 -And by the way, it is there. +[Pedro]: And by the way, it is there. + +NOTE Emacs Lisp 00:32:32.120 --> 00:32:33.999 -Yeah, I really should spend time +[Sacha]: Yeah, I really should spend time 00:32:34.000 --> 00:32:36.599 -getting more templates set up with Snippet. +getting more templates set up with yasnippet. 00:32:36.600 --> 00:32:37.639 I really love the fact that @@ -1270,7 +1348,7 @@ I really love the fact that you can evaluate Emacs Lisp in it too. 00:32:40.400 --> 00:32:43.399 -Yeah, I mean, just to make it bigger, +[Pedro]: Yeah, I mean, just to make it bigger, 00:32:43.400 --> 00:32:51.359 try that because if I go into my, for example, @@ -1284,13 +1362,13 @@ and in my org mode, I go to the article, 00:32:59.440 --> 00:33:03.319 which is one of the big ones. -00:33:03.320 --> 00:33:06.199 +00:33:03.320 --> 00:33:05.119 I have things like, for example, -00:33:06.200 --> 00:33:10.719 +00:33:05.120 --> 00:33:09.199 I defined a couple of functions here to do if it's empty, -00:33:10.720 --> 00:33:16.399 +00:33:09.200 --> 00:33:16.399 if that is empty, just add a white space. 00:33:16.400 --> 00:33:19.599 @@ -1300,28 +1378,28 @@ If one is empty, add a white space. add a white space here so it becomes a comment. 00:33:23.320 --> 00:33:27.279 -I have functions for to do more things on that +I have functions to do more things on that, 00:33:27.280 --> 00:33:29.799 -and I also have like menus to see +and I also have menus to see -00:33:29.800 --> 00:33:33.599 +00:33:29.800 --> 00:33:31.439 what language I want to choose for -00:33:33.600 --> 00:33:37.079 -for my spell checking and so on so +00:33:31.440 --> 00:33:33.250 +my spell checking and so on. -00:33:37.080 --> 00:33:40.319 -and that's all that's as you see +00:33:33.251 --> 00:33:35.480 +And that's all... As you see, -00:33:40.320 --> 00:33:41.959 -this is a Lisp being evaluated +00:33:35.481 --> 00:33:39.417 +this is Lisp being evaluated. -00:33:41.960 --> 00:33:45.119 -so yes do I really encourage you +00:33:39.418 --> 00:33:45.119 +So yes, do. I really encourage you 00:33:45.120 --> 00:33:46.519 -I've also heard people use it, +[Sacha]: I've also heard people use it, 00:33:46.520 --> 00:33:47.799 like, especially if they're working @@ -1336,10 +1414,10 @@ so they can just have the syntax for the different languages 00:33:54.360 --> 00:33:58.239 -be condensed into a consistent abbreviation. Yeah. +be condensed into a consistent abbreviation. 00:33:58.240 --> 00:34:01.319 -And look, this is my article. I have another. +[Pedro]: Yeah. And look, this is my article. I have another. 00:34:01.320 --> 00:34:07.799 This is when I'm writing articles. I have another one. @@ -1360,7 +1438,7 @@ and you don't have to type it by hand. So, it's really, really nice. 00:34:22.880 --> 00:34:25.959 -Hmm, I think it might be nice to have +[Sacha]: Hmm, I think it might be nice to have 00:34:25.960 --> 00:34:28.079 a future Emacs carnival, you know, @@ -1372,7 +1450,7 @@ shared blogging theme thing be around having people share their snippets. 00:34:33.360 --> 00:34:39.359 -No snippets and other things like for example, +[Pedro]: Yasnippets and other things. Like for example, 00:34:39.360 --> 00:34:41.319 this is something stupid. @@ -1386,10 +1464,10 @@ And of course, there you see, 00:34:48.640 --> 00:34:51.439 I have also, this is also with, -00:34:51.440 --> 00:34:54.519 +00:34:51.440 --> 00:34:55.792 this is my way of switching buffers, -00:34:54.520 --> 00:34:58.159 +00:34:55.793 --> 00:34:58.159 which is with the shift control and tab, 00:34:58.160 --> 00:35:00.559 @@ -1401,26 +1479,29 @@ and then when I'm in a family, 00:35:02.520 --> 00:35:06.999 I can go and switch with control tab between the different, -00:35:07.000 --> 00:35:15.599 +00:35:07.000 --> 00:35:13.659 I'm using tab line by the way. I'm not using the other one. -00:35:15.600 --> 00:35:20.839 +00:35:13.660 --> 00:35:20.839 I'm using the old plain tab line with my themes. 00:35:20.840 --> 00:35:23.519 So that's more or less everything. 00:35:23.520 --> 00:35:26.519 -Thank you for the peek into your workflow. +[Sacha]: Thank you for the peek into your workflow. 00:35:26.520 --> 00:35:30.759 I will work on getting the recordings for the live talks -00:35:30.760 --> 00:35:33.919 +00:35:30.760 --> 00:35:34.458 sorted out at some point very soon. -00:35:33.920 --> 00:35:37.839 +00:35:34.459 --> 00:35:37.084 I might even be able to get them out next week. -00:35:37.840 --> 00:35:44.920 -So thanks again. All right. Have a nice supper. Same to you. +00:35:37.085 --> 00:35:43.667 +So thanks again. All right. Have a nice supper. + +00:35:43.668 --> 00:35:44.920 +[Pedro]: Same to you. diff --git a/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt index f35c2d27..849f7619 100644 --- a/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt +++ b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt @@ -1,5 +1,7 @@ WEBVTT +NOTE Q: My biggest question with AI code editors trying to integrate with Emacs is -- are the AI code editors able to read unsaved buffers and not just saved files? + 00:00:00.000 --> 00:00:01.759 So let's, I'm just going to answer @@ -165,6 +167,8 @@ But yes, that's what I think about. 00:02:16.600 --> 00:02:20.319 that interesting questions about unsaved buffers. +NOTE Q: Personally I don't agree with the comment you made about VS Code usage dying out because I see companies/products pushing for tightly-integrated VS-Code agents/products like Windsurf. Thoughts? + 00:02:20.320 --> 00:02:22.239 The next question is, @@ -172,7 +176,7 @@ The next question is, I don't agree with the comment you made 00:02:23.800 --> 00:02:25.199 -about VS code usage dying out +about VS Code usage dying out 00:02:25.200 --> 00:02:26.719 because I see companies and products @@ -264,6 +268,8 @@ I think it's gonna be the opposite, but I guess we'll see. 00:03:43.200 --> 00:03:47.759 Like, let's reconvene in a year and see what happens. +NOTE Q: Do you have any thoughts about the environmental cost of using LLMs - either the training of models we can download and use locally, or the larger, commercial models used from the cloud? + 00:03:47.760 --> 00:03:49.159 Uh, the 3rd question answer, @@ -408,6 +414,8 @@ So I think it's wise to be cautious, 00:06:06.120 --> 00:06:09.079 but I think it's okay, I think, at least for personal use. +NOTE Q: I must say, I liked your conclusion, but I differ insofar as you said that VS Code differ from Emacs because the former is not as easy to adapt as the latter. Why should Microsoft not adapt VS Code as we adapt Emacs for the new era of coding? And why would VS Code be harder hit? Could you please elaborate on this point? + 00:06:09.080 --> 00:06:13.159 The next question is another, @@ -538,10 +546,10 @@ which people are really just using to edit code and if people find it less useful to edit code. 00:08:16.800 --> 00:08:20.919 -I think it's VS code will be harder hit than emails +I think it's VS Code will be harder hit than emails 00:08:20.920 --> 00:08:24.239 -because that's its whole like that's in the name +because that's its whole, like, that's in the name, 00:08:24.240 --> 00:08:25.559 like the whole reason for it @@ -556,7 +564,7 @@ So I think that it's it's vulnerable in a way that Emacs isn't 00:08:31.960 --> 00:08:34.519 -just because emacs is so very... +just because Emacs is so very... 00:08:34.520 --> 00:08:40.119 you know, it's, it could do so many things @@ -595,11 +603,13 @@ Is that touching on the point? Yeah, that's a great way to say it. 00:09:09.080 --> 00:09:12.439 -Thank you. Thank you, Colin. Yeah. +Thank you. Thank you, Corwin. Yeah. 00:09:12.440 --> 00:09:14.039 Thank you. Thank you for that question. +NOTE Q: Do you think that we are falling behind in productivity as Emacs users? Compared to all these VSCode forks that have 1000 buttons and textboxes everywhere (i.e. much richer UIs which are basically webpages). + 00:09:14.040 --> 00:09:18.759 Do you think we're falling behind in productivity as Emacs users @@ -774,6 +784,8 @@ I shouldn't be doing so much active listening. 00:12:12.280 --> 00:12:17.479 No, no, I appreciate your input. +NOTE Q: I've been using Claude Code extensively. I recently switched to Agent Shell with Claude Code. Have you tried it, what are your thoughts? + 00:12:17.480 --> 00:12:23.079 OK, next is I've been using Claude Code extensively. @@ -799,10 +811,10 @@ If Agent Shell did exist, I probably would have demoed it as well. 00:12:41.240 --> 00:12:45.359 -Agent Hell is great in the sense of it's +Agent shell is great in the sense of it's... 00:12:45.360 --> 00:12:53.719 -It does use comment, which is the way that I think all Emacs users +It does use comint, which is the way that I think all Emacs users 00:12:53.720 --> 00:12:57.039 would prefer to interact with something like Claude Code, @@ -853,13 +865,13 @@ It's progressing rapidly. But it's not as rich in functionality 00:13:37.480 --> 00:13:40.119 -as using quad code directly. +as using Claude Code directly. 00:13:40.120 --> 00:13:44.839 On the other hand, because it's letting Emacs be Emacs 00:13:44.840 --> 00:13:49.239 -and using comment, it's a much better experience +and using comint, it's a much better experience 00:13:49.240 --> 00:13:50.919 to actually give instructions. @@ -901,7 +913,7 @@ in order to me, I think there's kind of the sweet spot that I like. 00:14:23.520 --> 00:14:26.639 -Um, but HHL is a great step forward +Um, but agent-shell is a great step forward 00:14:26.640 --> 00:14:29.879 and I think it's, uh, it's quite good to use. @@ -909,6 +921,8 @@ and I think it's, uh, it's quite good to use. 00:14:29.880 --> 00:14:32.119 And I, I personally use it a lot. +NOTE Q: In terms of agent selection, what has your experience been with different agents, and have you had any success with hosting your own models and using open weights? + 00:14:32.120 --> 00:14:40.479 Um, OK, so in terms of, next question, @@ -937,7 +951,7 @@ I think Claude Code is, most people I know would say Claude Code is probably, 00:15:03.480 --> 00:15:07.479 -sorry, Cloud is probably the best for coding right now. +sorry, Claude is probably the best for coding right now. 00:15:07.480 --> 00:15:09.919 Gemini can be very hit and miss even with 3.0, @@ -1027,7 +1041,7 @@ just because they just have more horsepower, they can churn through those tokens a little quicker. 00:16:38.680 --> 00:16:44.719 -So, I'll just break in here to say, +[Corwin]: So, I'll just break in here to say, 00:16:44.720 --> 00:16:46.239 we've got about 7 minutes left @@ -1050,11 +1064,11 @@ to jump in and prep with the next speaker, 00:16:58.680 --> 00:17:00.359 but you'll be able to keep going -00:17:00.360 --> 00:17:02.599 +00:17:00.360 --> 00:17:04.119 as long as you have the steam for it. -00:17:02.600 --> 00:17:06.159 -Yeah, I think we have 3 questions. Yeah, thanks. +00:17:04.120 --> 00:17:06.159 +[Andrew]: Yeah, I think we have 3 questions. Yeah, thanks. 00:17:06.160 --> 00:17:08.239 I think we have 3 questions. @@ -1062,8 +1076,11 @@ I think we have 3 questions. 00:17:08.240 --> 00:17:09.719 Let's see if we can get through them -00:17:09.720 --> 00:17:17.359 -all in that time period. OK, this one is interesting talk. +00:17:09.720 --> 00:17:13.267 +all in that time period. + +00:17:13.268 --> 00:17:17.359 +OK, this one is interesting talk. 00:17:17.360 --> 00:17:20.439 I'll start by asking it for everything, but is it editing? @@ -1077,6 +1094,8 @@ So yes, let us all ask, but is it editing? 00:17:29.720 --> 00:17:33.439 All right. I can move on to the comment area. +NOTE Q: I'm reading angst in your thinking about AI/editing. What are you excited about? + 00:17:33.440 --> 00:17:40.319 I'm reading angst in your thinking about AI editing. @@ -1108,19 +1127,19 @@ And I think there's lots of opportunities, clever opportunities to do things 00:18:07.840 --> 00:18:11.079 -we couldn't have thought of Things that are useful, +we couldn't have thought of... Things that are useful, 00:18:11.080 --> 00:18:14.919 but in ways that are not super obvious to us, -00:18:14.920 --> 00:18:18.519 +00:18:14.920 --> 00:18:17.019 and I think I'm still excited -00:18:18.520 --> 00:18:23.839 +00:18:17.020 --> 00:18:22.939 about the possibilities of using them in ways that are super helpful -00:18:23.840 --> 00:18:29.319 -and different than. normal. I'll give you an example. +00:18:22.940 --> 00:18:29.319 +and different than normal. I'll give you an example. 00:18:29.320 --> 00:18:33.199 This is something that I intend to, I think, @@ -1159,7 +1178,7 @@ Yes. There are some smart people who remember this but I am not one of them. 00:19:11.200 --> 00:19:13.639 -And so I think like something like this is like you just type out, +And so I think, like, something like this is like, you just type out, 00:19:13.640 --> 00:19:17.279 find me this file, and it will substitute @@ -1174,7 +1193,7 @@ I think this is, there's a lot of little, little tweaks you could do like, you know, if you want the AI, 00:19:24.320 --> 00:19:26.679 -it could be there for you. And it will help you. +it could be there for you, and it will help you. 00:19:26.680 --> 00:19:27.559 And if you don't want it, @@ -1183,7 +1202,7 @@ And if you don't want it, it's not going to get in your way. 00:19:28.920 --> 00:19:30.639 -And I think this is where eMath can really shine. +And I think this is where Emacs can really shine. 00:19:30.640 --> 00:19:33.079 It can really take advantage of LLMs, @@ -1200,6 +1219,8 @@ So thank you for that great question. 00:19:43.920 --> 00:19:47.919 And then the final question. Yep. +NOTE Q: Why does it matter to have a richer UI? All that is left is basically writing and getting the results. + 00:19:47.920 --> 00:19:50.839 This final question is, why does it matter to have a richer UI? @@ -1216,7 +1237,7 @@ about Emacs not having a richer UI before, but I think it does matter a lot for all sorts of things. 00:20:03.160 --> 00:20:07.159 -It's hard to kind of explain succinctly +It's hard to kind of explain succinctly, 00:20:07.160 --> 00:20:08.519 because I'm talking about UI @@ -1225,28 +1246,28 @@ because I'm talking about UI and I'd have to show you things. 00:20:09.760 --> 00:20:14.599 -But it should be just something like oh I have an error +But it should be just something like, oh I have an error, 00:20:14.600 --> 00:20:15.799 and I'm using flymake and I'm, 00:20:15.800 --> 00:20:17.759 -I'm using the you know I have options +I'm using the... I have options 00:20:17.760 --> 00:20:19.839 where it'll show me the error in line 00:20:19.840 --> 00:20:22.639 -by like underlining things and having a little message, +by underlining things and having a little message, 00:20:22.640 --> 00:20:24.079 -but like, you know what that message +but like, you know what, that message 00:20:24.080 --> 00:20:26.399 -doesn't appear quite right, a lot of the times, +doesn't appear quite right a lot of the times. 00:20:26.400 --> 00:20:30.159 -or here's another one like. I program in Python a lot. +Or here's another one like. I program in Python a lot. 00:20:30.160 --> 00:20:33.479 And Python, it's super hard to program in @@ -1275,11 +1296,14 @@ And so you kind of have to hack it in. 00:20:47.760 --> 00:20:49.479 And there's lots of ways to mess it up. -00:20:49.480 --> 00:20:52.799 -And when editing, you'll find yourself messing this thing up. +00:20:49.480 --> 00:20:52.156 +And when editing, you'll find yourself -00:20:52.800 --> 00:20:57.159 -regularly. So it doesn't look quite clean. +00:20:52.157 --> 00:20:55.260 +messing this thing up regularly. + +00:20:55.261 --> 00:20:57.159 +So it doesn't look quite clean. 00:20:57.160 --> 00:20:59.079 And like, there's little artifacts, @@ -1290,17 +1314,17 @@ or, you know, there's little ways that it, 00:21:01.040 --> 00:21:02.359 it kind of gets things wrong, -00:21:02.360 --> 00:21:06.279 -or you can, you can get things wrong with it. +00:21:02.360 --> 00:21:03.939 +or you can get things wrong with it. -00:21:06.280 --> 00:21:10.039 +00:21:03.940 --> 00:21:07.519 So I think that, like, -00:21:10.040 --> 00:21:11.879 +00:21:07.520 --> 00:21:13.619 there's a lot of issues with that sort of thing. -00:21:11.880 --> 00:21:15.759 -And, and also, like, you know, +00:21:13.620 --> 00:21:15.759 +And also, like, you know, 00:21:15.760 --> 00:21:17.719 what if you want to do something like play a video inline, @@ -1308,23 +1332,23 @@ what if you want to do something like play a video inline, 00:21:17.720 --> 00:21:19.559 like, I don't know, you might should be able to do that, -00:21:19.560 --> 00:21:20.839 +00:21:19.560 --> 00:21:21.599 you might should be able to do anything. -00:21:20.840 --> 00:21:23.799 -But right now it just can't and I think +00:21:21.600 --> 00:21:23.799 +But right now, it just can't. I think 00:21:23.800 --> 00:21:24.999 -a lot of the reason as well +a lot of the reason as well... 00:21:25.000 --> 00:21:26.519 -we you know we wanted to be compatible +you know, we wanted to be compatible 00:21:26.520 --> 00:21:29.919 -with you know TRS 80 machines or something like that +with TRS 80 machines or something like that. 00:21:29.920 --> 00:21:33.159 -and it's this is important this really is important, +This is important, this really is important, 00:21:33.160 --> 00:21:34.719 but I hope there's some way @@ -1333,7 +1357,7 @@ but I hope there's some way that we can kind of eventually figure out 00:21:36.080 --> 00:21:39.279 -how to get the best of you know both compatibility and. +how to get the best of both compatibility and 00:21:39.280 --> 00:21:44.879 more modern UIs. So, you know, we can have more modern UIs @@ -1389,6 +1413,8 @@ that are working behind the scenes. 00:22:23.320 --> 00:22:25.079 So thank you all for putting this together. +NOTE Wrapping up + 00:22:25.080 --> 00:22:29.199 I'm so happy that we all are here. We care about Emacs. @@ -1405,22 +1431,22 @@ this really remarkable achievement. Like it's amazing that it exists. It continues to exist. 00:22:41.800 --> 00:22:42.999 -It hasn't got, it's hard. +It hasn't got... It's hard. 00:22:43.000 --> 00:22:45.159 It's like, really, there's a lot of work to go into it. 00:22:45.160 --> 00:22:47.559 -So I think let's all just appreciate everyone who, +So I think let's all just appreciate everyone 00:22:47.560 --> 00:22:50.679 -who like contributes and makes all of this possible. +who contributes and makes all of this possible. 00:22:50.680 --> 00:22:52.159 Cause it's, if you ever read 00:22:52.160 --> 00:22:53.279 -the Emacs Develop mailing list, +the emacs-devel mailing list, 00:22:53.280 --> 00:22:55.479 it's a lot of work, a lot of deep thinking, @@ -1443,8 +1469,11 @@ all the libraries, all the LLM stuff we mentioned before. 00:23:07.760 --> 00:23:09.839 You're all doing such a fantastic job. -00:23:09.840 --> 00:23:13.799 -It's exciting to be here. Thank you for your talk, Andrew. +00:23:09.840 --> 00:23:12.323 +It's exciting to be here. + +00:23:12.324 --> 00:23:13.799 +[Corwin]: Thank you for your talk, Andrew. 00:23:13.800 --> 00:23:16.159 It's been just fascinating. @@ -1455,6 +1484,8 @@ If you don't mind, I'd love to jump 00:23:19.760 --> 00:23:23.879 right over to the last question. OK, let's do that. +NOTE Q: I have 45+ years editing, programming. I'm not sure I can think about things without thinking of buffers, editors etc. Is this a handicap/should we just have people with no experience with code learn to prompt? + 00:23:23.880 --> 00:23:27.599 It says, I have 45 plus years editing programming. @@ -1474,7 +1505,7 @@ Should we have people with no experience with code learning to prompt? 00:23:35.320 --> 00:23:38.799 -Well, this is something I do have a strong opinion about. +[Andrew]: Well, this is something I do have a strong opinion about. 00:23:38.800 --> 00:23:42.159 I feel like I do not want to see people that have no experience @@ -1522,7 +1553,7 @@ Software engineering is making sure everything is scalable and all sorts of things that it's unlikely, 00:24:19.600 --> 00:24:21.759 -I think, that an LM is going to get right. +I think, that an LLM is going to get right. 00:24:21.760 --> 00:24:25.279 And I've seen a lot of bad cases @@ -1531,13 +1562,13 @@ And I've seen a lot of bad cases where people who don't understand code 00:24:27.200 --> 00:24:31.159 -are doing things and it's not working well +are doing things and it's not working well, 00:24:31.160 --> 00:24:33.239 because they don't understand 00:24:33.240 --> 00:24:35.279 -some of the some of the complexities +some of the complexities 00:24:35.280 --> 00:24:36.959 or some of the concerns that that you might have @@ -1581,11 +1612,8 @@ not 45 years, but a lot. And, and I think that it's those, 00:25:13.080 --> 00:25:14.839 those years of experience will only help you. -00:25:14.840 --> 00:25:16.919 -And I think it's, it's, it's a great, - -00:25:16.920 --> 00:25:19.639 -it's great to kind of dip your toes in the water +00:25:14.840 --> 00:25:19.639 +And I think it's great to dip your toes in the water 00:25:19.640 --> 00:25:20.732 and see what you can do. diff --git a/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main--chapters.vtt b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main--chapters.vtt new file mode 100644 index 00000000..e7ff6eec --- /dev/null +++ b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main--chapters.vtt @@ -0,0 +1,41 @@ +WEBVTT + + +00:00:00.000 --> 00:01:05.000 +Introduction + +00:01:05.000 --> 00:02:18.000 +The main themes of this video + +00:02:18.000 --> 00:02:54.000 +Inner views of Emacs objects + +00:02:54.000 --> 00:03:35.000 +Older Emacses + +00:03:35.000 --> 00:05:30.000 +Newer Emacses + +00:05:30.000 --> 00:06:41.000 +Help buttons + +00:06:41.000 --> 00:09:34.000 +"Anyone can learn Lisp in one day" + +00:09:34.000 --> 00:12:56.000 +Lambdas for beginners broken + +00:12:59.302 --> 00:17:29.119 +Demo + +00:17:29.120 --> 00:21:52.839 +Printing something in different ways for lambdas + +00:21:52.840 --> 00:22:42.159 +Exploring buttons + +00:22:42.160 --> 00:24:05.799 +Some design decisions behind EEV + +00:24:05.800 --> 00:25:22.520 +Tests diff --git a/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt index e461b1f1..3acf1d66 100644 --- a/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt +++ b/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt @@ -2,8 +2,52 @@ WEBVTT Kind: captions Language: en-GB -00:00:54.000 --> 00:00:55.000 - +NOTE Introduction + +00:00:00.000 --> 00:00:02.359 +Hi, my name is Eduardo Ochs, + +00:00:02.360 --> 00:00:06.639 +and this is my video for the EmacsConf 2025. + +00:00:06.640 --> 00:00:09.799 +Its title is Some Problems of Modernizing Emacs, + +00:00:09.800 --> 00:00:12.839 +and that is the same title as a video + +00:00:12.840 --> 00:00:16.199 +that I tried to record in March. + +00:00:16.200 --> 00:00:19.879 +But my video from March had a good "beginning" and a bad "rest", + +00:00:19.880 --> 00:00:23.759 +and I thought, I can't release that because the rest is very bad. + +00:00:23.760 --> 00:00:27.919 +I need to replace... to re-record the last part of the video. + +00:00:27.920 --> 00:00:29.759 +But I never did that. + +00:00:29.760 --> 00:00:33.199 +So this video is going to be the first 12 minutes + +00:00:33.200 --> 00:00:37.959 +of that other video, with another ending. + +00:00:37.960 --> 00:00:41.439 +And in this other ending, I'm going to show some things + +00:00:41.440 --> 00:00:46.639 +that are very easy to test. And, if people are interested, + +00:00:46.640 --> 00:00:51.799 +then the rest of the old video will make more sense. + +00:00:51.800 --> 00:00:55.059 +Anyway, let me start. 00:00:55.000 --> 00:00:57.000 Hi! My name is Eduardo Ochs. I'm the @@ -17,6 +61,8 @@ the title of this video is 00:01:03.000 --> 00:01:05.000 "Some problems of modernizing Emacs". +NOTE The main themes of this video + 00:01:05.000 --> 00:01:08.000 Here is a summary of the main themes @@ -78,11 +124,13 @@ I will also show how to display better "inner views" of Emacs objects... 00:02:13.000 --> 00:02:16.000 -I'm going to Define what is an inner view, +I'm going to define what is an inner view, 00:02:16.000 --> 00:02:18.000 of course. +NOTE Inner views of Emacs objects + 00:02:18.000 --> 00:02:20.000 The main trick is that we are going @@ -90,13 +138,13 @@ The main trick is that we are going to use one of the ways of displaying 00:02:24.000 --> 00:02:29.000 -internal objects, that is the `cl-print' +internal objects, that is the `cl-print` 00:02:29.000 --> 00:02:32.000 family of functions, for example, 00:02:32.000 --> 00:02:35.000 -`cl-prin1-to-string', and here are some +`cl-prin1-to-string`, and here are some 00:02:35.000 --> 00:02:37.000 examples of the kind of output that we @@ -108,16 +156,18 @@ are going to see... for example, if we run these two lines 00:02:44.000 --> 00:02:47.000 -here the first line defines a function `foo' +here the first line defines a function `foo` 00:02:47.000 --> 00:02:52.000 -and the second line sets `o' to the +and the second line sets `o` to the 00:02:52.000 --> 00:02:54.000 -internal view of the definition of `foo'. +internal view of the definition of `foo`. + +NOTE Older Emacses 00:02:54.000 --> 00:02:59.000 -In older Emacses `o' would be just a +In older Emacses `o` would be just a 00:02:59.000 --> 00:03:02.000 list that looks... that would look very @@ -129,7 +179,7 @@ similar to this line here... but in newer Emacses the result of this - I mean, the 00:03:09.000 --> 00:03:12.000 -the contents of `o' is this thing here, +the contents of `o` is this thing here, 00:03:12.000 --> 00:03:15.000 that looks quite different @@ -144,10 +194,10 @@ So, in older Emacses the contents of the 00:03:25.000 --> 00:03:28.000 -function cell of `o'... +function cell of `o`... 00:03:28.000 --> 00:03:30.000 -sorry, of the function cell of `foo', +sorry, of the function cell of `foo`, 00:03:30.000 --> 00:03:32.000 would be an "old-style lambda", @@ -155,6 +205,8 @@ would be an "old-style lambda", 00:03:32.000 --> 00:03:35.000 that would be just a list like this... +NOTE Newer Emacses + 00:03:35.000 --> 00:03:39.000 and in newer Emacses uh the contents of O would @@ -195,7 +247,7 @@ printed representation is this one, that is generated by a family of functions with 00:04:07.000 --> 00:04:09.000 -names like `prin1'... +names like `prin1`... 00:04:09.000 --> 00:04:13.000 and the second semicanonical printed @@ -210,16 +262,16 @@ it looks like a list... it looks somewhat like this definition 00:04:23.000 --> 00:04:27.000 -of `foo' here, but it has this +of `foo` here, but it has this 00:04:27.000 --> 00:04:29.000 -`:dynbind' symbol here... +`:dynbind` symbol here... 00:04:29.000 --> 00:04:32.000 and it turns out that when we use 00:04:32.000 --> 00:04:35.000 -the `cl-print' family of functions we can +the `cl-print` family of functions we can 00:04:35.000 --> 00:04:37.000 reconfigure how things are printed... @@ -237,7 +289,7 @@ and one of the ways is going to be like this. 00:04:52.000 --> 00:04:56.000 -We can also use the `cl-print' +We can also use the `cl-print` 00:04:56.000 --> 00:04:59.000 functions with my indentation tricks to @@ -258,7 +310,7 @@ This is what Emacs considers as being the definition of the type 00:05:16.000 --> 00:05:18.000 -`cl-structure-class', +`cl-structure-class`, 00:05:18.000 --> 00:05:21.000 class and it is this big thing here. @@ -267,10 +319,12 @@ class and it is this big thing here. I edited it very lightly... 00:05:24.000 --> 00:05:30.000 -I just uh deleted some line breaks here. +I just deleted some line breaks here. + +NOTE Help buttons 00:05:30.000 --> 00:05:33.000 -And another thing that I want to to +And another thing that I want to 00:05:33.000 --> 00:05:35.000 explain is that Emacs @@ -306,10 +360,10 @@ this type here, that we just saw in its internal view here... 00:06:00.000 --> 00:06:02.000 -we can run either `describe-type' +we can run either `describe-type` 00:06:02.000 --> 00:06:04.000 -or my variant of `describe-type', +or my variant of `describe-type`, 00:06:04.000 --> 00:06:07.000 and we get a help buffer @@ -353,6 +407,8 @@ and what I'm trying to do to 00:06:37.000 --> 00:06:41.000 overcome these problems... +NOTE "Anyone can learn Lisp in one day" + 00:06:41.000 --> 00:06:43.000 One of my slogans in this video @@ -423,7 +479,7 @@ and another one is its "value as a function"... and if we run this we store 42 00:08:02.000 --> 00:08:07.000 -in the "value cell" of the symbol `foo', and +in the "value cell" of the symbol `foo`, and 00:08:07.000 --> 00:08:11.000 if we run this defun here it stores a @@ -432,7 +488,7 @@ if we run this defun here it stores a certain anonymous function in the 00:08:14.000 --> 00:08:18.000 -"function cell" of the symbol `foo'... +"function cell" of the symbol `foo`... 00:08:18.000 --> 00:08:22.000 and in Emacs, until some time ago @@ -483,13 +539,13 @@ this expression here, (foo foo)... Emacs would do this: it would 00:09:04.000 --> 00:09:06.000 -replace the first `foo' by this +replace the first `foo` by this 00:09:06.000 --> 00:09:09.000 anonymous function here, it would replace 00:09:09.000 --> 00:09:11.000 -the second `foo' by the value of `foo' as a +the second `foo` by the value of `foo` as a 00:09:11.000 --> 00:09:13.000 variable, that is 42, @@ -515,6 +571,8 @@ Let me show... let me talk 00:09:30.000 --> 00:09:34.000 a bit more about why... +NOTE Lambdas for beginners broken + 00:09:34.000 --> 00:09:36.000 the title of this slide is @@ -624,7 +682,7 @@ open black boxes like this... they could try to see what was in the 00:11:20.000 --> 00:11:24.000 -function cell of the symbol `foo'... +function cell of the symbol `foo`... 00:11:24.000 --> 00:11:27.000 and they would see something elegant and @@ -650,29 +708,26 @@ very difficult to understand... 00:11:41.000 --> 00:11:44.000 and now our beginners are overwhelmed -00:11:44.000 --> 00:11:46.000 -instead of mind-blown. - -00:11:46.000 --> 00:11:48.000 -Note that I said "black box" here. +00:11:44.000 --> 00:11:48.000 +instead of mind-blown. Note that I said "black box" here. 00:11:48.000 --> 00:11:52.000 Let me explain the term. 00:11:52.000 --> 00:11:57.000 -We can open what's inside of `foo'... +We can open what's inside of `foo`... 00:11:57.000 --> 00:11:59.000 -we can open `foo' to see the contents of +we can open `foo` to see the contents of 00:11:59.000 --> 00:12:02.000 -the symbol `foo', and we can try to see +the symbol `foo`, and we can try to see 00:12:02.000 --> 00:12:06.000 what's in the function cell of the 00:12:06.000 --> 00:12:08.000 -symbol `foo'... +symbol `foo`... 00:12:08.000 --> 00:12:10.000 so we can open the box, but what we get @@ -722,6 +777,645 @@ as the ones that we had before. 00:12:54.000 --> 00:12:56.000 Anyway... -00:12:56.000 --> 00:20:38.000 - +NOTE Demo + +00:12:59.302 --> 00:13:00.599 +In the beginning of the video, + +00:13:00.600 --> 00:13:02.879 +I said that I was going to replace + +00:13:02.880 --> 00:13:06.359 +the second part of my video from March + +00:13:06.360 --> 00:13:08.799 +by something that was very easy to test. + +00:13:08.800 --> 00:13:11.839 +So this is a quick demo for the _very_ impatient. + +00:13:11.840 --> 00:13:16.919 +I'm recording this in December for the EmacsConf 2025. + +00:13:16.920 --> 00:13:18.999 +This is the demo that I'm going to present. + +00:13:19.000 --> 00:13:21.759 +The idea is that people can run the demo a first time + +00:13:21.760 --> 00:13:24.399 +just to check that everything works + +00:13:24.400 --> 00:13:27.559 +and to have a notion of how things look like, + +00:13:27.560 --> 00:13:29.239 +and then, in a second moment, + +00:13:29.240 --> 00:13:32.279 +they can rerun the demo more slowly + +00:13:32.280 --> 00:13:34.879 +to understand what each step does. + +00:13:34.880 --> 00:13:38.799 +So... we are in a file called "00-try-this"... + +00:13:38.800 --> 00:13:42.199 +and the idea is that we can execute most of this file + +00:13:42.200 --> 00:13:45.359 +just by typing `f8`​s in the right places. + +00:13:45.360 --> 00:13:47.479 +Remember that when we type `f8` + +00:13:47.480 --> 00:13:49.839 +on a line that starts with two red stars, + +00:13:49.840 --> 00:13:53.199 +eev treats that line as a comment. + +00:13:53.200 --> 00:13:58.007 +So I'm going to start here... Note that it says in the bottom + +00:13:58.008 --> 00:13:59.740 +of the screen that this is a comment. + +00:13:59.741 --> 00:14:09.879 +We are going to run this to download some files... + +00:14:09.880 --> 00:14:12.959 +Now the files are there... + +00:14:12.960 --> 00:14:17.319 +This `find-2a` here shows a certain file + +00:14:17.320 --> 00:14:19.159 +at the window at the right, + +00:14:19.160 --> 00:14:22.479 +but we don't need to pay attention to that. + +00:14:22.480 --> 00:14:24.199 +And this thing `load`​s that file. + +00:14:24.200 --> 00:14:27.519 +So when we load that file, it defines some functions here + +00:14:27.520 --> 00:14:29.799 +that are going to be used by the rest of the examples. + +00:14:29.800 --> 00:14:34.019 +Now we can run this thing here... Note that + +00:14:34.020 --> 00:14:34.879 +we just defined some functions + +00:14:34.880 --> 00:14:39.359 +and then we ran these functions here... `find-eoutput-2a`... + +00:14:39.360 --> 00:14:42.679 +and they show some things in the window at the right. + +00:14:42.680 --> 00:14:45.679 +These things are boring. + +00:14:45.680 --> 00:14:49.679 +When we run `adt-insert` with argument 42, + +00:14:49.680 --> 00:14:52.399 +it just shows a 42, in this way... + +00:14:52.400 --> 00:14:55.639 +The other ones show other numbers... and so on. + +00:14:55.640 --> 00:14:59.479 +And... what happens when we modify + +00:14:59.480 --> 00:15:02.359 +this function here, `adt-2`, + +00:15:02.360 --> 00:15:05.199 +by adding and removing advices to it? + +00:15:05.200 --> 00:15:06.919 +The idea is that people can run + +00:15:06.920 --> 00:15:08.679 +this thing here several times, + +00:15:08.680 --> 00:15:10.799 +watching the window at the right, + +00:15:10.800 --> 00:15:14.719 +because the results are going to be shown there. + +00:15:14.720 --> 00:15:17.799 +So, in the first moment, when we run... + +00:15:17.800 --> 00:15:21.679 +no, no, sorry, sorry, let me run it again. + +00:15:21.680 --> 00:15:24.039 +In the first moment when we run `adt-2` + +00:15:24.040 --> 00:15:28.239 +it just shows a 2, and then we modify it in a certain way, + +00:15:28.240 --> 00:15:29.479 +and we run it again, + +00:15:29.480 --> 00:15:33.799 +and now before showing the 2 it shows a 1, mysteriously, + +00:15:33.800 --> 00:15:37.119 +and then we add something to be run after the 2, + +00:15:37.120 --> 00:15:38.479 +And we run it again, + +00:15:38.480 --> 00:15:41.839 +and now `adt-2` shows these three things. + +00:15:41.840 --> 00:15:43.959 +And then we remove the advices, + +00:15:43.960 --> 00:15:45.159 +we remove these other things, + +00:15:45.160 --> 00:15:49.079 +and when we run `adt-2` again, it shows only `;; --> 2`. + +00:15:49.080 --> 00:15:51.879 +It's impossible to understand that in the first time, + +00:15:51.880 --> 00:15:57.879 +so we can run that several times... to see how things work. + +00:15:57.880 --> 00:16:02.279 +And now we want to understand + +00:16:02.280 --> 00:16:04.959 +what changes in the function `adt-2`... + +00:16:04.960 --> 00:16:08.639 +how it is modified internally. + +00:16:08.640 --> 00:16:11.479 +I'm calling that the internal view of the function, + +00:16:11.480 --> 00:16:13.599 +and we are going to compare + +00:16:13.600 --> 00:16:16.679 +several internal views of the function `adt-2`. + +00:16:16.680 --> 00:16:19.999 +I'm going to reset the function `adt-2` + +00:16:20.000 --> 00:16:25.679 +by removing the advices and placing the advices on it again... + +00:16:25.680 --> 00:16:28.507 +and if we just pretty-print this function here, + +00:16:28.508 --> 00:16:36.319 +the symbol... the value of this symbol here as a function, + +00:16:36.320 --> 00:16:38.639 +it is something very ugly. + +00:16:38.640 --> 00:16:43.839 +But if we print it in another way, with `cl-prin1`, + +00:16:43.840 --> 00:16:47.239 +then we get something that is much nicer... + +00:16:47.240 --> 00:16:51.159 +but that is not indented. And if we use this thing here, + +00:16:51.160 --> 00:16:55.839 +`cl-prin2` instead of `cl-prin1`, it becomes indented. + +00:16:55.840 --> 00:17:00.839 +So let's try it again. + +00:17:00.840 --> 00:17:06.799 +Here is the current view of what is `adt-2`. + +00:17:06.800 --> 00:17:09.999 +So, the original `adt-insert` is here... + +00:17:10.000 --> 00:17:11.839 +and here are some modifications + +00:17:11.840 --> 00:17:13.519 +that were added by the advices. + +00:17:13.520 --> 00:17:16.759 +And we can run these things many times + +00:17:16.760 --> 00:17:19.239 +to understand what each step does. + +00:17:19.240 --> 00:17:21.239 +But my suggestion is: in the first time + +00:17:21.240 --> 00:17:23.879 +just run everything very quickly... + +00:17:23.880 --> 00:17:25.199 +and then you run it again, + +00:17:25.200 --> 00:17:29.119 +paying attention to the parts that look more interesting. + +NOTE Printing something in different ways for lambdas + +00:17:29.120 --> 00:17:37.373 +Now, I'm going to... Remember that here + +00:17:37.374 --> 00:17:42.559 +I printed the contents of `adt-2` in several different ways, + +00:17:42.560 --> 00:17:47.119 +and now I'm going to show how we can do the same idea + +00:17:47.120 --> 00:17:51.599 +of printing something in different ways for lambdas... + +00:17:51.600 --> 00:17:52.919 +that is something that I explained + +00:17:52.920 --> 00:17:54.639 +in the first part of the video. + +00:17:54.640 --> 00:18:00.639 +In this part of the demo we define a function `foo`... + +00:18:00.640 --> 00:18:06.360 +this `setq` here defines `o` as + +00:18:06.361 --> 00:18:08.959 +the contents of the function cell of `foo`... + +00:18:08.960 --> 00:18:12.999 +And now we are going to print + +00:18:13.000 --> 00:18:15.399 +that `o` in several different ways. + +00:18:15.400 --> 00:18:19.199 +The default way is this one, it's very ugly, + +00:18:19.200 --> 00:18:22.239 +but we can redefine how these things are printed + +00:18:22.240 --> 00:18:24.559 +by just running these lines... + +00:18:24.560 --> 00:18:28.719 +and if we pay attention at what's happening + +00:18:28.720 --> 00:18:30.519 +at the window at the right, + +00:18:30.520 --> 00:18:33.559 +we can see that we have several different + +00:18:33.560 --> 00:18:35.759 +printed representations for the same thing... + +00:18:35.760 --> 00:18:36.879 +and then at the last step, + +00:18:36.880 --> 00:18:41.079 +we reset the printer to the default representation. + +00:18:41.080 --> 00:18:43.279 +And the details are here. + +00:18:43.280 --> 00:18:44.999 +If we run these lines here, + +00:18:45.000 --> 00:18:48.759 +they show the definitions at the window at the right. + +00:18:48.760 --> 00:18:53.879 +And this... now comes the difficult part, + +00:18:53.880 --> 00:18:56.679 +in which we have to do something + +00:18:56.680 --> 00:19:02.079 +besides just running things with F8. We need + +00:19:02.080 --> 00:19:04.919 +a help buffer with buttons... + +00:19:04.920 --> 00:19:08.919 +buttons in the traditional sense, + +00:19:08.920 --> 00:19:11.559 +and we need to choose a certain button there, + +00:19:11.560 --> 00:19:13.439 +or any button there, + +00:19:13.440 --> 00:19:17.940 +and run `M-x ee-set-button` on that button. + +00:19:17.941 --> 00:19:24.719 +So, let me define a `struct` here, + +00:19:24.720 --> 00:19:29.359 +and this is some help on what is that structure. + +00:19:29.360 --> 00:19:33.599 +I'm going to choose this button here + +00:19:33.600 --> 00:19:40.159 +and I'm going to type `M-x ee-set-button`. + +00:19:40.160 --> 00:19:43.559 +The message is a bit obscure. + +00:19:43.560 --> 00:19:47.959 +And now we have something that displays + +00:19:47.960 --> 00:19:51.079 +a lot of information about that button... + +00:19:51.080 --> 00:19:53.919 +And we can also run that with just `F8`s. + +00:19:53.920 --> 00:20:00.279 +By the way, if we want to understand + +00:20:00.280 --> 00:20:02.319 +the code that's behind these things, + +00:20:02.320 --> 00:20:04.839 +we can run this sexp here. + +00:20:04.840 --> 00:20:07.959 +It is going to show the code here at the right. + +00:20:07.960 --> 00:20:10.759 +But anyway, these first lines here... + +00:20:10.760 --> 00:20:15.479 +they display the output in the echo area... Let's try... + +00:20:15.480 --> 00:20:20.559 +And each one of them extracts a different part + +00:20:20.560 --> 00:20:22.559 +of the information on that button. + +00:20:22.560 --> 00:20:26.039 +And these other lines here create a three-window setting + +00:20:26.040 --> 00:20:29.639 +in which the help buffer is shown here, + +00:20:29.640 --> 00:20:33.119 +and the result of some other thing + +00:20:33.120 --> 00:20:39.979 +is shown in the third window. Let's try... + +00:20:39.980 --> 00:20:41.164 +So now that we have... well... I said + +00:20:41.165 --> 00:20:48.407 +that we needed to choose a certain button + +00:20:48.408 --> 00:20:53.439 +and run `M-x ee-set-button` there. We have done that... + +00:20:53.440 --> 00:20:55.919 +so now this variable `ee-button` + +00:20:55.920 --> 00:20:58.439 +contains information about the button... + +00:20:58.440 --> 00:21:01.119 +And now we can run this part here + +00:21:01.120 --> 00:21:03.479 +as many times as we want to... + +00:21:03.480 --> 00:21:07.479 +try to understand what are the values of these things here... + +00:21:07.480 --> 00:21:11.679 +and how some things start with a value that is very complex + +00:21:11.680 --> 00:21:13.839 +and very difficult to understand, + +00:21:13.840 --> 00:21:16.839 +and then we extract the more interesting parts. + +00:21:16.840 --> 00:21:22.279 +And the details, as I said, are here. + +00:21:22.280 --> 00:21:26.759 +That was the end of the demo, and my question is, + +00:21:26.760 --> 00:21:28.559 +what was your reaction to that? + +00:21:28.560 --> 00:21:32.679 +If your reaction was more like "wow" than like "blergh" + +00:21:32.680 --> 00:21:37.039 +then you might like the last part of the video that I recorded in March, + +00:21:37.040 --> 00:21:38.399 +that was very technical... + +00:21:38.400 --> 00:21:42.719 +When I recorded it, I thought, oh my god, this video is very bad... + +00:21:42.720 --> 00:21:47.279 +only the hardcore eev users are going to like that, + +00:21:47.280 --> 00:21:51.039 +and there are less than five hardcore + +00:21:51.040 --> 00:21:52.839 +eev users in the world... + +NOTE Exploring buttons + +00:21:52.840 --> 00:21:56.639 +But anyway, if you saw that introduction + +00:21:56.640 --> 00:21:59.079 +and you think that these things are interesting, + +00:21:59.080 --> 00:22:02.999 +you can execute any one of these S-expressions here + +00:22:03.000 --> 00:22:05.999 +and take a look at the final part of that video + +00:22:06.000 --> 00:22:09.559 +that describes how I wrote some functions + +00:22:09.560 --> 00:22:14.239 +for exploring buttons. If you execute this sexp here, + +00:22:14.240 --> 00:22:19.559 +it plays a part of the video starting from that position. + +00:22:19.560 --> 00:22:26.919 +If you execute this one, you go to the subtitles in HTML... + +00:22:26.920 --> 00:22:30.559 +and if you run this one, you go + +00:22:30.560 --> 00:22:36.159 +to the subtitles in another format. And... that's it! + +00:22:36.160 --> 00:22:40.119 +No, no, sorry, I said "that's it", + +00:22:40.120 --> 00:22:42.159 +but I forgot a very important part... + +NOTE Some design decisions behind eev + +00:22:42.160 --> 00:22:45.159 +I had prepared this slide here + +00:22:45.160 --> 00:22:48.507 +to explain some design decisions behind eev + +00:22:48.508 --> 00:22:53.679 +and why there are so few users of eev... and let me do that. + +00:22:53.680 --> 00:22:57.919 +The thing is that my working memory is very small, + +00:22:57.920 --> 00:23:01.279 +and I need examples that are easy to visualize... + +00:23:01.280 --> 00:23:04.959 +ideally, examples that are easy to run + +00:23:04.960 --> 00:23:10.307 +and that I can compare the outputs + +00:23:10.308 --> 00:23:12.159 +of different ways of running them. + +00:23:12.160 --> 00:23:16.359 +For me, understanding specifications + +00:23:16.360 --> 00:23:20.679 +in an API is not enough... examples work much better for me. + +00:23:20.680 --> 00:23:24.439 +Also, I make lots of mistakes when I type... + +00:23:24.440 --> 00:23:28.399 +so I need ways to run my executable notes + +00:23:28.400 --> 00:23:31.879 +by just typing `f8` and `M-e`... + +00:23:31.880 --> 00:23:37.039 +and... most people in the #emacs channel and in other places + +00:23:37.040 --> 00:23:44.519 +recommend executing sexps by typing `M-:`, like this... + +00:23:44.520 --> 00:23:49.239 +But I hate that... I think that `M-:` and IELM are + +00:23:49.240 --> 00:23:54.559 +for people who type well, so not me... + +00:23:54.560 --> 00:23:58.839 +And also, 99% of what I do is scratch code. + +00:23:58.840 --> 00:24:01.639 +Very few things that I do go + +00:24:01.640 --> 00:24:05.799 +into "production" - between quotes. + +NOTE Tests + +00:24:05.800 --> 00:24:10.199 +So most of my tests are not automated tests. + +00:24:10.200 --> 00:24:12.439 +They are just things that I run with F8, + +00:24:12.440 --> 00:24:15.879 +and they don't include the expected result. + +00:24:15.880 --> 00:24:19.159 +Many people feel that this is very, very, very wrong. + +00:24:19.160 --> 00:24:23.279 +Tests MUST MEAN automated tests. + +00:24:23.280 --> 00:24:25.639 +Also, and this is very frustrating, + +00:24:25.640 --> 00:24:28.399 +eev has lots of "non-users", + +00:24:28.400 --> 00:24:31.519 +I mean, people who have tried to use it, + +00:24:31.520 --> 00:24:34.759 +but they said that they couldn't figure out how to use it. + +00:24:34.760 --> 00:24:36.159 +They couldn't understand + +00:24:36.160 --> 00:24:38.079 +what would be the workflows for eev. + +00:24:38.080 --> 00:24:43.679 +And that's the same that happens with me with code blocks in Org... + +00:24:43.680 --> 00:24:48.759 +I'm still at the point in which code blocks in Org just feel wrong. + +00:24:48.760 --> 00:24:55.199 +I still don't understand how to organize my workflows around code blocks. + +00:24:55.200 --> 00:24:58.999 +I said that eev has very few users, + +00:24:59.000 --> 00:25:02.239 +and they are all very weird and very busy, + +00:25:02.240 --> 00:25:06.359 +and I decided that all my blog-ish posts about eev + +00:25:06.360 --> 00:25:09.719 +would be things that they can run in a few minutes... + +00:25:09.720 --> 00:25:13.039 +just like the demo that I showed a few minutes ago. + +00:25:13.040 --> 00:25:16.119 +I said "like the examples in the rest of the video", + +00:25:16.120 --> 00:25:17.399 +but I forgot this slide, + +00:25:17.400 --> 00:25:19.639 +and I'm recording this after the demo. +00:25:19.640 --> 00:25:22.520 +So... that's it. Thanks! diff --git a/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt index 676fa744..2ab53895 100644 --- a/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt +++ b/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt @@ -1,5 +1,7 @@ WEBVTT +NOTE Developing Python in Emacs + 00:00:00.000 --> 00:00:02.839 So as we wait for people to drop @@ -60,6 +62,8 @@ So I think Emacs is really good for Python development. 00:01:14.440 --> 00:01:16.679 So what are some other... +NOTE Q: How long have you been using Emacs? + 00:01:16.680 --> 00:01:18.319 How long have you been using Emacs? @@ -138,6 +142,8 @@ So that's how it started. So like five years ago, maybe. 00:02:33.520 --> 00:02:39.519 Cool. Um, so did you, what were some other, +NOTE Q: What editor were you primarily using before? + 00:02:39.520 --> 00:02:43.999 what, what, what editor were you primarily using before you? @@ -207,6 +213,8 @@ I don't quite see how your setup works with IPython. 00:03:58.240 --> 00:04:00.279 Sorry if you already answered this. +NOTE Q: Do you have your Emacs connect to the IPython kernel over the XMPP socket that IPython sets up? + 00:04:00.280 --> 00:04:03.519 Do you have your Emacs connect to the IPython kernel @@ -282,6 +290,8 @@ or if I want this connection to a running app, 00:05:32.240 --> 00:05:38.479 I'm using the Jupyter console, basically. +NOTE Q: Not sure if you've explored Org Babel, but what are the benefits of using your approach over Org? + 00:05:38.480 --> 00:05:45.199 Have you explored Org Babel at all? @@ -342,8 +352,10 @@ that are probably more relevant, 00:07:01.640 --> 00:07:05.799 just because a lot of it's kind of over my head. +NOTE Q: Have you seen marimo.io notebooks? It uses standard Python. + 00:07:05.800 --> 00:07:12.879 -Have you seen the miramo.io notebooks? +Have you seen the marimo.io notebooks? 00:07:12.880 --> 00:07:15.279 These use standard Python? @@ -390,6 +402,8 @@ and you ask about making pasta or some other sort of thing. 00:08:16.600 --> 00:08:20.559 No, go ahead. Go ahead. I'm glad to ask any questions. +NOTE Q: what LLM did you say you've used? + 00:08:20.560 --> 00:08:25.679 So just generally about Emacs as a coding developer, @@ -399,59 +413,59 @@ what are the features 00:08:27.000 --> 00:08:28.479 that you tend to lean on more heavily? -00:08:28.480 --> 00:08:34.319 -you know completion or you know what what have you +00:08:28.480 --> 00:08:34.059 +You know completion or you know, what have you... -00:08:34.320 --> 00:08:36.199 -maybe I could put it better +00:08:34.060 --> 00:08:35.257 +Maybe I could put it better as: -00:08:36.200 --> 00:08:40.079 -as what have you spent more time configuring for Emacs +00:08:35.258 --> 00:08:40.079 +what have you spent more time configuring for Emacs 00:08:40.080 --> 00:08:45.439 to facilitate development? 00:08:45.440 --> 00:08:49.639 -Yes initially it was basically taking away +Yes, initially, it was basically taking away 00:08:49.640 --> 00:08:51.319 -some of the UI features +some of the UI features, 00:08:51.320 --> 00:08:56.599 -basically disabling it and and but fairly quickly +basically disabling it, but fairly quickly, 00:08:56.600 --> 00:08:58.919 -for for both closure development +for both Clojure development 00:08:58.920 --> 00:09:04.599 -where i was using cider which is like a really good uh good tool um +where I was using CIDER, which is like a really good tool, 00:09:04.600 --> 00:09:08.159 -and for python when i quickly found lp elp +and for Python, when I quickly found elpy, 00:09:08.160 --> 00:09:10.599 -i'm not sure how to pronounce it +I'm not sure how to pronounce it, 00:09:10.600 --> 00:09:16.039 -but you you get so much uh good things from these tools +but you get so much good things from these tools... -00:09:16.040 --> 00:09:21.719 -so what i've done additionally is like theme +00:09:16.040 --> 00:09:21.019 +So what I've done additionally is theme -00:09:21.720 --> 00:09:27.159 +00:09:21.020 --> 00:09:27.159 and maybe having this environment -00:09:27.160 --> 00:09:31.479 +00:09:27.160 --> 00:09:29.019 that is without disturbance. -00:09:31.480 --> 00:09:34.839 +00:09:29.020 --> 00:09:34.839 So I really like the code to have my full attention. 00:09:34.840 --> 00:09:41.239 So I rarely have, maybe I have like a preview sometimes, 00:09:41.240 --> 00:09:45.359 -but mostly it's the window or the buffer where I have my code +but mostly, it's the window or the buffer where I have my code, 00:09:45.360 --> 00:09:49.879 and I've minimized the running REPL buffer. @@ -469,21 +483,23 @@ spent my configuration doing that. And also lately, trying out some LLM tools. 00:10:04.800 --> 00:10:09.279 -So I think I have two packages +I think I have two packages 00:10:09.280 --> 00:10:12.239 that I'm using actively today. 00:10:12.240 --> 00:10:15.799 -And my favorite is a tool called ECA, +My favorite is a tool called ECA, 00:10:15.800 --> 00:10:20.199 which is a LLM chat assistant, which is really good. -00:10:20.200 --> 00:10:24.399 +00:10:20.200 --> 00:10:28.479 The developer is also an Emacs enthusiast. -00:10:24.400 --> 00:10:33.639 +NOTE Q: Are you building your own Emacs, or using the system packages? + +00:10:28.480 --> 00:10:33.639 So are you the type of person that tends to work with 00:10:33.640 --> 00:10:37.039 @@ -505,21 +521,21 @@ I'm not there yet with doing my own builds. Currently, I'm on macOS, 00:10:55.600 --> 00:11:00.039 -so I'm installing Emacs through broom basically, homebrew. +so I'm installing Emacs through brew, basically, homebrew. 00:11:00.040 --> 00:11:04.919 I've yet so much Emacs things to learn 00:11:04.920 --> 00:11:07.739 -because I'm not even using org yet. +because I'm not even using Org yet. 00:11:07.740 --> 00:11:11.559 I'm exploring the this editor. -00:11:11.560 --> 00:11:14.799 +00:11:11.560 --> 00:11:13.919 So I feel like I'm very much a beginner. -00:11:14.800 --> 00:11:17.919 +00:11:13.920 --> 00:11:17.919 I'm not using Emacs to its full potential yet. 00:11:17.920 --> 00:11:23.279 @@ -537,10 +553,10 @@ Ed Stallthroat says, thank you 00:11:35.800 --> 00:11:40.839 for publishing your configuration and offers a link. -00:11:40.840 --> 00:11:41.879 +00:11:40.840 --> 00:11:43.199 Oh, great. Great. -00:11:41.880 --> 00:11:46.359 +00:11:43.200 --> 00:11:46.359 Yes, those things that I showed in my talk, 00:11:46.360 --> 00:11:49.319 @@ -588,6 +604,8 @@ Yeah, in Sweden, it's dinner time. 00:12:36.600 --> 00:12:40.079 It's like 6 p.m. soon. That fits. +NOTE Q: Are you involved with local Emacs meetups? + 00:12:40.080 --> 00:12:46.439 So are you involved with local Emacs meetups? @@ -615,10 +633,10 @@ into a local community there at all, No, I haven't. 00:13:08.720 --> 00:13:10.759 Not in any community. I haven't done that yet, -00:13:10.760 --> 00:13:15.679 -but we are like friends that I've gotten to know +00:13:10.760 --> 00:13:18.215 +but we are... Like, friends that I've gotten to know -00:13:15.680 --> 00:13:23.439 +00:13:18.216 --> 00:13:23.439 through work and through like open source work that also use Emacs. 00:13:23.440 --> 00:13:28.959 @@ -666,6 +684,8 @@ and thank you so much also for... 00:14:18.760 --> 00:14:24.639 I'm sorry, I saw another question here. Let me cover that. +NOTE Q: Can you repeat the name of the LLM that you specifically mentioned there? - ECA + 00:14:24.640 --> 00:14:27.959 Can you repeat the name of the LLM @@ -738,29 +758,32 @@ so I can send that to the REPL. 00:16:08.880 --> 00:16:11.479 But for some reason, I forgot the name of it. -00:16:11.480 --> 00:16:25.159 +00:16:11.480 --> 00:16:29.859 I can look it up. Just give me one minute, sorry. -00:16:25.160 --> 00:16:35.559 -oh yeah gptel gptel that's that's the name of the other tool +00:16:29.860 --> 00:16:35.559 +Oh yeah, gptel, that's that's the name of the other tool 00:16:35.560 --> 00:16:37.879 -which is uh also a good tool yeah +which is also a good tool, yeah, 00:16:37.880 --> 00:16:41.279 -but ECA is more like a more chat companion +but ECA is more like a chat companion 00:16:41.280 --> 00:16:46.679 -and this you can also you can tell it to write code and things like that +and this, you can also tell it to write code and things like that, 00:16:46.680 --> 00:16:51.679 -but i mostly use it for reviews and research +but I mostly use it for reviews and research -00:16:51.680 --> 00:16:54.599 -and like asking questions +00:16:51.680 --> 00:16:53.739 +and asking questions -00:16:54.600 --> 00:17:00.279 -because i want to my I don't have a problem with typing code. +00:16:53.740 --> 00:16:57.544 +because I want to... My... + +00:16:57.545 --> 00:17:00.279 +I don't have a problem with typing code. 00:17:00.280 --> 00:17:01.919 I don't think that slows me down, @@ -778,7 +801,7 @@ that's what I'm using LLM for, on LLM for two, mostly today. That really hits for me. 00:17:13.520 --> 00:17:15.199 -I don't mind typing either. +[Corwin]: I don't mind typing either. 00:17:15.200 --> 00:17:18.479 I think somehow having things be so simple @@ -811,40 +834,45 @@ and I don't see a backlog. There are a couple more comments here 00:17:44.520 --> 00:17:49.319 -linking linking to the ECA Emacs and gptel. +linking to the ECA Emacs and gptel. 00:17:49.320 --> 00:17:52.239 Comment also saying very cool setup. 00:17:52.240 --> 00:17:56.959 -So I suppose I'll I'll hand it over to you +So I suppose I'll hand it over to you 00:17:56.960 --> 00:17:59.319 -if you have kind of final thoughts or. +if you have kind of final thoughts or 00:17:59.320 --> 00:18:02.079 additional wisdoms you want to share -00:18:02.080 --> 00:18:05.399 -I really appreciate your taking the time to prepare this presentation +00:18:02.080 --> 00:18:03.974 +I really appreciate your taking the time + +00:18:03.975 --> 00:18:05.399 +to prepare this presentation + +00:18:05.400 --> 00:18:08.741 +especially to do the live Q&A with us. -00:18:05.400 --> 00:18:11.079 -especially to do the live Q&A with us. Thank you +NOTE Wrapping up -00:18:11.080 --> 00:18:13.919 -and I haven't anything more than that I will +00:18:08.742 --> 00:18:12.988 +[David]: Thank you. I haven't anything more than that -00:18:13.920 --> 00:18:19.479 -of course I will continue like have evolving my setup +00:18:12.989 --> 00:18:19.479 +I will of course continue evolving my setup, 00:18:19.480 --> 00:18:21.359 -because there's like new tools +because there's new tools 00:18:21.360 --> 00:18:24.759 -and maybe new ideas also coming up +and maybe new ideas also coming up. 00:18:24.760 --> 00:18:28.719 -and my What I'm aiming for in Python development +What I'm aiming for in Python development 00:18:28.720 --> 00:18:30.479 is the great developer experience @@ -853,7 +881,7 @@ is the great developer experience of what's called Lisp programming, basically. 00:18:34.520 --> 00:18:41.699 -So that's what I'm aiming at for Python 2. +So that's what I'm aiming at for Python too. 00:18:41.700 --> 00:18:44.359 Thank you. Thank you so much. diff --git a/2025/info/completion-after.md b/2025/info/completion-after.md index e70f4409..c478b0b6 100644 --- a/2025/info/completion-after.md +++ b/2025/info/completion-after.md @@ -3,12 +3,13 @@ <div class="transcript transcript-mainVideo"><a name="completion-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> -[[!template text="""Nice to have you here on this talk.""" start="00:00:00.000" video="mainVideo-completion" id="subtitle"]] + +<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 Jasnipit.""" start="00:00:16.280" 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"]] @@ -18,229 +19,251 @@ [[!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. So my motivation, yeah, snippet is old.""" start="00:00:49.960" video="mainVideo-completion" id="subtitle"]] -[[!template text="""So I've tried another, I've tried Temple""" start="00:00:55.920" 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 VR snippets""" start="00:01:08.160" 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 it""" start="00:01:32.640" video="mainVideo-completion" id="subtitle"]] -[[!template text="""was it's was not as easy to set up as I wanted for my needs""" start="00:01:38.920" video="mainVideo-completion" id="subtitle"]] -[[!template text="""so I had been working I've been playing with Eaglet already some time for a language server protocol""" start="00:01:44.360" 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 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:06.440" video="mainVideo-completion" id="subtitle"]] -[[!template text="""and for text mode you need a corporate terminal,""" start="00:02:07.840" video="mainVideo-completion" id="subtitle"]] -[[!template text="""which was yet another package that I don't download.""" start="00:02:10.320" 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 just snippet.""" start="00:02:21.480" 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, I also needed to load a company""" start="00:02:26.680" video="mainVideo-completion" id="subtitle"]] -[[!template text="""to have a snippet support,""" start="00:02:33.960" 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, of your snippet.""" start="00:02:37.640" 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="""TTI charge frames being announced for master.""" start="00:02:51.800" 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 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 trying 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 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 like Doom or things like that.""" start="00:03:36.760" 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 Kung Fu Terminal. I need your snippet.""" start="00:03:50.280" 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 does 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 Tempo 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 a company in my setup.""" start="00:04:10.480" 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 PyLSB and TechLab.""" start="00:04:28.160" video="mainVideo-completion" id="subtitle"]] -[[!template text="""And I don't want to have to stop using them.""" start="00:04:31.720" 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="""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="""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 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 the scatter""" start="00:05:07.240" 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:14.000" 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="""So it's a function for just completion point""" start="00:05:18.400" video="mainVideo-completion" id="subtitle"]] -[[!template text="""so 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 of the thing that I want to""" start="00:05:37.120" video="mainVideo-completion" id="subtitle"]] -[[!template text="""that I want to be my seed for looking and bringing up Corfu""" start="00:05:38.920" 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:53.440" 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 JavaScript keyword test""" start="00:05:57.520" 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""" start="00:06:11.760" video="mainVideo-completion" id="subtitle"]] -[[!template text="""that point for me with a different thing""" start="00:06:13.880" 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 confusingly tech,""" start="00:06:25.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:36.920" video="mainVideo-completion" id="subtitle"]] -[[!template text="""which was a bunch of thing at point,""" start="00:06:39.960" 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 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:53.240" 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:57.880" video="mainVideo-completion" id="subtitle"]] -[[!template text="""which then can disappear if you use NerdIconScoreFull.""" start="00:07:02.320" 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.560" video="mainVideo-completion" id="subtitle"]] -[[!template text="""Then the company kind is actually not something""" start="00:07:20.080" video="mainVideo-completion" id="subtitle"]] -[[!template text="""that comes from the company package, but does not require.""" start="00:07:26.760" video="mainVideo-completion" id="subtitle"]] -[[!template text="""And that's going to allow NerdEye Conscorfu to identify""" start="00:07:31.000" 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="""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 text="""Problems looking now next step""" start="00:08:08.080" 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:19.080" 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 your snippet and it looked a bit like Mission Impossible.""" start="00:08:29.320" 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:45.640" 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="""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="""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 text="""So I started to dive into your snippet""" start="00:09:18.880" 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="""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 snipple 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:47.080" video="mainVideo-completion" id="subtitle"]] -[[!template text="""Sometimes the list is empty""" start="00:09:52.400" video="mainVideo-completion" id="subtitle"]] -[[!template text="""so it's going to return a nil and that you have to discard.""" start="00:09:55.840" video="mainVideo-completion" id="subtitle"]] -[[!template text="""When you're using structured snippets""" start="00:10:01.960" video="mainVideo-completion" id="subtitle"]] -[[!template text="""like snippets and submenus and so on""" start="00:10:06.000" video="mainVideo-completion" id="subtitle"]] -[[!template text="""to get a structured menu,""" start="00:10:08.920" video="mainVideo-completion" id="subtitle"]] -[[!template text="""you also get some non-strings that you need to filter out""" start="00:10:12.360" video="mainVideo-completion" id="subtitle"]] -[[!template text="""in order to get a workable keyword list.""" start="00:10:15.000" video="mainVideo-completion" id="subtitle"]] -[[!template text="""At the end of the day, what I had was something like this.""" start="00:10:19.000" video="mainVideo-completion" id="subtitle"]] -[[!template text="""I have, for a mode, I went through all modes.""" start="00:10:24.880" video="mainVideo-completion" id="subtitle"]] -[[!template text="""through all modes associated to that and then I went""" start="00:10:30.960" video="mainVideo-completion" id="subtitle"]] -[[!template text="""I got my results from all the tables that I had""" start="00:10:37.160" video="mainVideo-completion" id="subtitle"]] -[[!template text="""for a 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 your 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="""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.680" 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 a packet""" start="00:11:29.000" 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 text="""So fine-tuning I just adding a yes 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 node 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 I was saying I was getting rid of packages""" start="00:11:51.200" 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:01.000" 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 cap 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 cap 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 yes completion""" start="00:12:29.080" video="mainVideo-completion" id="subtitle"]] -[[!template text="""and then the elisp completion point function provided by Emacs.""" start="00:12:32.760" video="mainVideo-completion" id="subtitle"]] -[[!template text="""I combine them using cape cap 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 list 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 snippet expansion""" start="00:12:58.520" 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:14.480" 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 set corfu""" start="00:13:39.200" video="mainVideo-completion" id="subtitle"]] -[[!template text="""on exact match to nil because otherwise""" start="00:13:43.320" video="mainVideo-completion" id="subtitle"]] -[[!template text="""you will always get the snippet expanded""" start="00:13:48.600" 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="""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"]] -[[!template text="""Another nice thing, I'm also creating my own themes.""" start="00:14:05.360" 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 team creator.""" start="00:14:22.960" video="mainVideo-completion" id="subtitle"]] -[[!template text="""In my personal work 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:31.720" video="mainVideo-completion" id="subtitle"]] -[[!template text="""I don't want to overload the thing""" start="00:14:34.160" 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="""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 text="""So if I go back to my checklist decently remax yes""" start="00:14:58.320" 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="""for the for in the demo I'm doing is a master""" start="00:15:06.560" 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="""so and I don't need Corfu terminal there.""" start="00:15:12.000" video="mainVideo-completion" id="subtitle"]] -[[!template text="""I need your snippet,""" start="00:15:15.200" 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 if I buy companies 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. Takeaways from all this,""" start="00:15:44.680" 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="""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"]] @@ -250,141 +273,145 @@ [[!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 makes a very nice overall look""" start="00:16:50.400" video="mainVideo-completion" id="subtitle"]] -[[!template text="""and look and feel for for Emacs.""" start="00:16:53.680" 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 this cape super fun""" start="00:17:06.280" video="mainVideo-completion" id="subtitle"]] -[[!template text="""uh super function super cape function functionality""" start="00:17:09.160" 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="""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 computational 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="""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 Yarn Snippet alive.""" start="00:17:40.080" 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 Yarn Snippet.""" start="00:17:51.560" video="mainVideo-completion" id="subtitle"]] -[[!template text="""And PS, currently on master,""" start="00:17:57.400" 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:07.800" video="mainVideo-completion" id="subtitle"]] -[[!template text="""but you may need to add to your snippet hook""" start="00:18:13.720" video="mainVideo-completion" id="subtitle"]] -[[!template text="""this simple local value for ElixirFontify semantically""" start="00:18:19.640" 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 face were a bit too pushy""" start="00:18:30.720" video="mainVideo-completion" id="subtitle"]] -[[!template text="""so I had to make a snippet mode""" start="00:18:32.440" 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="""That's what we want to talk about.""" start="00:18:41.280" 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 text="""Someone asked, did you try Jasnepet Cup?""" start="00:18:55.000" 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:16.520" 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 text="""Now, a small demo. This is the interaction.""" start="00:19:40.160" 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 def one or if I want a key map, for def key map,""" start="00:20:04.320" 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 mob.""" 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="""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="""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 in use package much easier.""" start="00:20:41.400" video="mainVideo-completion" id="subtitle"]] -[[!template text="""So the next thing would be""" start="00:20:46.800" video="mainVideo-completion" id="subtitle"]] -[[!template text="""I would like to write a description""" start="00:20:51.120" video="mainVideo-completion" id="subtitle"]] -[[!template text="""like for example a cool show off team up""" start="00:20:56.000" 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="""but you also have like but 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 but there's no""" start="00:21:15.840" 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="""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="""X 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="""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="""service running, pilot is local, eglot is active.""" start="00:21:45.360" 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 Eagle Lord.""" start="00:22:21.760" 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 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 a 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="""for 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 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="""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:23:56.760" video="mainVideo-completion" id="subtitle"]] -[[!template text="""i'm going to try your snippet 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="""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="""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 uh what uh there's someone asking""" start="00:24:46.200" video="mainVideo-completion" id="subtitle"]] -[[!template text="""what 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 your snippets""" start="00:25:05.200" video="mainVideo-completion" id="subtitle"]] -[[!template text="""so if there's any problem in your snippets""" start="00:25:11.360" video="mainVideo-completion" id="subtitle"]] -[[!template text="""with uh 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="""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 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 uh""" 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="""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 is for example when you look at this""" start="00:26:15.360" video="mainVideo-completion" id="subtitle"]] -[[!template text="""if you if you have the the venue uh the new""" start="00:26:18.120" video="mainVideo-completion" id="subtitle"]] -[[!template text="""sorry the new way of the the new emacs uh""" start="00:26:20.600" video="mainVideo-completion" id="subtitle"]] -[[!template text="""semantical highlighting working""" start="00:26:26.160" video="mainVideo-completion" id="subtitle"]] -[[!template text="""this would be quite cramped this is why i'm using""" start="00:26:31.640" video="mainVideo-completion" id="subtitle"]] -[[!template text="""this is why i said uh the snippet the""" start="00:26:39.200" video="mainVideo-completion" id="subtitle"]] -[[!template text="""so is this more or less what you're talking about""" start="00:26:43.040" video="mainVideo-completion" id="subtitle"]] -[[!template text="""This is what you're talking about. Snippet. Save the snippet.""" start="00:26:49.040" video="mainVideo-completion" id="subtitle"]] -[[!template text="""So I'm going to... Snippet, load and put window.""" start="00:27:01.480" 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. on 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:24.440" 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 and 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 empty of course""" start="00:28:43.080" video="mainVideo-completion" id="subtitle"]] -[[!template text="""there's only one it will not show in Corfu,""" start="00:28:52.080" 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"]] @@ -399,85 +426,91 @@ [[!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:19.920" 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 your snippets.""" start="00:30:31.560" 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 here? I have them. I'm going to clean.""" start="00:31:03.160" video="mainVideo-completion" id="subtitle"]] -[[!template text="""Oh, you're back in your home directories. Why?""" start="00:31:21.440" video="mainVideo-completion" id="subtitle"]] -[[!template text="""CD dash to get back in. Yeah. That's right.""" start="00:31:28.880" 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="""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="""Yeah, we we can try that. That's a quick one. This is my.""" start="00:31:41.040" video="mainVideo-completion" id="subtitle"]] -[[!template text="""Fine, now that I have this,""" start="00:31:49.400" 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 AR snippets, if it's there.""" start="00:32:03.080" video="mainVideo-completion" id="subtitle"]] -[[!template text="""Yes, it is. Yeah, it's there.""" start="00:32:07.680" video="mainVideo-completion" id="subtitle"]] -[[!template text="""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. Fantastic.""" start="00:32:18.560" video="mainVideo-completion" id="subtitle"]] -[[!template text="""And by the way, it is there.""" start="00:32:24.160" video="mainVideo-completion" id="subtitle"]] -[[!template text="""Yeah, I really should spend time""" start="00:32:32.120" video="mainVideo-completion" id="subtitle"]] -[[!template text="""getting more templates set up with Snippet.""" start="00:32:34.000" 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="""Yeah, I mean, just to make it bigger,""" start="00:32:40.400" 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:06.200" video="mainVideo-completion" id="subtitle"]] -[[!template text="""if that is empty, just add a white space.""" start="00:33:10.720" 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 for to do more things on that""" start="00:33:23.320" video="mainVideo-completion" id="subtitle"]] -[[!template text="""and I also have like menus to see""" start="00:33:27.280" 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="""for my spell checking and so on so""" start="00:33:33.600" video="mainVideo-completion" id="subtitle"]] -[[!template text="""and that's all that's as you see""" start="00:33:37.080" video="mainVideo-completion" id="subtitle"]] -[[!template text="""this is a Lisp being evaluated""" start="00:33:40.320" video="mainVideo-completion" id="subtitle"]] -[[!template text="""so yes do I really encourage you""" start="00:33:41.960" video="mainVideo-completion" id="subtitle"]] -[[!template text="""I've also heard people use it,""" start="00:33:45.120" 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. Yeah.""" start="00:33:54.360" video="mainVideo-completion" id="subtitle"]] -[[!template text="""And look, this is my article. I have another.""" start="00:33:58.240" 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="""Hmm, I think it might be nice to have""" start="00:34:22.880" 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="""No snippets and other things like for example,""" start="00:34:33.360" 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:54.520" 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:15.600" 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="""Thank you for the peek into your workflow.""" start="00:35:23.520" 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:33.920" video="mainVideo-completion" id="subtitle"]] -[[!template text="""So thanks again. All right. Have a nice supper. Same to you.""" start="00:35:37.840" 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) diff --git a/2025/info/completion-before.md b/2025/info/completion-before.md index b30609c0..4deba978 100644 --- a/2025/info/completion-before.md +++ b/2025/info/completion-before.md @@ -8,6 +8,26 @@ Status: TO_REVIEW_QA -<div class="vid mainVideo"><video controls preload="none" id="mainVideo-completion"><source src="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--original.m4v" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 36:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-completion">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--backup.webm">Download --backup.webm (30MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--handout.pdf">Download --handout.pdf</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.m4v">Download --main.m4v (95MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.opus">Download --main.opus (5.2MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.webm">Download --main.webm (79MB)</a></li><li><a href="https://youtu.be/vf-jntWJHBA">View on Youtube</a></li></ul></div></div> +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-completion"><source src="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-completion" data=""" +00:00.000 Introduction +00:52.516 Motivation +03:29.120 My requirements +04:37.600 Basic setup: corfu + eglot +05:02.960 Looking at completion-at-point functions +06:44.880 Making my own (basic) c-a-p-f for yasnippet: the completion properties +08:10.900 Getting yas-kw-list right: What do I want? +09:18.880 Diving in yasnippet +11:33.840 Fine-tuning: adding cape +13:03.804 Automatic snippet expansion +14:05.360 Themes +14:58.320 My check-list +15:48.584 Takeaways +16:58.040 Requests (to whom it may concern) +18:55.000 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 +19:40.160 A small demo +24:51.880 Q: Do special characters in yasnippets work well too? example <FD ? +32:32.120 Emacs Lisp + +"""]]<div></div>Duration: 36:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-completion">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--backup.webm">Download --backup.webm (30MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--handout.pdf">Download --handout.pdf</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.m4v">Download --main.m4v (95MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.opus">Download --main.opus (5.2MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-completion--corfuyasnippet-easier-than-i-thought--pedro-a-aranda-gutirrez--main.webm">Download --main.webm (79MB)</a></li><li><a href="https://youtu.be/NtxoiRdp2qc">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/llm-after.md b/2025/info/llm-after.md index 4305f6de..dcd43ae1 100644 --- a/2025/info/llm-after.md +++ b/2025/info/llm-after.md @@ -369,7 +369,8 @@ Captioner: amitav <div class="transcript transcript-qanda"><a name="llm-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1> -[[!template text="""So let's, I'm just going to answer""" start="00:00:00.000" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: My biggest question with AI code editors trying to integrate with Emacs is -- are the AI code editors able to read unsaved buffers and not just saved files?""" start="00:00:00.000" video="qanda-llm" id="subtitle"]]</div>[[!template text="""So let's, I'm just going to answer""" start="00:00:00.000" video="qanda-llm" id="subtitle"]] [[!template text="""the questions as I see them on the pad.""" start="00:00:01.760" video="qanda-llm" id="subtitle"]] [[!template text="""So yeah, this first question is really good.""" start="00:00:04.400" video="qanda-llm" id="subtitle"]] [[!template text="""And I think it's actually this great thing""" start="00:00:07.080" video="qanda-llm" id="subtitle"]] @@ -424,9 +425,10 @@ Captioner: amitav [[!template text="""I will read the questions from now on.""" start="00:02:11.720" video="qanda-llm" id="subtitle"]] [[!template text="""But yes, that's what I think about.""" start="00:02:13.520" video="qanda-llm" id="subtitle"]] [[!template text="""that interesting questions about unsaved buffers.""" start="00:02:16.600" video="qanda-llm" id="subtitle"]] -[[!template text="""The next question is,""" start="00:02:20.320" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Personally I don't agree with the comment you made about VS Code usage dying out because I see companies/products pushing for tightly-integrated VS-Code agents/products like Windsurf. Thoughts?""" start="00:02:20.320" video="qanda-llm" id="subtitle"]]</div>[[!template text="""The next question is,""" start="00:02:20.320" video="qanda-llm" id="subtitle"]] [[!template text="""I don't agree with the comment you made""" start="00:02:22.240" video="qanda-llm" id="subtitle"]] -[[!template text="""about VS code usage dying out""" start="00:02:23.800" video="qanda-llm" id="subtitle"]] +[[!template text="""about VS Code usage dying out""" start="00:02:23.800" video="qanda-llm" id="subtitle"]] [[!template text="""because I see companies and products""" start="00:02:25.200" video="qanda-llm" id="subtitle"]] [[!template text="""pushing for tightly integrated agent""" start="00:02:26.720" video="qanda-llm" id="subtitle"]] [[!template text="""and products like Windsurf.""" start="00:02:28.880" video="qanda-llm" id="subtitle"]] @@ -457,7 +459,8 @@ Captioner: amitav [[!template text="""I guess I'm kind of cautiously saying""" start="00:03:37.680" video="qanda-llm" id="subtitle"]] [[!template text="""I think it's gonna be the opposite, but I guess we'll see.""" start="00:03:40.320" video="qanda-llm" id="subtitle"]] [[!template text="""Like, let's reconvene in a year and see what happens.""" start="00:03:43.200" video="qanda-llm" id="subtitle"]] -[[!template text="""Uh, the 3rd question answer,""" start="00:03:47.760" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Do you have any thoughts about the environmental cost of using LLMs - either the training of models we can download and use locally, or the larger, commercial models used from the cloud?""" start="00:03:47.760" video="qanda-llm" id="subtitle"]]</div>[[!template text="""Uh, the 3rd question answer,""" start="00:03:47.760" video="qanda-llm" id="subtitle"]] [[!template text="""do you have any thoughts about the environmental costs""" start="00:03:49.160" video="qanda-llm" id="subtitle"]] [[!template text="""of using either the training""" start="00:03:55.320" video="qanda-llm" id="subtitle"]] [[!template text="""of the models are we can download or use locally""" start="00:03:57.080" video="qanda-llm" id="subtitle"]] @@ -505,7 +508,8 @@ Captioner: amitav [[!template text="""to make things more efficient as opposed to personal use.""" start="00:05:58.520" video="qanda-llm" id="subtitle"]] [[!template text="""So I think it's wise to be cautious,""" start="00:06:01.400" video="qanda-llm" id="subtitle"]] [[!template text="""but I think it's okay, I think, at least for personal use.""" start="00:06:06.120" video="qanda-llm" id="subtitle"]] -[[!template text="""The next question is another,""" start="00:06:09.080" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: I must say, I liked your conclusion, but I differ insofar as you said that VS Code differ from Emacs because the former is not as easy to adapt as the latter. Why should Microsoft not adapt VS Code as we adapt Emacs for the new era of coding? And why would VS Code be harder hit? Could you please elaborate on this point?""" start="00:06:09.080" video="qanda-llm" id="subtitle"]]</div>[[!template text="""The next question is another,""" start="00:06:09.080" video="qanda-llm" id="subtitle"]] [[!template text="""yeah, this is also disagreeing with me about VS Code,""" start="00:06:13.160" video="qanda-llm" id="subtitle"]] [[!template text="""but it says, I must say I liked your conclusion,""" start="00:06:20.960" video="qanda-llm" id="subtitle"]] [[!template text="""but I differ insofar as you said that VS Code differs from Emacs""" start="00:06:23.840" video="qanda-llm" id="subtitle"]] @@ -548,13 +552,13 @@ Captioner: amitav [[!template text="""be a bit more useful than VS code,""" start="00:08:09.240" video="qanda-llm" id="subtitle"]] [[!template text="""which people are really just using to edit code""" start="00:08:10.960" video="qanda-llm" id="subtitle"]] [[!template text="""and if people find it less useful to edit code.""" start="00:08:14.080" video="qanda-llm" id="subtitle"]] -[[!template text="""I think it's VS code will be harder hit than emails""" start="00:08:16.800" video="qanda-llm" id="subtitle"]] -[[!template text="""because that's its whole like that's in the name""" start="00:08:20.920" video="qanda-llm" id="subtitle"]] +[[!template text="""I think it's VS Code will be harder hit than emails""" start="00:08:16.800" video="qanda-llm" id="subtitle"]] +[[!template text="""because that's its whole, like, that's in the name,""" start="00:08:20.920" video="qanda-llm" id="subtitle"]] [[!template text="""like the whole reason for it""" start="00:08:24.240" video="qanda-llm" id="subtitle"]] [[!template text="""to be doing things as to edit code.""" start="00:08:25.560" video="qanda-llm" id="subtitle"]] [[!template text="""So I think that it's it's vulnerable""" start="00:08:27.360" video="qanda-llm" id="subtitle"]] [[!template text="""in a way that Emacs isn't""" start="00:08:30.840" video="qanda-llm" id="subtitle"]] -[[!template text="""just because emacs is so very...""" start="00:08:31.960" video="qanda-llm" id="subtitle"]] +[[!template text="""just because Emacs is so very...""" start="00:08:31.960" video="qanda-llm" id="subtitle"]] [[!template text="""you know, it's, it could do so many things""" start="00:08:34.520" video="qanda-llm" id="subtitle"]] [[!template text="""and and people use it for so many different kinds of things""" start="00:08:40.120" video="qanda-llm" id="subtitle"]] [[!template text="""that it's I think it's going to be""" start="00:08:42.720" video="qanda-llm" id="subtitle"]] @@ -567,9 +571,10 @@ Captioner: amitav [[!template text="""it is the thing you reach for to do that thing.""" start="00:09:00.280" video="qanda-llm" id="subtitle"]] [[!template text="""Is that touching on the point?""" start="00:09:03.000" video="qanda-llm" id="subtitle"]] [[!template text="""Yeah, that's a great way to say it.""" start="00:09:06.640" video="qanda-llm" id="subtitle"]] -[[!template text="""Thank you. Thank you, Colin. Yeah.""" start="00:09:09.080" video="qanda-llm" id="subtitle"]] +[[!template text="""Thank you. Thank you, Corwin. Yeah.""" start="00:09:09.080" video="qanda-llm" id="subtitle"]] [[!template text="""Thank you. Thank you for that question.""" start="00:09:12.440" video="qanda-llm" id="subtitle"]] -[[!template text="""Do you think we're falling behind in productivity as Emacs users""" start="00:09:14.040" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Do you think that we are falling behind in productivity as Emacs users? Compared to all these VSCode forks that have 1000 buttons and textboxes everywhere (i.e. much richer UIs which are basically webpages).""" start="00:09:14.040" video="qanda-llm" id="subtitle"]]</div>[[!template text="""Do you think we're falling behind in productivity as Emacs users""" start="00:09:14.040" video="qanda-llm" id="subtitle"]] [[!template text="""compared to all these VS code forks""" start="00:09:18.760" video="qanda-llm" id="subtitle"]] [[!template text="""that have a thousand button and text boxes everywhere,""" start="00:09:19.960" video="qanda-llm" id="subtitle"]] [[!template text="""which are basically much richer UIs,""" start="00:09:21.800" video="qanda-llm" id="subtitle"]] @@ -627,7 +632,8 @@ Captioner: amitav [[!template text="""Sorry, you have a ton of questions.""" start="00:12:07.600" video="qanda-llm" id="subtitle"]] [[!template text="""I shouldn't be doing so much active listening.""" start="00:12:10.360" video="qanda-llm" id="subtitle"]] [[!template text="""No, no, I appreciate your input.""" start="00:12:12.280" video="qanda-llm" id="subtitle"]] -[[!template text="""OK, next is I've been using Claude Code extensively.""" start="00:12:17.480" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: I've been using Claude Code extensively. I recently switched to Agent Shell with Claude Code. Have you tried it, what are your thoughts?""" start="00:12:17.480" video="qanda-llm" id="subtitle"]]</div>[[!template text="""OK, next is I've been using Claude Code extensively.""" start="00:12:17.480" video="qanda-llm" id="subtitle"]] [[!template text="""I recently switched to Agent Shell with Claude Code.""" start="00:12:23.080" video="qanda-llm" id="subtitle"]] [[!template text="""Have you tried it? And what are your thoughts?""" start="00:12:25.520" video="qanda-llm" id="subtitle"]] [[!template text="""I actually have tried Agent Shell.""" start="00:12:28.040" video="qanda-llm" id="subtitle"]] @@ -635,8 +641,8 @@ Captioner: amitav [[!template text="""So Agent Shell did not exist then.""" start="00:12:34.720" video="qanda-llm" id="subtitle"]] [[!template text="""If Agent Shell did exist,""" start="00:12:38.120" video="qanda-llm" id="subtitle"]] [[!template text="""I probably would have demoed it as well.""" start="00:12:39.720" video="qanda-llm" id="subtitle"]] -[[!template text="""Agent Hell is great in the sense of it's""" start="00:12:41.240" video="qanda-llm" id="subtitle"]] -[[!template text="""It does use comment, which is the way that I think all Emacs users""" start="00:12:45.360" video="qanda-llm" id="subtitle"]] +[[!template text="""Agent shell is great in the sense of it's...""" start="00:12:41.240" video="qanda-llm" id="subtitle"]] +[[!template text="""It does use comint, which is the way that I think all Emacs users""" start="00:12:45.360" video="qanda-llm" id="subtitle"]] [[!template text="""would prefer to interact with something like Claude Code,""" start="00:12:53.720" video="qanda-llm" id="subtitle"]] [[!template text="""or any of those types of tools, which is like, I don't.""" start="00:12:57.040" video="qanda-llm" id="subtitle"]] [[!template text="""Um, the other,""" start="00:13:00.200" video="qanda-llm" id="subtitle"]] @@ -653,9 +659,9 @@ Captioner: amitav [[!template text="""I couldn't do this in agent shell.""" start="00:13:30.240" video="qanda-llm" id="subtitle"]] [[!template text="""It's progressing rapidly.""" start="00:13:31.720" video="qanda-llm" id="subtitle"]] [[!template text="""But it's not as rich in functionality""" start="00:13:33.400" video="qanda-llm" id="subtitle"]] -[[!template text="""as using quad code directly.""" start="00:13:37.480" video="qanda-llm" id="subtitle"]] +[[!template text="""as using Claude Code directly.""" start="00:13:37.480" video="qanda-llm" id="subtitle"]] [[!template text="""On the other hand, because it's letting Emacs be Emacs""" start="00:13:40.120" video="qanda-llm" id="subtitle"]] -[[!template text="""and using comment, it's a much better experience""" start="00:13:44.840" video="qanda-llm" id="subtitle"]] +[[!template text="""and using comint, it's a much better experience""" start="00:13:44.840" video="qanda-llm" id="subtitle"]] [[!template text="""to actually give instructions.""" start="00:13:49.240" video="qanda-llm" id="subtitle"]] [[!template text="""I think the maximum power, though, is, to me,""" start="00:13:50.920" video="qanda-llm" id="subtitle"]] [[!template text="""the best way is still like, you know,""" start="00:13:56.520" video="qanda-llm" id="subtitle"]] @@ -669,10 +675,11 @@ Captioner: amitav [[!template text="""because you're really doing your typing""" start="00:14:18.760" video="qanda-llm" id="subtitle"]] [[!template text="""in order to me, I think there's""" start="00:14:20.040" video="qanda-llm" id="subtitle"]] [[!template text="""kind of the sweet spot that I like.""" start="00:14:21.440" video="qanda-llm" id="subtitle"]] -[[!template text="""Um, but HHL is a great step forward""" start="00:14:23.520" video="qanda-llm" id="subtitle"]] +[[!template text="""Um, but agent-shell is a great step forward""" start="00:14:23.520" video="qanda-llm" id="subtitle"]] [[!template text="""and I think it's, uh, it's quite good to use.""" start="00:14:26.640" video="qanda-llm" id="subtitle"]] [[!template text="""And I, I personally use it a lot.""" start="00:14:29.880" video="qanda-llm" id="subtitle"]] -[[!template text="""Um, OK, so in terms of, next question,""" start="00:14:32.120" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: In terms of agent selection, what has your experience been with different agents, and have you had any success with hosting your own models and using open weights?""" start="00:14:32.120" video="qanda-llm" id="subtitle"]]</div>[[!template text="""Um, OK, so in terms of, next question,""" start="00:14:32.120" video="qanda-llm" id="subtitle"]] [[!template text="""in terms of agent selection,""" start="00:14:40.480" video="qanda-llm" id="subtitle"]] [[!template text="""what has been your experience with different agents?""" start="00:14:41.840" video="qanda-llm" id="subtitle"]] [[!template text="""And have you had any success with hosting your own models""" start="00:14:44.640" video="qanda-llm" id="subtitle"]] @@ -681,7 +688,7 @@ Captioner: amitav [[!template text="""have many different opinions on this.""" start="00:14:54.160" video="qanda-llm" id="subtitle"]] [[!template text="""I think Claude Code is, most people I know""" start="00:14:56.520" video="qanda-llm" id="subtitle"]] [[!template text="""would say Claude Code is probably,""" start="00:15:00.840" video="qanda-llm" id="subtitle"]] -[[!template text="""sorry, Cloud is probably the best for coding right now.""" start="00:15:03.480" video="qanda-llm" id="subtitle"]] +[[!template text="""sorry, Claude is probably the best for coding right now.""" start="00:15:03.480" video="qanda-llm" id="subtitle"]] [[!template text="""Gemini can be very hit and miss even with 3.0,""" start="00:15:07.480" video="qanda-llm" id="subtitle"]] [[!template text="""but Claude is quite good.""" start="00:15:09.920" video="qanda-llm" id="subtitle"]] [[!template text="""4.5 Opus is actually relatively cheap""" start="00:15:12.520" video="qanda-llm" id="subtitle"]] @@ -711,7 +718,7 @@ Captioner: amitav [[!template text="""than the models that are elsewhere""" start="00:16:29.960" video="qanda-llm" id="subtitle"]] [[!template text="""just because they just have more horsepower,""" start="00:16:33.280" video="qanda-llm" id="subtitle"]] [[!template text="""they can churn through those tokens a little quicker.""" start="00:16:36.320" video="qanda-llm" id="subtitle"]] -[[!template text="""So, I'll just break in here to say,""" start="00:16:38.680" video="qanda-llm" id="subtitle"]] +[[!template text="""[Corwin]: So, I'll just break in here to say,""" start="00:16:38.680" video="qanda-llm" id="subtitle"]] [[!template text="""we've got about 7 minutes left""" start="00:16:44.720" video="qanda-llm" id="subtitle"]] [[!template text="""before we're cutting over this great discussion so far.""" start="00:16:46.240" video="qanda-llm" id="subtitle"]] [[!template text="""I'm very happy to keep going.""" start="00:16:49.240" video="qanda-llm" id="subtitle"]] @@ -720,15 +727,17 @@ Captioner: amitav [[!template text="""to jump in and prep with the next speaker,""" start="00:16:56.480" video="qanda-llm" id="subtitle"]] [[!template text="""but you'll be able to keep going""" start="00:16:58.680" video="qanda-llm" id="subtitle"]] [[!template text="""as long as you have the steam for it.""" start="00:17:00.360" video="qanda-llm" id="subtitle"]] -[[!template text="""Yeah, I think we have 3 questions. Yeah, thanks.""" start="00:17:02.600" video="qanda-llm" id="subtitle"]] +[[!template text="""[Andrew]: Yeah, I think we have 3 questions. Yeah, thanks.""" start="00:17:04.120" video="qanda-llm" id="subtitle"]] [[!template text="""I think we have 3 questions.""" start="00:17:06.160" video="qanda-llm" id="subtitle"]] [[!template text="""Let's see if we can get through them""" start="00:17:08.240" video="qanda-llm" id="subtitle"]] -[[!template text="""all in that time period. OK, this one is interesting talk.""" start="00:17:09.720" video="qanda-llm" id="subtitle"]] +[[!template text="""all in that time period.""" start="00:17:09.720" video="qanda-llm" id="subtitle"]] +[[!template text="""OK, this one is interesting talk.""" start="00:17:13.268" video="qanda-llm" id="subtitle"]] [[!template text="""I'll start by asking it for everything, but is it editing?""" start="00:17:17.360" video="qanda-llm" id="subtitle"]] [[!template text="""I think there's more of a comment than a question.""" start="00:17:20.440" video="qanda-llm" id="subtitle"]] [[!template text="""So yes, let us all ask, but is it editing?""" start="00:17:23.240" video="qanda-llm" id="subtitle"]] [[!template text="""All right. I can move on to the comment area.""" start="00:17:29.720" video="qanda-llm" id="subtitle"]] -[[!template text="""I'm reading angst in your thinking about AI editing.""" start="00:17:33.440" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: I'm reading angst in your thinking about AI/editing. What are you excited about?""" start="00:17:33.440" video="qanda-llm" id="subtitle"]]</div>[[!template text="""I'm reading angst in your thinking about AI editing.""" start="00:17:33.440" video="qanda-llm" id="subtitle"]] [[!template text="""I think that's true.""" start="00:17:40.320" video="qanda-llm" id="subtitle"]] [[!template text="""It says, and the question continues with,""" start="00:17:41.840" video="qanda-llm" id="subtitle"]] [[!template text="""what are you excited about?""" start="00:17:44.120" video="qanda-llm" id="subtitle"]] @@ -738,11 +747,11 @@ Captioner: amitav [[!template text="""with LLMs right now.""" start="00:17:58.720" video="qanda-llm" id="subtitle"]] [[!template text="""And I think there's lots of opportunities,""" start="00:18:01.440" video="qanda-llm" id="subtitle"]] [[!template text="""clever opportunities to do things""" start="00:18:04.600" video="qanda-llm" id="subtitle"]] -[[!template text="""we couldn't have thought of Things that are useful,""" start="00:18:07.840" video="qanda-llm" id="subtitle"]] +[[!template text="""we couldn't have thought of... Things that are useful,""" start="00:18:07.840" video="qanda-llm" id="subtitle"]] [[!template text="""but in ways that are not super obvious to us,""" start="00:18:11.080" video="qanda-llm" id="subtitle"]] [[!template text="""and I think I'm still excited""" start="00:18:14.920" video="qanda-llm" id="subtitle"]] -[[!template text="""about the possibilities of using them in ways that are super helpful""" start="00:18:18.520" video="qanda-llm" id="subtitle"]] -[[!template text="""and different than. normal. I'll give you an example.""" start="00:18:23.840" video="qanda-llm" id="subtitle"]] +[[!template text="""about the possibilities of using them in ways that are super helpful""" start="00:18:17.020" video="qanda-llm" id="subtitle"]] +[[!template text="""and different than normal. I'll give you an example.""" start="00:18:22.940" video="qanda-llm" id="subtitle"]] [[!template text="""This is something that I intend to, I think,""" start="00:18:29.320" video="qanda-llm" id="subtitle"]] [[!template text="""post on Reddit in a few days,""" start="00:18:33.200" video="qanda-llm" id="subtitle"]] [[!template text="""but I have a extension to eshell""" start="00:18:36.480" video="qanda-llm" id="subtitle"]] @@ -755,36 +764,37 @@ Captioner: amitav [[!template text="""It's like a find, and there's like a dash print there somewhere.""" start="00:19:00.160" video="qanda-llm" id="subtitle"]] [[!template text="""Yes. There are some smart people who remember this""" start="00:19:04.800" video="qanda-llm" id="subtitle"]] [[!template text="""but I am not one of them.""" start="00:19:10.160" video="qanda-llm" id="subtitle"]] -[[!template text="""And so I think like something like this is like you just type out,""" start="00:19:11.200" video="qanda-llm" id="subtitle"]] +[[!template text="""And so I think, like, something like this is like, you just type out,""" start="00:19:11.200" video="qanda-llm" id="subtitle"]] [[!template text="""find me this file, and it will substitute""" start="00:19:13.640" video="qanda-llm" id="subtitle"]] [[!template text="""the correct command.""" start="00:19:17.280" video="qanda-llm" id="subtitle"]] [[!template text="""I think this is, there's a lot of little,""" start="00:19:18.880" video="qanda-llm" id="subtitle"]] [[!template text="""little tweaks you could do like, you know, if you want the AI,""" start="00:19:21.000" video="qanda-llm" id="subtitle"]] -[[!template text="""it could be there for you. And it will help you.""" start="00:19:24.320" video="qanda-llm" id="subtitle"]] +[[!template text="""it could be there for you, and it will help you.""" start="00:19:24.320" video="qanda-llm" id="subtitle"]] [[!template text="""And if you don't want it,""" start="00:19:26.680" video="qanda-llm" id="subtitle"]] [[!template text="""it's not going to get in your way.""" start="00:19:27.560" video="qanda-llm" id="subtitle"]] -[[!template text="""And I think this is where eMath can really shine.""" start="00:19:28.920" video="qanda-llm" id="subtitle"]] +[[!template text="""And I think this is where Emacs can really shine.""" start="00:19:28.920" video="qanda-llm" id="subtitle"]] [[!template text="""It can really take advantage of LLMs,""" start="00:19:30.640" video="qanda-llm" id="subtitle"]] [[!template text="""but still remain true to its kind of editing experience,""" start="00:19:33.080" video="qanda-llm" id="subtitle"]] [[!template text="""because it's not forcing you to use LLMs all the time.""" start="00:19:35.800" video="qanda-llm" id="subtitle"]] [[!template text="""So thank you for that great question.""" start="00:19:39.320" video="qanda-llm" id="subtitle"]] [[!template text="""And then the final question. Yep.""" start="00:19:43.920" video="qanda-llm" id="subtitle"]] -[[!template text="""This final question is, why does it matter to have a richer UI?""" start="00:19:47.920" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Why does it matter to have a richer UI? All that is left is basically writing and getting the results.""" start="00:19:47.920" video="qanda-llm" id="subtitle"]]</div>[[!template text="""This final question is, why does it matter to have a richer UI?""" start="00:19:47.920" video="qanda-llm" id="subtitle"]] [[!template text="""All this left is basically running and getting the results.""" start="00:19:50.840" video="qanda-llm" id="subtitle"]] [[!template text="""I think maybe this is a response to me complaining""" start="00:19:53.440" video="qanda-llm" id="subtitle"]] [[!template text="""about Emacs not having a richer UI before,""" start="00:19:56.120" video="qanda-llm" id="subtitle"]] [[!template text="""but I think it does matter a lot for all sorts of things.""" start="00:19:58.480" video="qanda-llm" id="subtitle"]] -[[!template text="""It's hard to kind of explain succinctly""" start="00:20:03.160" video="qanda-llm" id="subtitle"]] +[[!template text="""It's hard to kind of explain succinctly,""" start="00:20:03.160" video="qanda-llm" id="subtitle"]] [[!template text="""because I'm talking about UI""" start="00:20:07.160" video="qanda-llm" id="subtitle"]] [[!template text="""and I'd have to show you things.""" start="00:20:08.520" video="qanda-llm" id="subtitle"]] -[[!template text="""But it should be just something like oh I have an error""" start="00:20:09.760" video="qanda-llm" id="subtitle"]] +[[!template text="""But it should be just something like, oh I have an error,""" start="00:20:09.760" video="qanda-llm" id="subtitle"]] [[!template text="""and I'm using flymake and I'm,""" start="00:20:14.600" video="qanda-llm" id="subtitle"]] -[[!template text="""I'm using the you know I have options""" start="00:20:15.800" video="qanda-llm" id="subtitle"]] +[[!template text="""I'm using the... I have options""" start="00:20:15.800" video="qanda-llm" id="subtitle"]] [[!template text="""where it'll show me the error in line""" start="00:20:17.760" video="qanda-llm" id="subtitle"]] -[[!template text="""by like underlining things and having a little message,""" start="00:20:19.840" video="qanda-llm" id="subtitle"]] -[[!template text="""but like, you know what that message""" start="00:20:22.640" video="qanda-llm" id="subtitle"]] -[[!template text="""doesn't appear quite right, a lot of the times,""" start="00:20:24.080" video="qanda-llm" id="subtitle"]] -[[!template text="""or here's another one like. I program in Python a lot.""" start="00:20:26.400" video="qanda-llm" id="subtitle"]] +[[!template text="""by underlining things and having a little message,""" start="00:20:19.840" video="qanda-llm" id="subtitle"]] +[[!template text="""but like, you know what, that message""" start="00:20:22.640" video="qanda-llm" id="subtitle"]] +[[!template text="""doesn't appear quite right a lot of the times.""" start="00:20:24.080" video="qanda-llm" id="subtitle"]] +[[!template text="""Or here's another one like. I program in Python a lot.""" start="00:20:26.400" video="qanda-llm" id="subtitle"]] [[!template text="""And Python, it's super hard to program in""" start="00:20:30.160" video="qanda-llm" id="subtitle"]] [[!template text="""unless you have these little vertical lines""" start="00:20:33.480" video="qanda-llm" id="subtitle"]] [[!template text="""that shows you what the indents are. At least I find it.""" start="00:20:35.280" video="qanda-llm" id="subtitle"]] @@ -794,26 +804,27 @@ Captioner: amitav [[!template text="""does not allow you to do this.""" start="00:20:44.600" video="qanda-llm" id="subtitle"]] [[!template text="""And so you kind of have to hack it in.""" start="00:20:45.920" video="qanda-llm" id="subtitle"]] [[!template text="""And there's lots of ways to mess it up.""" start="00:20:47.760" video="qanda-llm" id="subtitle"]] -[[!template text="""And when editing, you'll find yourself messing this thing up.""" start="00:20:49.480" video="qanda-llm" id="subtitle"]] -[[!template text="""regularly. So it doesn't look quite clean.""" start="00:20:52.800" video="qanda-llm" id="subtitle"]] +[[!template text="""And when editing, you'll find yourself""" start="00:20:49.480" video="qanda-llm" id="subtitle"]] +[[!template text="""messing this thing up regularly.""" start="00:20:52.157" video="qanda-llm" id="subtitle"]] +[[!template text="""So it doesn't look quite clean.""" start="00:20:55.261" video="qanda-llm" id="subtitle"]] [[!template text="""And like, there's little artifacts,""" start="00:20:57.160" video="qanda-llm" id="subtitle"]] [[!template text="""or, you know, there's little ways that it,""" start="00:20:59.080" video="qanda-llm" id="subtitle"]] [[!template text="""it kind of gets things wrong,""" start="00:21:01.040" video="qanda-llm" id="subtitle"]] -[[!template text="""or you can, you can get things wrong with it.""" start="00:21:02.360" video="qanda-llm" id="subtitle"]] -[[!template text="""So I think that, like,""" start="00:21:06.280" video="qanda-llm" id="subtitle"]] -[[!template text="""there's a lot of issues with that sort of thing.""" start="00:21:10.040" video="qanda-llm" id="subtitle"]] -[[!template text="""And, and also, like, you know,""" start="00:21:11.880" video="qanda-llm" id="subtitle"]] +[[!template text="""or you can get things wrong with it.""" start="00:21:02.360" video="qanda-llm" id="subtitle"]] +[[!template text="""So I think that, like,""" start="00:21:03.940" video="qanda-llm" id="subtitle"]] +[[!template text="""there's a lot of issues with that sort of thing.""" start="00:21:07.520" video="qanda-llm" id="subtitle"]] +[[!template text="""And also, like, you know,""" start="00:21:13.620" video="qanda-llm" id="subtitle"]] [[!template text="""what if you want to do something like play a video inline,""" start="00:21:15.760" video="qanda-llm" id="subtitle"]] [[!template text="""like, I don't know, you might should be able to do that,""" start="00:21:17.720" video="qanda-llm" id="subtitle"]] [[!template text="""you might should be able to do anything.""" start="00:21:19.560" video="qanda-llm" id="subtitle"]] -[[!template text="""But right now it just can't and I think""" start="00:21:20.840" video="qanda-llm" id="subtitle"]] -[[!template text="""a lot of the reason as well""" start="00:21:23.800" video="qanda-llm" id="subtitle"]] -[[!template text="""we you know we wanted to be compatible""" start="00:21:25.000" video="qanda-llm" id="subtitle"]] -[[!template text="""with you know TRS 80 machines or something like that""" start="00:21:26.520" video="qanda-llm" id="subtitle"]] -[[!template text="""and it's this is important this really is important,""" start="00:21:29.920" video="qanda-llm" id="subtitle"]] +[[!template text="""But right now, it just can't. I think""" start="00:21:21.600" video="qanda-llm" id="subtitle"]] +[[!template text="""a lot of the reason as well...""" start="00:21:23.800" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, we wanted to be compatible""" start="00:21:25.000" video="qanda-llm" id="subtitle"]] +[[!template text="""with TRS 80 machines or something like that.""" start="00:21:26.520" video="qanda-llm" id="subtitle"]] +[[!template text="""This is important, this really is important,""" start="00:21:29.920" video="qanda-llm" id="subtitle"]] [[!template text="""but I hope there's some way""" start="00:21:33.160" video="qanda-llm" id="subtitle"]] [[!template text="""that we can kind of eventually figure out""" start="00:21:34.720" video="qanda-llm" id="subtitle"]] -[[!template text="""how to get the best of you know both compatibility and.""" start="00:21:36.080" video="qanda-llm" id="subtitle"]] +[[!template text="""how to get the best of both compatibility and""" start="00:21:36.080" video="qanda-llm" id="subtitle"]] [[!template text="""more modern UIs. So, you know, we can have more modern UIs""" start="00:21:39.280" video="qanda-llm" id="subtitle"]] [[!template text="""for people that have modern machines and other people""" start="00:21:44.880" video="qanda-llm" id="subtitle"]] [[!template text="""either do without that functionality""" start="00:21:49.840" video="qanda-llm" id="subtitle"]] @@ -832,17 +843,18 @@ Captioner: amitav [[!template text="""And I know there's more people""" start="00:22:21.280" video="qanda-llm" id="subtitle"]] [[!template text="""that are working behind the scenes.""" start="00:22:21.920" video="qanda-llm" id="subtitle"]] [[!template text="""So thank you all for putting this together.""" start="00:22:23.320" video="qanda-llm" id="subtitle"]] -[[!template text="""I'm so happy that we all are here. We care about Emacs.""" start="00:22:25.080" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:22:25.080" video="qanda-llm" id="subtitle"]]</div>[[!template text="""I'm so happy that we all are here. We care about Emacs.""" start="00:22:25.080" video="qanda-llm" id="subtitle"]] [[!template text="""We're pushing Emacs forward.""" start="00:22:29.200" video="qanda-llm" id="subtitle"]] [[!template text="""We are I think Emacs remains""" start="00:22:31.200" video="qanda-llm" id="subtitle"]] [[!template text="""this really remarkable achievement.""" start="00:22:35.960" video="qanda-llm" id="subtitle"]] [[!template text="""Like it's amazing that it exists. It continues to exist.""" start="00:22:37.280" video="qanda-llm" id="subtitle"]] -[[!template text="""It hasn't got, it's hard.""" start="00:22:41.800" video="qanda-llm" id="subtitle"]] +[[!template text="""It hasn't got... It's hard.""" start="00:22:41.800" video="qanda-llm" id="subtitle"]] [[!template text="""It's like, really, there's a lot of work to go into it.""" start="00:22:43.000" video="qanda-llm" id="subtitle"]] -[[!template text="""So I think let's all just appreciate everyone who,""" start="00:22:45.160" video="qanda-llm" id="subtitle"]] -[[!template text="""who like contributes and makes all of this possible.""" start="00:22:47.560" video="qanda-llm" id="subtitle"]] +[[!template text="""So I think let's all just appreciate everyone""" start="00:22:45.160" video="qanda-llm" id="subtitle"]] +[[!template text="""who contributes and makes all of this possible.""" start="00:22:47.560" video="qanda-llm" id="subtitle"]] [[!template text="""Cause it's, if you ever read""" start="00:22:50.680" video="qanda-llm" id="subtitle"]] -[[!template text="""the Emacs Develop mailing list,""" start="00:22:52.160" video="qanda-llm" id="subtitle"]] +[[!template text="""the emacs-devel mailing list,""" start="00:22:52.160" video="qanda-llm" id="subtitle"]] [[!template text="""it's a lot of work, a lot of deep thinking,""" start="00:22:53.280" video="qanda-llm" id="subtitle"]] [[!template text="""a lot of careful thinking.""" start="00:22:55.480" video="qanda-llm" id="subtitle"]] [[!template text="""And I think this is really important.""" start="00:22:56.680" video="qanda-llm" id="subtitle"]] @@ -850,17 +862,19 @@ Captioner: amitav [[!template text="""and everyone who's contributing to the core experience,""" start="00:23:02.040" video="qanda-llm" id="subtitle"]] [[!template text="""all the libraries, all the LLM stuff we mentioned before.""" start="00:23:04.200" video="qanda-llm" id="subtitle"]] [[!template text="""You're all doing such a fantastic job.""" start="00:23:07.760" video="qanda-llm" id="subtitle"]] -[[!template text="""It's exciting to be here. Thank you for your talk, Andrew.""" start="00:23:09.840" video="qanda-llm" id="subtitle"]] +[[!template text="""It's exciting to be here.""" start="00:23:09.840" video="qanda-llm" id="subtitle"]] +[[!template text="""[Corwin]: Thank you for your talk, Andrew.""" start="00:23:12.324" video="qanda-llm" id="subtitle"]] [[!template text="""It's been just fascinating.""" start="00:23:13.800" video="qanda-llm" id="subtitle"]] [[!template text="""If you don't mind, I'd love to jump""" start="00:23:16.160" video="qanda-llm" id="subtitle"]] [[!template text="""right over to the last question. OK, let's do that.""" start="00:23:19.760" video="qanda-llm" id="subtitle"]] -[[!template text="""It says, I have 45 plus years editing programming.""" start="00:23:23.880" video="qanda-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: I have 45+ years editing, programming. I'm not sure I can think about things without thinking of buffers, editors etc. Is this a handicap/should we just have people with no experience with code learn to prompt?""" start="00:23:23.880" video="qanda-llm" id="subtitle"]]</div>[[!template text="""It says, I have 45 plus years editing programming.""" start="00:23:23.880" video="qanda-llm" id="subtitle"]] [[!template text="""I'm not sure I can think about things""" start="00:23:27.600" video="qanda-llm" id="subtitle"]] [[!template text="""without thinking of buffers, editors, et cetera.""" start="00:23:29.240" video="qanda-llm" id="subtitle"]] [[!template text="""Is this the handicap?""" start="00:23:31.040" video="qanda-llm" id="subtitle"]] [[!template text="""Should we have people with no experience""" start="00:23:31.960" video="qanda-llm" id="subtitle"]] [[!template text="""with code learning to prompt?""" start="00:23:34.240" video="qanda-llm" id="subtitle"]] -[[!template text="""Well, this is something I do have a strong opinion about.""" start="00:23:35.320" video="qanda-llm" id="subtitle"]] +[[!template text="""[Andrew]: Well, this is something I do have a strong opinion about.""" start="00:23:35.320" video="qanda-llm" id="subtitle"]] [[!template text="""I feel like I do not want to see people that have no experience""" start="00:23:38.800" video="qanda-llm" id="subtitle"]] [[!template text="""with code learning to prompt. I think it's very limited""" start="00:23:42.160" video="qanda-llm" id="subtitle"]] [[!template text="""what you could do right now with that.""" start="00:23:44.120" video="qanda-llm" id="subtitle"]] @@ -876,12 +890,12 @@ Captioner: amitav [[!template text="""Software engineering is about maintainability.""" start="00:24:09.880" video="qanda-llm" id="subtitle"]] [[!template text="""Software engineering is making sure everything is scalable""" start="00:24:11.880" video="qanda-llm" id="subtitle"]] [[!template text="""and all sorts of things that it's unlikely,""" start="00:24:15.120" video="qanda-llm" id="subtitle"]] -[[!template text="""I think, that an LM is going to get right.""" start="00:24:19.600" video="qanda-llm" id="subtitle"]] +[[!template text="""I think, that an LLM is going to get right.""" start="00:24:19.600" video="qanda-llm" id="subtitle"]] [[!template text="""And I've seen a lot of bad cases""" start="00:24:21.760" video="qanda-llm" id="subtitle"]] [[!template text="""where people who don't understand code""" start="00:24:25.280" video="qanda-llm" id="subtitle"]] -[[!template text="""are doing things and it's not working well""" start="00:24:27.200" video="qanda-llm" id="subtitle"]] +[[!template text="""are doing things and it's not working well,""" start="00:24:27.200" video="qanda-llm" id="subtitle"]] [[!template text="""because they don't understand""" start="00:24:31.160" video="qanda-llm" id="subtitle"]] -[[!template text="""some of the some of the complexities""" start="00:24:33.240" video="qanda-llm" id="subtitle"]] +[[!template text="""some of the complexities""" start="00:24:33.240" video="qanda-llm" id="subtitle"]] [[!template text="""or some of the concerns that that you might have""" start="00:24:35.280" video="qanda-llm" id="subtitle"]] [[!template text="""in maintaining a piece of code.""" start="00:24:36.960" video="qanda-llm" id="subtitle"]] [[!template text="""So I think those people who have lots of experience""" start="00:24:43.280" video="qanda-llm" id="subtitle"]] @@ -896,8 +910,7 @@ Captioner: amitav [[!template text="""So I think, you know, I also have a ton of experience,""" start="00:25:03.080" video="qanda-llm" id="subtitle"]] [[!template text="""not 45 years, but a lot. And, and I think that it's those,""" start="00:25:06.320" video="qanda-llm" id="subtitle"]] [[!template text="""those years of experience will only help you.""" start="00:25:13.080" video="qanda-llm" id="subtitle"]] -[[!template text="""And I think it's, it's, it's a great,""" start="00:25:14.840" video="qanda-llm" id="subtitle"]] -[[!template text="""it's great to kind of dip your toes in the water""" start="00:25:16.920" video="qanda-llm" id="subtitle"]] +[[!template text="""And I think it's great to dip your toes in the water""" start="00:25:14.840" video="qanda-llm" id="subtitle"]] [[!template text="""and see what you can do.""" start="00:25:19.640" video="qanda-llm" id="subtitle"]] </div>Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20Emacs%2C%20editors%2C%20and%20LLM%20driven%20workflows) diff --git a/2025/info/llm-before.md b/2025/info/llm-before.md index 23cd880a..e905a181 100644 --- a/2025/info/llm-before.md +++ b/2025/info/llm-before.md @@ -14,6 +14,19 @@ Status: TO_REVIEW_QA # Q&A -<div class="vid qanda"><video controls preload="none" id="qanda-llm"><source src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.m4v" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 27:34 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-llm">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.m4v">Download --answers.m4v (94MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.webm">Download --answers.webm (91MB)</a></li></ul></div></div> +<div class="vid qanda"><video controls preload="none" id="qanda-llm"><source src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-llm" data=""" +00:00.000 Q: My biggest question with AI code editors trying to integrate with Emacs is -- are the AI code editors able to read unsaved buffers and not just saved files? +02:20.320 Q: Personally I don't agree with the comment you made about VS Code usage dying out because I see companies/products pushing for tightly-integrated VS-Code agents/products like Windsurf. Thoughts? +03:47.760 Q: Do you have any thoughts about the environmental cost of using LLMs - either the training of models we can download and use locally, or the larger, commercial models used from the cloud? +06:09.080 Q: I must say, I liked your conclusion, but I differ insofar as you said that VS Code differ from Emacs because the former is not as easy to adapt as the latter. Why should Microsoft not adapt VS Code as we adapt Emacs for the new era of coding? And why would VS Code be harder hit? Could you please elaborate on this point? +09:14.040 Q: Do you think that we are falling behind in productivity as Emacs users? Compared to all these VSCode forks that have 1000 buttons and textboxes everywhere (i.e. much richer UIs which are basically webpages). +12:17.480 Q: I've been using Claude Code extensively. I recently switched to Agent Shell with Claude Code. Have you tried it, what are your thoughts? +14:32.120 Q: In terms of agent selection, what has your experience been with different agents, and have you had any success with hosting your own models and using open weights? +17:33.440 Q: I'm reading angst in your thinking about AI/editing. What are you excited about? +19:47.920 Q: Why does it matter to have a richer UI? All that is left is basically writing and getting the results. +22:25.080 Wrapping up +23:23.880 Q: I have 45+ years editing, programming. I'm not sure I can think about things without thinking of buffers, editors etc. Is this a handicap/should we just have people with no experience with code learn to prompt? + +"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-llm-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.opus"></audio></div><div></div>Duration: 25:20 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-llm">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.m4v">Download --answers.m4v (94MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--answers.webm">Download --answers.webm (91MB)</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/modern-after.md b/2025/info/modern-after.md index 4518aec2..42ca8f4e 100644 --- a/2025/info/modern-after.md +++ b/2025/info/modern-after.md @@ -3,12 +3,28 @@ <div class="transcript transcript-mainVideo"><a name="modern-mainVideo-transcript"></a><h1>Transcript (unedited)</h1> -[[!template text="""""" start="00:00:54.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""Hi, my name is Eduardo Ochs,""" start="00:00:00.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and this is my video for the EmacsConf 2025.""" start="00:00:02.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Its title is Some Problems of Modernizing Emacs,""" start="00:00:06.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and that is the same title as a video""" start="00:00:09.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that I tried to record in March.""" start="00:00:12.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""But my video from March had a good "beginning" and a bad "rest",""" start="00:00:16.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and I thought, I can't release that because the rest is very bad.""" start="00:00:19.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I need to replace... to re-record the last part of the video.""" start="00:00:23.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""But I never did that.""" start="00:00:27.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So this video is going to be the first 12 minutes""" start="00:00:29.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of that other video, with another ending.""" start="00:00:33.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And in this other ending, I'm going to show some things""" start="00:00:37.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that are very easy to test. And, if people are interested,""" start="00:00:41.440" video="mainVideo-modern" id="subtitle"]] +[[!template text="""then the rest of the old video will make more sense.""" start="00:00:46.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Anyway, let me start.""" start="00:00:51.800" video="mainVideo-modern" id="subtitle"]] [[!template text="""Hi! My name is Eduardo Ochs. I'm the""" start="00:00:55.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""author of an Emacs package called eev and""" start="00:00:57.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the title of this video is""" start="00:01:00.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""Some problems of modernizing Emacs".""" start="00:01:03.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""Here is a summary of the main themes""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The main themes of this video""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""Here is a summary of the main themes""" start="00:01:05.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""of this video. I'm going to talk mainly""" start="00:01:08.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""about these four things here. The first""" start="00:01:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""one is that Emacs has changed a lot in its""" start="00:01:12.000" video="mainVideo-modern" id="subtitle"]] @@ -28,33 +44,36 @@ [[!template text="""very short summary... details soon.""" start="00:02:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I will also show how to display""" start="00:02:08.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""better "inner views" of Emacs objects...""" start="00:02:10.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""I'm going to Define what is an inner view,""" start="00:02:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I'm going to define what is an inner view,""" start="00:02:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""of course.""" start="00:02:16.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""The main trick is that we are going""" start="00:02:18.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Inner views of Emacs objects""" start="00:02:18.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""The main trick is that we are going""" start="00:02:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""to use one of the ways of displaying""" start="00:02:20.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""internal objects, that is the `cl-print'""" start="00:02:24.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""internal objects, that is the `cl-print`""" start="00:02:24.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""family of functions, for example,""" start="00:02:29.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""`cl-prin1-to-string', and here are some""" start="00:02:32.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""`cl-prin1-to-string`, and here are some""" start="00:02:32.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""examples of the kind of output that we""" start="00:02:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""are going to see...""" start="00:02:37.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""for example, if we run these two lines""" start="00:02:38.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""here the first line defines a function `foo'""" start="00:02:44.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""and the second line sets `o' to the""" start="00:02:47.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""internal view of the definition of `foo'.""" start="00:02:52.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""In older Emacses `o' would be just a""" start="00:02:54.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""here the first line defines a function `foo`""" start="00:02:44.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and the second line sets `o` to the""" start="00:02:47.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""internal view of the definition of `foo`.""" start="00:02:52.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Older Emacses""" start="00:02:54.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""In older Emacses `o` would be just a""" start="00:02:54.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""list that looks... that would look very""" start="00:02:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""similar to this line here... but in newer""" start="00:03:02.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Emacses the result of this - I mean, the""" start="00:03:05.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""the contents of `o' is this thing here,""" start="00:03:09.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the contents of `o` is this thing here,""" start="00:03:09.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that looks quite different""" start="00:03:12.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""from this definition.""" start="00:03:15.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""So, in older Emacses""" start="00:03:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the contents of the""" start="00:03:21.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""function cell of `o'...""" start="00:03:25.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""sorry, of the function cell of `foo',""" start="00:03:28.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""function cell of `o`...""" start="00:03:25.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""sorry, of the function cell of `foo`,""" start="00:03:28.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""would be an "old-style lambda",""" start="00:03:30.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that would be just a list like this...""" start="00:03:32.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""and in newer Emacses uh the contents of O would""" start="00:03:35.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Newer Emacses""" start="00:03:35.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""and in newer Emacses uh the contents of O would""" start="00:03:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""be a "vector-like lambda"... look for the""" start="00:03:39.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""square brackets here - this is a""" start="00:03:42.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""vector, but it is preceded by a hash sign.""" start="00:03:44.000" video="mainVideo-modern" id="subtitle"]] @@ -67,32 +86,33 @@ [[!template text="""The first semicanonical""" start="00:03:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""printed representation is this one, that is""" start="00:04:01.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""generated by a family of functions with""" start="00:04:04.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""names like `prin1'...""" start="00:04:07.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""names like `prin1`...""" start="00:04:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and the second semicanonical printed""" start="00:04:09.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""representation is like this -""" start="00:04:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""it looks like a list...""" start="00:04:17.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""it looks somewhat like this definition""" start="00:04:20.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""of `foo' here, but it has this""" start="00:04:23.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""`:dynbind' symbol here...""" start="00:04:27.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of `foo` here, but it has this""" start="00:04:23.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""`:dynbind` symbol here...""" start="00:04:27.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and it turns out that when we use""" start="00:04:29.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""the `cl-print' family of functions we can""" start="00:04:32.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the `cl-print` family of functions we can""" start="00:04:32.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""reconfigure how things are printed...""" start="00:04:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and I'm going to show several interesting""" start="00:04:37.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""ways of reconfiguring how lambdas are printed,""" start="00:04:40.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and one of the ways is going to""" start="00:04:47.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""be like this.""" start="00:04:49.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""We can also use the `cl-print'""" start="00:04:52.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""We can also use the `cl-print`""" start="00:04:52.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""functions with my indentation tricks to""" start="00:04:56.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""to display how types, or classes, are""" start="00:04:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""viewed internally by Emacs, and this is a""" start="00:05:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""big example...""" start="00:05:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""This is what Emacs considers as being""" start="00:05:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""the definition of the type""" start="00:05:14.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""`cl-structure-class',""" start="00:05:16.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""`cl-structure-class`,""" start="00:05:16.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""class and it is this big thing here.""" start="00:05:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I edited it very lightly...""" start="00:05:21.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""I just uh deleted some line breaks here.""" start="00:05:24.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""And another thing that I want to to""" start="00:05:30.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I just deleted some line breaks here.""" start="00:05:24.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Help buttons""" start="00:05:30.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""And another thing that I want to""" start="00:05:30.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""explain is that Emacs""" start="00:05:33.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""has some help functions that""" start="00:05:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""I have never liked...""" start="00:05:37.000" video="mainVideo-modern" id="subtitle"]] @@ -104,8 +124,8 @@ [[!template text="""if we want a description of what is""" start="00:05:52.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this type here, that we just saw in""" start="00:05:54.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""its internal view here...""" start="00:05:58.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""we can run either `describe-type'""" start="00:06:00.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""or my variant of `describe-type',""" start="00:06:02.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we can run either `describe-type`""" start="00:06:00.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""or my variant of `describe-type`,""" start="00:06:02.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and we get a help buffer""" start="00:06:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""that looks like this, in which""" start="00:06:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""these blue things that are underlined""" start="00:06:10.000" video="mainVideo-modern" id="subtitle"]] @@ -120,7 +140,8 @@ [[!template text="""problems with these kinds of help buffers""" start="00:06:33.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and what I'm trying to do to""" start="00:06:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""overcome these problems...""" start="00:06:37.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""One of my slogans in this video""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text=""""Anyone can learn Lisp in one day"""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""One of my slogans in this video""" start="00:06:41.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""is going to be this one:""" start="00:06:43.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""Anyone can learn Lisp in one day".""" start="00:06:43.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this is a part of a bigger quote""" start="00:06:45.000" video="mainVideo-modern" id="subtitle"]] @@ -143,10 +164,10 @@ [[!template text="""one is its "value as a variable"""" start="00:07:53.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and another one is its "value as a function"...""" start="00:07:54.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and if we run this we store 42""" start="00:07:58.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""in the "value cell" of the symbol `foo', and""" start="00:08:02.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in the "value cell" of the symbol `foo`, and""" start="00:08:02.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we run this defun here it stores a""" start="00:08:07.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""certain anonymous function in the""" start="00:08:11.000" video="mainVideo-modern" id="subtitle"]] -[[!template text=""""function cell" of the symbol `foo'...""" start="00:08:14.000" video="mainVideo-modern" id="subtitle"]] +[[!template text=""""function cell" of the symbol `foo`...""" start="00:08:14.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and in Emacs, until some time ago""" start="00:08:18.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we did that and and if we ran""" start="00:08:22.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this expression here the result""" start="00:08:27.000" video="mainVideo-modern" id="subtitle"]] @@ -163,9 +184,9 @@ [[!template text="""if we did that and if we ran""" start="00:08:56.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""this expression here, (foo foo)...""" start="00:08:58.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Emacs would do this: it would""" start="00:09:01.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""replace the first `foo' by this""" start="00:09:04.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""replace the first `foo` by this""" start="00:09:04.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""anonymous function here, it would replace""" start="00:09:06.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""the second `foo' by the value of `foo' as a""" start="00:09:09.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the second `foo` by the value of `foo` as a""" start="00:09:09.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""variable, that is 42,""" start="00:09:11.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and it would evaluate this, and the""" start="00:09:13.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""result would be 420.""" start="00:09:16.000" video="mainVideo-modern" id="subtitle"]] @@ -174,7 +195,8 @@ [[!template text="""but now this is gone.""" start="00:09:26.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Let me show... let me talk""" start="00:09:28.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""a bit more about why...""" start="00:09:30.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""the title of this slide is""" start="00:09:34.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Lambdas for beginners broken""" start="00:09:34.000" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""the title of this slide is""" start="00:09:34.000" video="mainVideo-modern" id="subtitle"]] [[!template text=""""Lambdas for beginners broken"...""" start="00:09:36.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""if we run this, as I've shown""" start="00:09:38.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""in the previous slide...""" start="00:09:41.000" video="mainVideo-modern" id="subtitle"]] @@ -210,7 +232,7 @@ [[!template text="""before 2024 beginners could""" start="00:11:06.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""open black boxes like this...""" start="00:11:12.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""they could try to see what was in the""" start="00:11:17.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""function cell of the symbol `foo'...""" start="00:11:20.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""function cell of the symbol `foo`...""" start="00:11:20.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and they would see something elegant and""" start="00:11:24.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""mind-blowing... and they would start to love""" start="00:11:27.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Lisp immediately.""" start="00:11:29.000" video="mainVideo-modern" id="subtitle"]] @@ -219,14 +241,13 @@ [[!template text="""that is very powerful but that is""" start="00:11:35.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""very difficult to understand...""" start="00:11:39.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and now our beginners are overwhelmed""" start="00:11:41.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""instead of mind-blown.""" start="00:11:44.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""Note that I said "black box" here.""" start="00:11:46.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""instead of mind-blown. Note that I said "black box" here.""" start="00:11:44.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Let me explain the term.""" start="00:11:48.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""We can open what's inside of `foo'...""" start="00:11:52.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""we can open `foo' to see the contents of""" start="00:11:57.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""the symbol `foo', and we can try to see""" start="00:11:59.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""We can open what's inside of `foo`...""" start="00:11:52.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we can open `foo` to see the contents of""" start="00:11:57.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the symbol `foo`, and we can try to see""" start="00:11:59.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""what's in the function cell of the""" start="00:12:02.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""symbol `foo'...""" start="00:12:06.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""symbol `foo`...""" start="00:12:06.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""so we can open the box, but what we get""" start="00:12:08.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""is something very difficult to understand,""" start="00:12:10.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""and so I'm going to say that""" start="00:12:13.000" video="mainVideo-modern" id="subtitle"]] @@ -243,7 +264,222 @@ [[!template text="""that are not so elegant""" start="00:12:50.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""as the ones that we had before.""" start="00:12:52.000" video="mainVideo-modern" id="subtitle"]] [[!template text="""Anyway...""" start="00:12:54.000" video="mainVideo-modern" id="subtitle"]] -[[!template text="""""" start="00:12:56.000" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:12:59.302" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""In the beginning of the video,""" start="00:12:59.302" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I said that I was going to replace""" start="00:13:00.600" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the second part of my video from March""" start="00:13:02.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by something that was very easy to test.""" start="00:13:06.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So this is a quick demo for the _very_ impatient.""" start="00:13:08.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I'm recording this in December for the EmacsConf 2025.""" start="00:13:11.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""This is the demo that I'm going to present.""" start="00:13:16.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The idea is that people can run the demo a first time""" start="00:13:19.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""just to check that everything works""" start="00:13:21.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and to have a notion of how things look like,""" start="00:13:24.400" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and then, in a second moment,""" start="00:13:27.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""they can rerun the demo more slowly""" start="00:13:29.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to understand what each step does.""" start="00:13:32.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So... we are in a file called "00-try-this"...""" start="00:13:34.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and the idea is that we can execute most of this file""" start="00:13:38.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""just by typing `f8`​s in the right places.""" start="00:13:42.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Remember that when we type `f8`""" start="00:13:45.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""on a line that starts with two red stars,""" start="00:13:47.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""eev treats that line as a comment.""" start="00:13:49.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So I'm going to start here... Note that it says in the bottom""" start="00:13:53.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of the screen that this is a comment.""" start="00:13:58.008" video="mainVideo-modern" id="subtitle"]] +[[!template text="""We are going to run this to download some files...""" start="00:13:59.741" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Now the files are there...""" start="00:14:09.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""This `find-2a` here shows a certain file""" start="00:14:12.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""at the window at the right,""" start="00:14:17.320" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but we don't need to pay attention to that.""" start="00:14:19.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And this thing `load`​s that file.""" start="00:14:22.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So when we load that file, it defines some functions here""" start="00:14:24.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that are going to be used by the rest of the examples.""" start="00:14:27.520" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Now we can run this thing here... Note that""" start="00:14:29.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we just defined some functions""" start="00:14:34.020" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and then we ran these functions here... `find-eoutput-2a`...""" start="00:14:34.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and they show some things in the window at the right.""" start="00:14:39.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""These things are boring.""" start="00:14:42.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""When we run `adt-insert` with argument 42,""" start="00:14:45.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""it just shows a 42, in this way...""" start="00:14:49.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The other ones show other numbers... and so on.""" start="00:14:52.400" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And... what happens when we modify""" start="00:14:55.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this function here, `adt-2`,""" start="00:14:59.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by adding and removing advices to it?""" start="00:15:02.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The idea is that people can run""" start="00:15:05.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this thing here several times,""" start="00:15:06.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""watching the window at the right,""" start="00:15:08.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""because the results are going to be shown there.""" start="00:15:10.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So, in the first moment, when we run...""" start="00:15:14.720" video="mainVideo-modern" id="subtitle"]] +[[!template text="""no, no, sorry, sorry, let me run it again.""" start="00:15:17.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""In the first moment when we run `adt-2`""" start="00:15:21.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""it just shows a 2, and then we modify it in a certain way,""" start="00:15:24.040" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and we run it again,""" start="00:15:28.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and now before showing the 2 it shows a 1, mysteriously,""" start="00:15:29.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and then we add something to be run after the 2,""" start="00:15:33.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And we run it again,""" start="00:15:37.120" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and now `adt-2` shows these three things.""" start="00:15:38.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And then we remove the advices,""" start="00:15:41.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we remove these other things,""" start="00:15:43.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and when we run `adt-2` again, it shows only `;; --> 2`.""" start="00:15:45.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""It's impossible to understand that in the first time,""" start="00:15:49.080" video="mainVideo-modern" id="subtitle"]] +[[!template text="""so we can run that several times... to see how things work.""" start="00:15:51.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And now we want to understand""" start="00:15:57.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""what changes in the function `adt-2`...""" start="00:16:02.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""how it is modified internally.""" start="00:16:04.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I'm calling that the internal view of the function,""" start="00:16:08.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and we are going to compare""" start="00:16:11.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""several internal views of the function `adt-2`.""" start="00:16:13.600" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I'm going to reset the function `adt-2`""" start="00:16:16.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by removing the advices and placing the advices on it again...""" start="00:16:20.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and if we just pretty-print this function here,""" start="00:16:25.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the symbol... the value of this symbol here as a function,""" start="00:16:28.508" video="mainVideo-modern" id="subtitle"]] +[[!template text="""it is something very ugly.""" start="00:16:36.320" video="mainVideo-modern" id="subtitle"]] +[[!template text="""But if we print it in another way, with `cl-prin1`,""" start="00:16:38.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""then we get something that is much nicer...""" start="00:16:43.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but that is not indented. And if we use this thing here,""" start="00:16:47.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""`cl-prin2` instead of `cl-prin1`, it becomes indented.""" start="00:16:51.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So let's try it again.""" start="00:16:55.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Here is the current view of what is `adt-2`.""" start="00:17:00.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So, the original `adt-insert` is here...""" start="00:17:06.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and here are some modifications""" start="00:17:10.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that were added by the advices.""" start="00:17:11.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And we can run these things many times""" start="00:17:13.520" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to understand what each step does.""" start="00:17:16.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""But my suggestion is: in the first time""" start="00:17:19.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""just run everything very quickly...""" start="00:17:21.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and then you run it again,""" start="00:17:23.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""paying attention to the parts that look more interesting.""" start="00:17:25.200" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Printing something in different ways for lambdas""" start="00:17:29.120" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""Now, I'm going to... Remember that here""" start="00:17:29.120" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I printed the contents of `adt-2` in several different ways,""" start="00:17:37.374" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and now I'm going to show how we can do the same idea""" start="00:17:42.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of printing something in different ways for lambdas...""" start="00:17:47.120" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that is something that I explained""" start="00:17:51.600" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in the first part of the video.""" start="00:17:52.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""In this part of the demo we define a function `foo`...""" start="00:17:54.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""this `setq` here defines `o` as""" start="00:18:00.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the contents of the function cell of `foo`...""" start="00:18:06.361" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And now we are going to print""" start="00:18:08.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that `o` in several different ways.""" start="00:18:13.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The default way is this one, it's very ugly,""" start="00:18:15.400" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but we can redefine how these things are printed""" start="00:18:19.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by just running these lines...""" start="00:18:22.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and if we pay attention at what's happening""" start="00:18:24.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""at the window at the right,""" start="00:18:28.720" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we can see that we have several different""" start="00:18:30.520" video="mainVideo-modern" id="subtitle"]] +[[!template text="""printed representations for the same thing...""" start="00:18:33.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and then at the last step,""" start="00:18:35.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we reset the printer to the default representation.""" start="00:18:36.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And the details are here.""" start="00:18:41.080" video="mainVideo-modern" id="subtitle"]] +[[!template text="""If we run these lines here,""" start="00:18:43.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""they show the definitions at the window at the right.""" start="00:18:45.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And this... now comes the difficult part,""" start="00:18:48.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in which we have to do something""" start="00:18:53.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""besides just running things with F8. We need""" start="00:18:56.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""a help buffer with buttons...""" start="00:19:02.080" video="mainVideo-modern" id="subtitle"]] +[[!template text="""buttons in the traditional sense,""" start="00:19:04.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and we need to choose a certain button there,""" start="00:19:08.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""or any button there,""" start="00:19:11.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and run `M-x ee-set-button` on that button.""" start="00:19:13.440" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So, let me define a `struct` here,""" start="00:19:17.941" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and this is some help on what is that structure.""" start="00:19:24.720" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I'm going to choose this button here""" start="00:19:29.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and I'm going to type `M-x ee-set-button`.""" start="00:19:33.600" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The message is a bit obscure.""" start="00:19:40.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And now we have something that displays""" start="00:19:43.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""a lot of information about that button...""" start="00:19:47.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And we can also run that with just `F8`s.""" start="00:19:51.080" video="mainVideo-modern" id="subtitle"]] +[[!template text="""By the way, if we want to understand""" start="00:19:53.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""the code that's behind these things,""" start="00:20:00.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""we can run this sexp here.""" start="00:20:02.320" video="mainVideo-modern" id="subtitle"]] +[[!template text="""It is going to show the code here at the right.""" start="00:20:04.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""But anyway, these first lines here...""" start="00:20:07.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""they display the output in the echo area... Let's try...""" start="00:20:10.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And each one of them extracts a different part""" start="00:20:15.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of the information on that button.""" start="00:20:20.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And these other lines here create a three-window setting""" start="00:20:22.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in which the help buffer is shown here,""" start="00:20:26.040" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and the result of some other thing""" start="00:20:29.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""is shown in the third window. Let's try...""" start="00:20:33.120" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So now that we have... well... I said""" start="00:20:39.980" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that we needed to choose a certain button""" start="00:20:41.165" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and run `M-x ee-set-button` there. We have done that...""" start="00:20:48.408" video="mainVideo-modern" id="subtitle"]] +[[!template text="""so now this variable `ee-button`""" start="00:20:53.440" video="mainVideo-modern" id="subtitle"]] +[[!template text="""contains information about the button...""" start="00:20:55.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And now we can run this part here""" start="00:20:58.440" video="mainVideo-modern" id="subtitle"]] +[[!template text="""as many times as we want to...""" start="00:21:01.120" video="mainVideo-modern" id="subtitle"]] +[[!template text="""try to understand what are the values of these things here...""" start="00:21:03.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and how some things start with a value that is very complex""" start="00:21:07.480" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and very difficult to understand,""" start="00:21:11.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and then we extract the more interesting parts.""" start="00:21:13.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And the details, as I said, are here.""" start="00:21:16.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""That was the end of the demo, and my question is,""" start="00:21:22.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""what was your reaction to that?""" start="00:21:26.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""If your reaction was more like "wow" than like "blergh"""" start="00:21:28.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""then you might like the last part of the video that I recorded in March,""" start="00:21:32.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that was very technical...""" start="00:21:37.040" video="mainVideo-modern" id="subtitle"]] +[[!template text="""When I recorded it, I thought, oh my god, this video is very bad...""" start="00:21:38.400" video="mainVideo-modern" id="subtitle"]] +[[!template text="""only the hardcore eev users are going to like that,""" start="00:21:42.720" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and there are less than five hardcore""" start="00:21:47.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""eev users in the world...""" start="00:21:51.040" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Exploring buttons""" start="00:21:52.840" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""But anyway, if you saw that introduction""" start="00:21:52.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and you think that these things are interesting,""" start="00:21:56.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""you can execute any one of these S-expressions here""" start="00:21:59.080" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and take a look at the final part of that video""" start="00:22:03.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""that describes how I wrote some functions""" start="00:22:06.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""for exploring buttons. If you execute this sexp here,""" start="00:22:09.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""it plays a part of the video starting from that position.""" start="00:22:14.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""If you execute this one, you go to the subtitles in HTML...""" start="00:22:19.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and if you run this one, you go""" start="00:22:26.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to the subtitles in another format. And... that's it!""" start="00:22:30.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""No, no, sorry, I said "that's it",""" start="00:22:36.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but I forgot a very important part...""" start="00:22:40.120" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Some design decisions behind eev""" start="00:22:42.160" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""I had prepared this slide here""" start="00:22:42.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""to explain some design decisions behind eev""" start="00:22:45.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and why there are so few users of eev... and let me do that.""" start="00:22:48.508" video="mainVideo-modern" id="subtitle"]] +[[!template text="""The thing is that my working memory is very small,""" start="00:22:53.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and I need examples that are easy to visualize...""" start="00:22:57.920" video="mainVideo-modern" id="subtitle"]] +[[!template text="""ideally, examples that are easy to run""" start="00:23:01.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and that I can compare the outputs""" start="00:23:04.960" video="mainVideo-modern" id="subtitle"]] +[[!template text="""of different ways of running them.""" start="00:23:10.308" video="mainVideo-modern" id="subtitle"]] +[[!template text="""For me, understanding specifications""" start="00:23:12.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""in an API is not enough... examples work much better for me.""" start="00:23:16.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Also, I make lots of mistakes when I type...""" start="00:23:20.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""so I need ways to run my executable notes""" start="00:23:24.440" video="mainVideo-modern" id="subtitle"]] +[[!template text="""by just typing `f8` and `M-e`...""" start="00:23:28.400" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and... most people in the #emacs channel and in other places""" start="00:23:31.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""recommend executing sexps by typing `M-:`, like this...""" start="00:23:37.040" video="mainVideo-modern" id="subtitle"]] +[[!template text="""But I hate that... I think that `M-:` and IELM are""" start="00:23:44.520" video="mainVideo-modern" id="subtitle"]] +[[!template text="""for people who type well, so not me...""" start="00:23:49.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And also, 99% of what I do is scratch code.""" start="00:23:54.560" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Very few things that I do go""" start="00:23:58.840" video="mainVideo-modern" id="subtitle"]] +[[!template text="""into "production" - between quotes.""" start="00:24:01.640" video="mainVideo-modern" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Tests""" start="00:24:05.800" video="mainVideo-modern" id="subtitle"]]</div>[[!template text="""So most of my tests are not automated tests.""" start="00:24:05.800" video="mainVideo-modern" id="subtitle"]] +[[!template text="""They are just things that I run with F8,""" start="00:24:10.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and they don't include the expected result.""" start="00:24:12.440" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Many people feel that this is very, very, very wrong.""" start="00:24:15.880" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Tests MUST MEAN automated tests.""" start="00:24:19.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""Also, and this is very frustrating,""" start="00:24:23.280" video="mainVideo-modern" id="subtitle"]] +[[!template text="""eev has lots of "non-users",""" start="00:24:25.640" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I mean, people who have tried to use it,""" start="00:24:28.400" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but they said that they couldn't figure out how to use it.""" start="00:24:31.520" video="mainVideo-modern" id="subtitle"]] +[[!template text="""They couldn't understand""" start="00:24:34.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""what would be the workflows for eev.""" start="00:24:36.160" video="mainVideo-modern" id="subtitle"]] +[[!template text="""And that's the same that happens with me with code blocks in Org...""" start="00:24:38.080" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I'm still at the point in which code blocks in Org just feel wrong.""" start="00:24:43.680" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I still don't understand how to organize my workflows around code blocks.""" start="00:24:48.760" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I said that eev has very few users,""" start="00:24:55.200" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and they are all very weird and very busy,""" start="00:24:59.000" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and I decided that all my blog-ish posts about eev""" start="00:25:02.240" video="mainVideo-modern" id="subtitle"]] +[[!template text="""would be things that they can run in a few minutes...""" start="00:25:06.360" video="mainVideo-modern" id="subtitle"]] +[[!template text="""just like the demo that I showed a few minutes ago.""" start="00:25:09.720" video="mainVideo-modern" id="subtitle"]] +[[!template text="""I said "like the examples in the rest of the video",""" start="00:25:13.040" video="mainVideo-modern" id="subtitle"]] +[[!template text="""but I forgot this slide,""" start="00:25:16.120" video="mainVideo-modern" id="subtitle"]] +[[!template text="""and I'm recording this after the demo.""" start="00:25:17.400" video="mainVideo-modern" id="subtitle"]] +[[!template text="""So... that's it. Thanks!""" start="00:25:19.640" video="mainVideo-modern" id="subtitle"]] </div>Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20modern%3A%20Some%20problems%20of%20modernizing%20Emacs) diff --git a/2025/info/modern-before.md b/2025/info/modern-before.md index f3830a2a..43056b72 100644 --- a/2025/info/modern-before.md +++ b/2025/info/modern-before.md @@ -2,12 +2,27 @@ [[!toc ]] Format: 26-min talk ; Q&A: IRC Etherpad: <https://pad.emacsconf.org/2025-modern> Etherpad: <https://pad.emacsconf.org/2025-modern> -Status: TO_REVIEW_QA +Status: Q&A to be extracted from the room recordings -<div class="vid mainVideo"><video controls preload="none" id="mainVideo-modern"><source src="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--original.mp4" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 25:22 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-modern">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://youtu.be/EbxupbXfESg">View on Youtube</a></li></ul></div></div> +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-modern"><source src="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-modern" data=""" +00:00.000 Introduction +01:05.000 The main themes of this video +02:18.000 Inner views of Emacs objects +02:54.000 Older Emacses +03:35.000 Newer Emacses +05:30.000 Help buttons +06:41.000 "Anyone can learn Lisp in one day" +09:34.000 Lambdas for beginners broken +12:59.302 Demo +17:29.120 Printing something in different ways for lambdas +21:52.840 Exploring buttons +22:42.160 Some design decisions behind EEV +24:05.800 Tests + +"""]]<div></div>Duration: 25:22 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-modern">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-modern--some-problems-of-modernizing-emacs--eduardo-ochs--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://youtu.be/EbxupbXfESg">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/python-after.md b/2025/info/python-after.md index 508a4acc..3e66b54a 100644 --- a/2025/info/python-after.md +++ b/2025/info/python-after.md @@ -255,7 +255,8 @@ Captioner: sachac <div class="transcript transcript-qanda"><a name="python-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1> -[[!template text="""So as we wait for people to drop""" start="00:00:00.000" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Developing Python in Emacs""" start="00:00:00.000" video="qanda-python" id="subtitle"]]</div>[[!template text="""So as we wait for people to drop""" start="00:00:00.000" video="qanda-python" id="subtitle"]] [[!template text="""in their questions and so on,""" start="00:00:02.840" video="qanda-python" id="subtitle"]] [[!template text="""I'll just kind of add a couple of thoughts.""" start="00:00:04.280" video="qanda-python" id="subtitle"]] [[!template text="""I'm not personally much of a Python developer,""" start="00:00:08.720" video="qanda-python" id="subtitle"]] @@ -275,7 +276,8 @@ Captioner: sachac [[!template text="""and some refactoring and things like that.""" start="00:01:06.040" video="qanda-python" id="subtitle"]] [[!template text="""So I think Emacs is really good for Python development.""" start="00:01:09.040" video="qanda-python" id="subtitle"]] [[!template text="""So what are some other...""" start="00:01:14.440" video="qanda-python" id="subtitle"]] -[[!template text="""How long have you been using Emacs?""" start="00:01:16.680" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: How long have you been using Emacs?""" start="00:01:16.680" video="qanda-python" id="subtitle"]]</div>[[!template text="""How long have you been using Emacs?""" start="00:01:16.680" video="qanda-python" id="subtitle"]] [[!template text="""Kind of a general question.""" start="00:01:18.320" video="qanda-python" id="subtitle"]] [[!template text="""Sorry if you covered this and I missed it.""" start="00:01:19.600" video="qanda-python" id="subtitle"]] [[!template text="""It's not that long actually.""" start="00:01:23.600" video="qanda-python" id="subtitle"]] @@ -301,7 +303,8 @@ Captioner: sachac [[!template text="""as opposed to like the mainstream editors out there.""" start="00:02:27.640" video="qanda-python" id="subtitle"]] [[!template text="""So that's how it started. So like five years ago, maybe.""" start="00:02:30.960" video="qanda-python" id="subtitle"]] [[!template text="""Cool. Um, so did you, what were some other,""" start="00:02:33.520" video="qanda-python" id="subtitle"]] -[[!template text="""what, what, what editor were you primarily using before you?""" start="00:02:39.520" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: What editor were you primarily using before?""" start="00:02:39.520" video="qanda-python" id="subtitle"]]</div>[[!template text="""what, what, what editor were you primarily using before you?""" start="00:02:39.520" video="qanda-python" id="subtitle"]] [[!template text="""Um, um, back, back then it was like,""" start="00:02:44.000" video="qanda-python" id="subtitle"]] [[!template text="""I think it was like Sublime Text.""" start="00:02:49.400" video="qanda-python" id="subtitle"]] [[!template text="""And also some IntelliJ, sorry, JetBrains, their tools.""" start="00:02:52.720" video="qanda-python" id="subtitle"]] @@ -324,7 +327,8 @@ Captioner: sachac [[!template text="""I'll just read it out.""" start="00:03:52.720" video="qanda-python" id="subtitle"]] [[!template text="""I don't quite see how your setup works with IPython.""" start="00:03:55.240" video="qanda-python" id="subtitle"]] [[!template text="""Sorry if you already answered this.""" start="00:03:58.240" video="qanda-python" id="subtitle"]] -[[!template text="""Do you have your Emacs connect to the IPython kernel""" start="00:04:00.280" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Do you have your Emacs connect to the IPython kernel over the XMPP socket that IPython sets up?""" start="00:04:00.280" video="qanda-python" id="subtitle"]]</div>[[!template text="""Do you have your Emacs connect to the IPython kernel""" start="00:04:00.280" video="qanda-python" id="subtitle"]] [[!template text="""over XMPP socket that IPython sets up? Oh, good question.""" start="00:04:03.520" video="qanda-python" id="subtitle"]] [[!template text="""So what I've done is I have two different connections.""" start="00:04:11.920" video="qanda-python" id="subtitle"]] [[!template text="""Like if I'm going to do this regular day-to-day Python work""" start="00:04:18.040" video="qanda-python" id="subtitle"]] @@ -349,7 +353,8 @@ Captioner: sachac [[!template text="""which I do for most of my daily work,""" start="00:05:26.600" video="qanda-python" id="subtitle"]] [[!template text="""or if I want this connection to a running app,""" start="00:05:29.560" video="qanda-python" id="subtitle"]] [[!template text="""I'm using the Jupyter console, basically.""" start="00:05:32.240" video="qanda-python" id="subtitle"]] -[[!template text="""Have you explored Org Babel at all?""" start="00:05:38.480" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Not sure if you've explored Org Babel, but what are the benefits of using your approach over Org?""" start="00:05:38.480" video="qanda-python" id="subtitle"]]</div>[[!template text="""Have you explored Org Babel at all?""" start="00:05:38.480" video="qanda-python" id="subtitle"]] [[!template text="""Can you talk about your approach""" start="00:05:45.200" video="qanda-python" id="subtitle"]] [[!template text="""compared to the Babel workflow? Oh, interesting.""" start="00:05:48.200" video="qanda-python" id="subtitle"]] [[!template text="""No, I haven't actually, I haven't done that,""" start="00:05:52.280" video="qanda-python" id="subtitle"]] @@ -369,7 +374,8 @@ Captioner: sachac [[!template text="""so I can't get into the really interesting questions""" start="00:06:52.880" video="qanda-python" id="subtitle"]] [[!template text="""that are probably more relevant,""" start="00:06:57.600" video="qanda-python" id="subtitle"]] [[!template text="""just because a lot of it's kind of over my head.""" start="00:07:01.640" video="qanda-python" id="subtitle"]] -[[!template text="""Have you seen the miramo.io notebooks?""" start="00:07:05.800" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Have you seen marimo.io notebooks? It uses standard Python.""" start="00:07:05.800" video="qanda-python" id="subtitle"]]</div>[[!template text="""Have you seen the marimo.io notebooks?""" start="00:07:05.800" video="qanda-python" id="subtitle"]] [[!template text="""These use standard Python?""" start="00:07:12.880" video="qanda-python" id="subtitle"]] [[!template text="""Oh, yes, I've seen, I haven't tried it myself,""" start="00:07:15.280" video="qanda-python" id="subtitle"]] [[!template text="""but I've seen it.""" start="00:07:18.120" video="qanda-python" id="subtitle"]] @@ -385,57 +391,59 @@ Captioner: sachac [[!template text="""You get an expert, a souffle chef,""" start="00:08:06.720" video="qanda-python" id="subtitle"]] [[!template text="""and you ask about making pasta or some other sort of thing.""" start="00:08:11.240" video="qanda-python" id="subtitle"]] [[!template text="""No, go ahead. Go ahead. I'm glad to ask any questions.""" start="00:08:16.600" video="qanda-python" id="subtitle"]] -[[!template text="""So just generally about Emacs as a coding developer,""" start="00:08:20.560" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: what LLM did you say you've used?""" start="00:08:20.560" video="qanda-python" id="subtitle"]]</div>[[!template text="""So just generally about Emacs as a coding developer,""" start="00:08:20.560" video="qanda-python" id="subtitle"]] [[!template text="""what are the features""" start="00:08:25.680" video="qanda-python" id="subtitle"]] [[!template text="""that you tend to lean on more heavily?""" start="00:08:27.000" video="qanda-python" id="subtitle"]] -[[!template text="""you know completion or you know what what have you""" start="00:08:28.480" video="qanda-python" id="subtitle"]] -[[!template text="""maybe I could put it better""" start="00:08:34.320" video="qanda-python" id="subtitle"]] -[[!template text="""as what have you spent more time configuring for Emacs""" start="00:08:36.200" video="qanda-python" id="subtitle"]] +[[!template text="""You know completion or you know, what have you...""" start="00:08:28.480" video="qanda-python" id="subtitle"]] +[[!template text="""Maybe I could put it better as:""" start="00:08:34.060" video="qanda-python" id="subtitle"]] +[[!template text="""what have you spent more time configuring for Emacs""" start="00:08:35.258" video="qanda-python" id="subtitle"]] [[!template text="""to facilitate development?""" start="00:08:40.080" video="qanda-python" id="subtitle"]] -[[!template text="""Yes initially it was basically taking away""" start="00:08:45.440" video="qanda-python" id="subtitle"]] -[[!template text="""some of the UI features""" start="00:08:49.640" video="qanda-python" id="subtitle"]] -[[!template text="""basically disabling it and and but fairly quickly""" start="00:08:51.320" video="qanda-python" id="subtitle"]] -[[!template text="""for for both closure development""" start="00:08:56.600" video="qanda-python" id="subtitle"]] -[[!template text="""where i was using cider which is like a really good uh good tool um""" start="00:08:58.920" video="qanda-python" id="subtitle"]] -[[!template text="""and for python when i quickly found lp elp""" start="00:09:04.600" video="qanda-python" id="subtitle"]] -[[!template text="""i'm not sure how to pronounce it""" start="00:09:08.160" video="qanda-python" id="subtitle"]] -[[!template text="""but you you get so much uh good things from these tools""" start="00:09:10.600" video="qanda-python" id="subtitle"]] -[[!template text="""so what i've done additionally is like theme""" start="00:09:16.040" video="qanda-python" id="subtitle"]] -[[!template text="""and maybe having this environment""" start="00:09:21.720" video="qanda-python" id="subtitle"]] +[[!template text="""Yes, initially, it was basically taking away""" start="00:08:45.440" video="qanda-python" id="subtitle"]] +[[!template text="""some of the UI features,""" start="00:08:49.640" video="qanda-python" id="subtitle"]] +[[!template text="""basically disabling it, but fairly quickly,""" start="00:08:51.320" video="qanda-python" id="subtitle"]] +[[!template text="""for both Clojure development""" start="00:08:56.600" video="qanda-python" id="subtitle"]] +[[!template text="""where I was using CIDER, which is like a really good tool,""" start="00:08:58.920" video="qanda-python" id="subtitle"]] +[[!template text="""and for Python, when I quickly found elpy,""" start="00:09:04.600" video="qanda-python" id="subtitle"]] +[[!template text="""I'm not sure how to pronounce it,""" start="00:09:08.160" video="qanda-python" id="subtitle"]] +[[!template text="""but you get so much good things from these tools...""" start="00:09:10.600" video="qanda-python" id="subtitle"]] +[[!template text="""So what I've done additionally is theme""" start="00:09:16.040" video="qanda-python" id="subtitle"]] +[[!template text="""and maybe having this environment""" start="00:09:21.020" video="qanda-python" id="subtitle"]] [[!template text="""that is without disturbance.""" start="00:09:27.160" video="qanda-python" id="subtitle"]] -[[!template text="""So I really like the code to have my full attention.""" start="00:09:31.480" video="qanda-python" id="subtitle"]] +[[!template text="""So I really like the code to have my full attention.""" start="00:09:29.020" video="qanda-python" id="subtitle"]] [[!template text="""So I rarely have, maybe I have like a preview sometimes,""" start="00:09:34.840" video="qanda-python" id="subtitle"]] -[[!template text="""but mostly it's the window or the buffer where I have my code""" start="00:09:41.240" video="qanda-python" id="subtitle"]] +[[!template text="""but mostly, it's the window or the buffer where I have my code,""" start="00:09:41.240" video="qanda-python" id="subtitle"]] [[!template text="""and I've minimized the running REPL buffer.""" start="00:09:45.360" video="qanda-python" id="subtitle"]] [[!template text="""So sometimes it's, I'm hiding it, but it's still active.""" start="00:09:49.880" video="qanda-python" id="subtitle"]] [[!template text="""So basically that's how I configured,""" start="00:09:53.440" video="qanda-python" id="subtitle"]] [[!template text="""spent my configuration doing that.""" start="00:09:57.680" video="qanda-python" id="subtitle"]] [[!template text="""And also lately, trying out some LLM tools.""" start="00:10:00.280" video="qanda-python" id="subtitle"]] -[[!template text="""So I think I have two packages""" start="00:10:04.800" video="qanda-python" id="subtitle"]] +[[!template text="""I think I have two packages""" start="00:10:04.800" video="qanda-python" id="subtitle"]] [[!template text="""that I'm using actively today.""" start="00:10:09.280" video="qanda-python" id="subtitle"]] -[[!template text="""And my favorite is a tool called ECA,""" start="00:10:12.240" video="qanda-python" id="subtitle"]] +[[!template text="""My favorite is a tool called ECA,""" start="00:10:12.240" video="qanda-python" id="subtitle"]] [[!template text="""which is a LLM chat assistant, which is really good.""" start="00:10:15.800" video="qanda-python" id="subtitle"]] [[!template text="""The developer is also an Emacs enthusiast.""" start="00:10:20.200" video="qanda-python" id="subtitle"]] -[[!template text="""So are you the type of person that tends to work with""" start="00:10:24.400" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Are you building your own Emacs, or using the system packages?""" start="00:10:28.480" video="qanda-python" id="subtitle"]]</div>[[!template text="""So are you the type of person that tends to work with""" start="00:10:28.480" video="qanda-python" id="subtitle"]] [[!template text="""like a master builder, build your own Emacs?""" start="00:10:33.640" video="qanda-python" id="subtitle"]] [[!template text="""Are you using the system packages?""" start="00:10:37.040" video="qanda-python" id="subtitle"]] [[!template text="""What's your approach to just get Emacs""" start="00:10:40.800" video="qanda-python" id="subtitle"]] [[!template text="""up and off the ground for yourself?""" start="00:10:43.616" video="qanda-python" id="subtitle"]] [[!template text="""I'm not there yet with doing my own builds.""" start="00:10:45.369" video="qanda-python" id="subtitle"]] [[!template text="""Currently, I'm on macOS,""" start="00:10:52.520" video="qanda-python" id="subtitle"]] -[[!template text="""so I'm installing Emacs through broom basically, homebrew.""" start="00:10:55.600" video="qanda-python" id="subtitle"]] +[[!template text="""so I'm installing Emacs through brew, basically, homebrew.""" start="00:10:55.600" video="qanda-python" id="subtitle"]] [[!template text="""I've yet so much Emacs things to learn""" start="00:11:00.040" video="qanda-python" id="subtitle"]] -[[!template text="""because I'm not even using org yet.""" start="00:11:04.920" video="qanda-python" id="subtitle"]] +[[!template text="""because I'm not even using Org yet.""" start="00:11:04.920" video="qanda-python" id="subtitle"]] [[!template text="""I'm exploring the this editor.""" start="00:11:07.740" video="qanda-python" id="subtitle"]] [[!template text="""So I feel like I'm very much a beginner.""" start="00:11:11.560" video="qanda-python" id="subtitle"]] -[[!template text="""I'm not using Emacs to its full potential yet.""" start="00:11:14.800" video="qanda-python" id="subtitle"]] +[[!template text="""I'm not using Emacs to its full potential yet.""" start="00:11:13.920" video="qanda-python" id="subtitle"]] [[!template text="""So I'm counting on that I will be more and more using Emacs""" start="00:11:17.920" video="qanda-python" id="subtitle"]] [[!template text="""for more and more different tasks basically.""" start="00:11:23.280" video="qanda-python" id="subtitle"]] [[!template text="""And I'm just seeing a comment.""" start="00:11:29.120" video="qanda-python" id="subtitle"]] [[!template text="""Ed Stallthroat says, thank you""" start="00:11:32.560" video="qanda-python" id="subtitle"]] [[!template text="""for publishing your configuration and offers a link.""" start="00:11:35.800" video="qanda-python" id="subtitle"]] [[!template text="""Oh, great. Great.""" start="00:11:40.840" video="qanda-python" id="subtitle"]] -[[!template text="""Yes, those things that I showed in my talk,""" start="00:11:41.880" video="qanda-python" id="subtitle"]] +[[!template text="""Yes, those things that I showed in my talk,""" start="00:11:43.200" video="qanda-python" id="subtitle"]] [[!template text="""I haven't made any, I haven't packaged it yet,""" start="00:11:46.360" video="qanda-python" id="subtitle"]] [[!template text="""but everything is on my GitHub,""" start="00:11:49.320" video="qanda-python" id="subtitle"]] [[!template text="""and I've tried to separate each feature""" start="00:11:51.200" video="qanda-python" id="subtitle"]] @@ -451,7 +459,8 @@ Captioner: sachac [[!template text="""so it may be that people are jogging off to get some food.""" start="00:12:26.120" video="qanda-python" id="subtitle"]] [[!template text="""Yeah, in Sweden, it's dinner time.""" start="00:12:31.680" video="qanda-python" id="subtitle"]] [[!template text="""It's like 6 p.m. soon. That fits.""" start="00:12:36.600" video="qanda-python" id="subtitle"]] -[[!template text="""So are you involved with local Emacs meetups?""" start="00:12:40.080" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Are you involved with local Emacs meetups?""" start="00:12:40.080" video="qanda-python" id="subtitle"]]</div>[[!template text="""So are you involved with local Emacs meetups?""" start="00:12:40.080" video="qanda-python" id="subtitle"]] [[!template text="""I know that your part of the world""" start="00:12:46.440" video="qanda-python" id="subtitle"]] [[!template text="""has a really brisk community,""" start="00:12:49.080" video="qanda-python" id="subtitle"]] [[!template text="""you know, a lot of, just a lot going on.""" start="00:12:51.800" video="qanda-python" id="subtitle"]] @@ -460,8 +469,8 @@ Captioner: sachac [[!template text="""I'm curious if you're plugged""" start="00:13:02.320" video="qanda-python" id="subtitle"]] [[!template text="""into a local community there at all, No, I haven't.""" start="00:13:03.520" video="qanda-python" id="subtitle"]] [[!template text="""Not in any community. I haven't done that yet,""" start="00:13:08.720" video="qanda-python" id="subtitle"]] -[[!template text="""but we are like friends that I've gotten to know""" start="00:13:10.760" video="qanda-python" id="subtitle"]] -[[!template text="""through work and through like open source work that also use Emacs.""" start="00:13:15.680" video="qanda-python" id="subtitle"]] +[[!template text="""but we are... Like, friends that I've gotten to know""" start="00:13:10.760" video="qanda-python" id="subtitle"]] +[[!template text="""through work and through like open source work that also use Emacs.""" start="00:13:18.216" video="qanda-python" id="subtitle"]] [[!template text="""We talk and share our conflicts""" start="00:13:23.440" video="qanda-python" id="subtitle"]] [[!template text="""basically on a regular basis,""" start="00:13:28.960" video="qanda-python" id="subtitle"]] [[!template text="""because we are, at least in the Python community,""" start="00:13:30.800" video="qanda-python" id="subtitle"]] @@ -477,7 +486,8 @@ Captioner: sachac [[!template text="""Well, David, I super appreciate your talk""" start="00:14:11.036" video="qanda-python" id="subtitle"]] [[!template text="""and thank you so much also for...""" start="00:14:16.560" video="qanda-python" id="subtitle"]] [[!template text="""I'm sorry, I saw another question here. Let me cover that.""" start="00:14:18.760" video="qanda-python" id="subtitle"]] -[[!template text="""Can you repeat the name of the LLM""" start="00:14:24.640" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Q: Can you repeat the name of the LLM that you specifically mentioned there? - ECA""" start="00:14:24.640" video="qanda-python" id="subtitle"]]</div>[[!template text="""Can you repeat the name of the LLM""" start="00:14:24.640" video="qanda-python" id="subtitle"]] [[!template text="""that you specifically mentioned there?""" start="00:14:27.960" video="qanda-python" id="subtitle"]] [[!template text="""Oh, it's a tool called ECA, E-C-A.""" start="00:14:30.320" video="qanda-python" id="subtitle"]] [[!template text="""It's basically a server and clients,""" start="00:14:36.785" video="qanda-python" id="subtitle"]] @@ -502,19 +512,20 @@ Captioner: sachac [[!template text="""so I can send that to the REPL.""" start="00:16:05.600" video="qanda-python" id="subtitle"]] [[!template text="""But for some reason, I forgot the name of it.""" start="00:16:08.880" video="qanda-python" id="subtitle"]] [[!template text="""I can look it up. Just give me one minute, sorry.""" start="00:16:11.480" video="qanda-python" id="subtitle"]] -[[!template text="""oh yeah gptel gptel that's that's the name of the other tool""" start="00:16:25.160" video="qanda-python" id="subtitle"]] -[[!template text="""which is uh also a good tool yeah""" start="00:16:35.560" video="qanda-python" id="subtitle"]] -[[!template text="""but ECA is more like a more chat companion""" start="00:16:37.880" video="qanda-python" id="subtitle"]] -[[!template text="""and this you can also you can tell it to write code and things like that""" start="00:16:41.280" video="qanda-python" id="subtitle"]] -[[!template text="""but i mostly use it for reviews and research""" start="00:16:46.680" video="qanda-python" id="subtitle"]] -[[!template text="""and like asking questions""" start="00:16:51.680" video="qanda-python" id="subtitle"]] -[[!template text="""because i want to my I don't have a problem with typing code.""" start="00:16:54.600" video="qanda-python" id="subtitle"]] +[[!template text="""Oh yeah, gptel, that's that's the name of the other tool""" start="00:16:29.860" video="qanda-python" id="subtitle"]] +[[!template text="""which is also a good tool, yeah,""" start="00:16:35.560" video="qanda-python" id="subtitle"]] +[[!template text="""but ECA is more like a chat companion""" start="00:16:37.880" video="qanda-python" id="subtitle"]] +[[!template text="""and this, you can also tell it to write code and things like that,""" start="00:16:41.280" video="qanda-python" id="subtitle"]] +[[!template text="""but I mostly use it for reviews and research""" start="00:16:46.680" video="qanda-python" id="subtitle"]] +[[!template text="""and asking questions""" start="00:16:51.680" video="qanda-python" id="subtitle"]] +[[!template text="""because I want to... My...""" start="00:16:53.740" video="qanda-python" id="subtitle"]] +[[!template text="""I don't have a problem with typing code.""" start="00:16:57.545" video="qanda-python" id="subtitle"]] [[!template text="""I don't think that slows me down,""" start="00:17:00.280" video="qanda-python" id="subtitle"]] [[!template text="""but maybe getting some quick feedback""" start="00:17:01.920" video="qanda-python" id="subtitle"]] [[!template text="""on the actual work that I'm doing,""" start="00:17:05.640" video="qanda-python" id="subtitle"]] [[!template text="""that's what I'm using LLM for,""" start="00:17:07.480" video="qanda-python" id="subtitle"]] [[!template text="""on LLM for two, mostly today. That really hits for me.""" start="00:17:09.000" video="qanda-python" id="subtitle"]] -[[!template text="""I don't mind typing either.""" start="00:17:13.520" video="qanda-python" id="subtitle"]] +[[!template text="""[Corwin]: I don't mind typing either.""" start="00:17:13.520" video="qanda-python" id="subtitle"]] [[!template text="""I think somehow having things be so simple""" start="00:17:15.200" video="qanda-python" id="subtitle"]] [[!template text="""and in many cases just automated,""" start="00:17:18.480" video="qanda-python" id="subtitle"]] [[!template text="""Emacs just does the right thing.""" start="00:17:20.880" video="qanda-python" id="subtitle"]] @@ -525,21 +536,23 @@ Captioner: sachac [[!template text="""I'm just going to peek one more time through""" start="00:17:35.600" video="qanda-python" id="subtitle"]] [[!template text="""and I don't see a backlog.""" start="00:17:39.440" video="qanda-python" id="subtitle"]] [[!template text="""There are a couple more comments here""" start="00:17:41.160" video="qanda-python" id="subtitle"]] -[[!template text="""linking linking to the ECA Emacs and gptel.""" start="00:17:44.520" video="qanda-python" id="subtitle"]] +[[!template text="""linking to the ECA Emacs and gptel.""" start="00:17:44.520" video="qanda-python" id="subtitle"]] [[!template text="""Comment also saying very cool setup.""" start="00:17:49.320" video="qanda-python" id="subtitle"]] -[[!template text="""So I suppose I'll I'll hand it over to you""" start="00:17:52.240" video="qanda-python" id="subtitle"]] -[[!template text="""if you have kind of final thoughts or.""" start="00:17:56.960" video="qanda-python" id="subtitle"]] +[[!template text="""So I suppose I'll hand it over to you""" start="00:17:52.240" video="qanda-python" id="subtitle"]] +[[!template text="""if you have kind of final thoughts or""" start="00:17:56.960" video="qanda-python" id="subtitle"]] [[!template text="""additional wisdoms you want to share""" start="00:17:59.320" video="qanda-python" id="subtitle"]] -[[!template text="""I really appreciate your taking the time to prepare this presentation""" start="00:18:02.080" video="qanda-python" id="subtitle"]] -[[!template text="""especially to do the live Q&A with us. Thank you""" start="00:18:05.400" video="qanda-python" id="subtitle"]] -[[!template text="""and I haven't anything more than that I will""" start="00:18:11.080" video="qanda-python" id="subtitle"]] -[[!template text="""of course I will continue like have evolving my setup""" start="00:18:13.920" video="qanda-python" id="subtitle"]] -[[!template text="""because there's like new tools""" start="00:18:19.480" video="qanda-python" id="subtitle"]] -[[!template text="""and maybe new ideas also coming up""" start="00:18:21.360" video="qanda-python" id="subtitle"]] -[[!template text="""and my What I'm aiming for in Python development""" start="00:18:24.760" video="qanda-python" id="subtitle"]] +[[!template text="""I really appreciate your taking the time""" start="00:18:02.080" video="qanda-python" id="subtitle"]] +[[!template text="""to prepare this presentation""" start="00:18:03.975" video="qanda-python" id="subtitle"]] +[[!template text="""especially to do the live Q&A with us.""" start="00:18:05.400" video="qanda-python" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:18:08.742" video="qanda-python" id="subtitle"]]</div>[[!template text="""[David]: Thank you. I haven't anything more than that""" start="00:18:08.742" video="qanda-python" id="subtitle"]] +[[!template text="""I will of course continue evolving my setup,""" start="00:18:12.989" video="qanda-python" id="subtitle"]] +[[!template text="""because there's new tools""" start="00:18:19.480" video="qanda-python" id="subtitle"]] +[[!template text="""and maybe new ideas also coming up.""" start="00:18:21.360" video="qanda-python" id="subtitle"]] +[[!template text="""What I'm aiming for in Python development""" start="00:18:24.760" video="qanda-python" id="subtitle"]] [[!template text="""is the great developer experience""" start="00:18:28.720" video="qanda-python" id="subtitle"]] [[!template text="""of what's called Lisp programming, basically.""" start="00:18:30.480" video="qanda-python" id="subtitle"]] -[[!template text="""So that's what I'm aiming at for Python 2.""" start="00:18:34.520" video="qanda-python" id="subtitle"]] +[[!template text="""So that's what I'm aiming at for Python too.""" start="00:18:34.520" video="qanda-python" id="subtitle"]] [[!template text="""Thank you. Thank you so much.""" start="00:18:41.700" video="qanda-python" id="subtitle"]] </div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20python%3A%20Interactive%20Python%20programming%20in%20Emacs) diff --git a/2025/info/python-before.md b/2025/info/python-before.md index 46318789..b2f39ad0 100644 --- a/2025/info/python-before.md +++ b/2025/info/python-before.md @@ -14,6 +14,19 @@ Status: TO_REVIEW_QA # Q&A -<div class="vid qanda"><video controls preload="none" id="qanda-python"><source src="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.m4v" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 20:10 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-python">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.m4v">Download --answers.m4v (75MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.webm">Download --answers.webm (71MB)</a></li></ul></div></div> +<div class="vid qanda"><video controls preload="none" id="qanda-python"><source src="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="qanda-python" data=""" +00:00.000 Developing Python in Emacs +01:16.680 Q: How long have you been using Emacs? +02:39.520 Q: What editor were you primarily using before? +04:00.280 Q: Do you have your Emacs connect to the IPython kernel over the XMPP socket that IPython sets up? +05:38.480 Q: Not sure if you've explored Org Babel, but what are the benefits of using your approach over Org? +07:05.800 Q: Have you seen marimo.io notebooks? It uses standard Python. +08:20.560 Q: what LLM did you say you've used? +10:28.480 Q: Are you building your own Emacs, or using the system packages? +12:40.080 Q: Are you involved with local Emacs meetups? +14:24.640 Q: Can you repeat the name of the LLM that you specifically mentioned there? - ECA +18:08.742 Wrapping up + +"""]]<div>Listen to just the audio:<br /><audio controls preload="none" id="qanda-python-audio" src="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.opus"></audio></div><div></div>Duration: 18:44 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-python">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers--chapters.vtt">Download --answers--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.m4v">Download --answers.m4v (75MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.tsv">Download --answers.tsv</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.txt">Download --answers.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-python--interactive-python-programming-in-emacs--david-vujic--answers.webm">Download --answers.webm (71MB)</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/organizers-notebook/index.org b/organizers-notebook/index.org index e49fe528..776dd03c 100644 --- a/organizers-notebook/index.org +++ b/organizers-notebook/index.org @@ -760,7 +760,18 @@ Add the video to the playlist. Set the ~QA_YOUTUBE_URL~ property. Play the preview and jump around to different points in the video to check if there are encoding errors. - +*** Index the Q&A + +For each talk with a live Q&A session: + +1. Open the pad and the VTT file. +2. Use ~C-u M-x subed-word-data-load-from-file~ to load the word data JSON with an offset depending on the start time that the video was trimmed to. +3. Use ~M-x subed-set-subtitle-comment~ or manually add ~NOTE~ comments. Correct recognition errors along the way. +4. Use ~emacsconf-subed-make-chapter-file-based-on-comments~ to create the chapter file. +5. Republish with elisp:emacsconf-publish-public-index to make sure the chapters show up. +6. Upload the corrected subtitles to the Q&A video on YouTube. +7. Use ~emacsconf-publish-answers-description~ to get the updated description. Paste it into the YouTube description. +8. Use ~emacsconf-publish-info-pages-for-talk~ to update the wiki pages for that talk. *** Send thank-you emails to the speakers :email: :PROPERTIES: |
