summaryrefslogtreecommitdiffstats
path: root/2021
diff options
context:
space:
mode:
Diffstat (limited to '2021')
-rw-r--r--2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt1244
-rw-r--r--2021/info/clede-schedule.md3
-rw-r--r--2021/talks/clede.md7
3 files changed, 1246 insertions, 8 deletions
diff --git a/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt b/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt
new file mode 100644
index 00000000..7f4b8d30
--- /dev/null
+++ b/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt
@@ -0,0 +1,1244 @@
+00:00:01.040 --> 00:00:04.367
+Welcome, everyone, to this Emacs Conf 2021.
+
+00:00:04.467 --> 00:00:07.617
+My name is Fermin. I work as
+
+00:00:07.617 --> 00:00:09.717
+a Common Lisp engineer at RavenPack,
+
+00:00:09.817 --> 00:00:11.733
+and today I'm going to talk about
+
+00:00:11.833 --> 00:00:15.783
+CLEDE: the Common Lisp Emacs Development Environment.
+
+00:00:15.883 --> 00:00:19.400
+So what is CLEDE?
+
+00:00:19.500 --> 00:00:20.500
+So CLEDE is a project
+
+00:00:20.500 --> 00:00:22.017
+I've been working on this year
+
+00:00:22.117 --> 00:00:24.650
+for better... well, yeah...
+
+00:00:24.750 --> 00:00:27.117
+a better Common Lisp integration
+
+00:00:27.217 --> 00:00:30.317
+for static tools and
+
+00:00:30.417 --> 00:00:33.250
+for static and integrated Emacs tools.
+
+00:00:33.350 --> 00:00:35.367
+And to understand better what
+
+00:00:35.467 --> 00:00:37.650
+CLEDE is, one first has to understand
+
+00:00:37.750 --> 00:00:40.133
+the base that I use...
+
+00:00:40.233 --> 00:00:43.767
+so the foundation that I use for CLEDE.
+
+00:00:43.867 --> 00:00:46.050
+Um, so it is CEDET--
+
+00:00:46.150 --> 00:00:47.417
+and specifically Semantic--
+
+00:00:47.517 --> 00:00:49.733
+so we first have to talk about and
+
+00:00:49.833 --> 00:00:50.417
+understand what it is.
+
+00:00:50.517 --> 00:00:53.817
+So CEDET is a collection
+
+00:00:53.917 --> 00:00:55.183
+of Emacs development environment tools.
+
+00:00:55.283 --> 00:00:57.233
+It was created by Eric Ludlam
+
+00:00:57.333 --> 00:01:00.767
+(I hope to say that name right)
+
+00:01:00.867 --> 00:01:02.333
+in the late 90s, and
+
+00:01:02.433 --> 00:01:04.833
+the idea was to create entire IDE for Emacs.
+
+00:01:04.933 --> 00:01:10.433
+CEDET is still integrated into Emacs,
+
+00:01:10.533 --> 00:01:11.717
+and it has a lot of interesting things
+
+00:01:11.817 --> 00:01:14.033
+that are not used for too many people,
+
+00:01:14.133 --> 00:01:16.167
+so I'm going to explain some of those.
+
+00:01:16.267 --> 00:01:18.417
+First, let's go with the good ones that
+
+00:01:18.517 --> 00:01:21.233
+one that I use for CLEDE and that can
+
+00:01:21.333 --> 00:01:23.167
+be used for other projects as well.
+
+00:01:23.267 --> 00:01:28.450
+Some of the features that
+
+00:01:28.550 --> 00:01:32.450
+CEDET has is parse generators
+
+00:01:32.550 --> 00:01:35.217
+so we have Wisent and Bovine.
+
+00:01:35.317 --> 00:01:38.350
+Wisent is basically a Bison clone
+
+00:01:38.450 --> 00:01:40.200
+that was written in Emacs Lisp
+
+00:01:40.300 --> 00:01:43.117
+that you can also specify grammars.
+
+00:01:43.217 --> 00:01:45.617
+It's a really big and rather complex
+
+00:01:45.717 --> 00:01:47.350
+tool to work with,
+
+00:01:47.450 --> 00:01:49.183
+and it's secretly used for, as far as
+
+00:01:49.283 --> 00:01:51.667
+I know, two languages.
+
+00:01:51.767 --> 00:01:53.317
+They're not also well supported,
+
+00:01:53.417 --> 00:01:55.317
+but we'll get into that later.
+
+00:01:55.417 --> 00:01:58.133
+Also Bovine, which is a way more
+
+00:01:58.233 --> 00:01:59.867
+simple tool, like you can...
+
+00:01:59.967 --> 00:02:01.733
+you don't need grammar files,
+
+00:02:01.833 --> 00:02:07.350
+you can write just in plain Emacs Lisp.
+
+00:02:07.450 --> 00:02:10.917
+And you also have utilities to work with
+
+00:02:11.017 --> 00:02:16.550
+those generated tag trees, so to say.
+
+00:02:16.650 --> 00:02:23.533
+These are not AST parsers like real Bison;
+
+00:02:23.633 --> 00:02:25.617
+they are tag-based so they basically get
+
+00:02:25.717 --> 00:02:27.533
+tags and extract information from them,
+
+00:02:27.633 --> 00:02:30.083
+and I can use that information
+
+00:02:30.183 --> 00:02:31.000
+with Emacs Lisp
+
+00:02:31.000 --> 00:02:33.567
+to contextually understand better
+
+00:02:33.667 --> 00:02:36.267
+the language that you're parsing,
+
+00:02:36.367 --> 00:02:37.083
+but in general,
+
+00:02:37.183 --> 00:02:40.083
+this decision was made (as far as I know)
+
+00:02:40.183 --> 00:02:43.217
+because of the Emacs Lisp
+
+00:02:43.317 --> 00:02:44.217
+limitation of the time.
+
+00:02:44.317 --> 00:02:50.233
+So Emacs was a rather
+
+00:02:50.333 --> 00:02:52.167
+slower Lisp-- slow Lisp--
+
+00:02:52.267 --> 00:02:55.850
+so they decide to just use
+
+00:02:55.950 --> 00:02:58.750
+tag-based thing instead of a parse--
+
+00:02:58.850 --> 00:03:02.333
+I mean-- an AST-based one.
+
+00:03:02.433 --> 00:03:05.167
+And Semantic give you some utility with
+
+00:03:05.267 --> 00:03:06.250
+that as Senator, for example, give you
+
+00:03:06.350 --> 00:03:07.667
+some semantic navigation.
+
+00:03:07.767 --> 00:03:09.750
+So CEDET is way more than this,
+
+00:03:09.850 --> 00:03:12.433
+but this is not a CEDET talk.
+
+00:03:12.533 --> 00:03:13.983
+So if you want to get more information,
+
+00:03:14.083 --> 00:03:16.350
+you can go to the official webpage.
+
+00:03:16.450 --> 00:03:19.933
+I have to say that it is outdated, and
+
+00:03:20.033 --> 00:03:22.933
+Emacs changed some things over the years
+
+00:03:23.033 --> 00:03:24.067
+because CEDET was merged into Emacs
+
+00:03:24.167 --> 00:03:27.767
+in 2011, as far as I know.
+
+00:03:27.867 --> 00:03:30.417
+You can also go to the official Emacs
+
+00:03:30.517 --> 00:03:32.883
+documentation (the manual), which will get
+
+00:03:32.983 --> 00:03:35.317
+more information about every tool,
+
+00:03:35.417 --> 00:03:38.317
+but it's a really interesting thing, and
+
+00:03:38.417 --> 00:03:40.883
+I'm really sad that it is forgotten.
+
+00:03:40.983 --> 00:03:43.233
+So let's go with the bad things:
+
+00:03:43.333 --> 00:03:46.483
+that CEDET is an abandoned project.
+
+00:03:46.583 --> 00:03:48.217
+This has some benefits like it's not
+
+00:03:48.317 --> 00:03:50.550
+going to change that much,
+
+00:03:50.650 --> 00:03:52.367
+but it's, of course, not ideal.
+
+00:03:52.467 --> 00:03:56.833
+Most of the tooling that CEDET
+
+00:03:56.933 --> 00:03:58.100
+have right now are surpassed
+
+00:03:58.200 --> 00:03:59.633
+by other packages.
+
+00:03:59.733 --> 00:04:02.650
+And at first, I know Eric was working
+
+00:04:02.750 --> 00:04:07.467
+with C at the time so he totally has
+
+00:04:07.567 --> 00:04:10.533
+"real support" so you can use CEDET
+
+00:04:10.633 --> 00:04:13.033
+for other languages, but
+
+00:04:13.133 --> 00:04:15.383
+to work really like an IDE, more or less,
+
+00:04:15.483 --> 00:04:17.017
+it's all the...
+
+00:04:17.117 --> 00:04:19.517
+C is the only language supported,
+
+00:04:19.617 --> 00:04:21.667
+and maybe some simple C++, but that's it.
+
+00:04:21.767 --> 00:04:24.017
+It needs more documentation.
+
+00:04:24.117 --> 00:04:25.683
+People really don't know how to use it
+
+00:04:25.783 --> 00:04:28.583
+because, I have to say, rather complex
+
+00:04:28.683 --> 00:04:30.067
+to get a project working with it,
+
+00:04:30.167 --> 00:04:33.717
+and then make use of Semantic
+
+00:04:33.817 --> 00:04:36.667
+because [it] needs some maintenance and
+
+00:04:36.767 --> 00:04:38.567
+to update the code.
+
+00:04:38.667 --> 00:04:41.083
+But I will argue that even with these
+
+00:04:41.183 --> 00:04:44.383
+deficiencies, it's usable, and
+
+00:04:44.483 --> 00:04:47.517
+I use the foundation of base for
+
+00:04:47.617 --> 00:04:49.533
+parse infrastructure for other languages.
+
+00:04:49.633 --> 00:04:52.367
+I will say that with Common Lisp was
+
+00:04:52.467 --> 00:04:53.983
+rather easy because
+
+00:04:54.083 --> 00:04:56.033
+CEDET already have Emacs Lisp parser
+
+00:04:56.133 --> 00:04:57.900
+even though it's not great.
+
+00:04:58.000 --> 00:05:00.483
+It's easy to adapt and to use.
+
+00:05:00.583 --> 00:05:04.000
+It's not used in an Emacs
+
+00:05:04.100 --> 00:05:05.433
+right now because, well,
+
+00:05:05.533 --> 00:05:08.883
+Emacs know very well itself,
+
+00:05:08.983 --> 00:05:11.600
+but it's there.
+
+00:05:11.700 --> 00:05:17.583
+So these, of course, are static parsers
+
+00:05:17.683 --> 00:05:19.517
+so you don't need to run any
+
+00:05:19.617 --> 00:05:21.883
+other language-specific tools, which is
+
+00:05:21.983 --> 00:05:24.400
+an advantage for some things.
+
+00:05:24.500 --> 00:05:27.133
+And this was basically CEDET is,
+
+00:05:27.233 --> 00:05:30.283
+and I use the parse infrastructure
+
+00:05:30.383 --> 00:05:31.333
+and some tools
+
+00:05:31.433 --> 00:05:34.333
+to create a parser for Common Lisp.
+
+00:05:34.433 --> 00:05:36.700
+Well, more or less. *laughs*
+
+00:05:36.800 --> 00:05:37.900
+Let's go to details.
+
+00:05:38.000 --> 00:05:39.850
+So I will say that it's not a parser
+
+00:05:39.950 --> 00:05:42.433
+by itself because, as we all know,
+
+00:05:42.533 --> 00:05:44.500
+to parse a macro-based language
+
+00:05:44.600 --> 00:05:46.833
+is really hard.
+
+00:05:46.933 --> 00:05:48.450
+Mostly if you cannot have contextual
+
+00:05:48.550 --> 00:05:52.800
+information because if you create code
+
+00:05:52.900 --> 00:05:56.033
+at compile time or runtime is really hard
+
+00:05:56.133 --> 00:05:59.233
+if you don't have run time, right?
+
+00:05:59.333 --> 00:06:00.950
+Basically, CLEDE can be described
+
+00:06:01.050 --> 00:06:02.600
+as a Semantic extension.
+
+00:06:02.700 --> 00:06:03.867
+So basically it's like,
+
+00:06:03.967 --> 00:06:07.133
+you can have Semantic
+
+00:06:07.233 --> 00:06:09.817
+and use it with Common Lisp code
+
+00:06:09.917 --> 00:06:11.600
+and some Common Lisp Emacs tools.
+
+00:06:11.700 --> 00:06:17.350
+So Bison (which is not Bison) is
+
+00:06:17.450 --> 00:06:21.650
+Bovine, and Semantic and Senator
+
+00:06:21.750 --> 00:06:24.750
+for navigating tags,
+
+00:06:24.850 --> 00:06:26.367
+and then communication with SLIME, SLY,
+
+00:06:26.467 --> 00:06:28.733
+and inferior Lisp.
+
+00:06:28.833 --> 00:06:30.450
+That means... I will show that later, but
+
+00:06:30.550 --> 00:06:32.800
+basically, you can parse the buffer,
+
+00:06:32.900 --> 00:06:34.167
+get some tags,
+
+00:06:34.267 --> 00:06:35.967
+get information about the tags that you want,
+
+00:06:36.067 --> 00:06:38.017
+and then send some of that information
+
+00:06:38.117 --> 00:06:43.900
+to the SLIME, SLY, or inferior Lisp REPL buffer,
+
+00:06:44.000 --> 00:06:45.717
+so you can get both things
+
+00:06:45.817 --> 00:06:48.483
+at the same time.
+
+00:06:48.583 --> 00:06:50.217
+And given that it's a Lisp language,
+
+00:06:50.317 --> 00:06:53.300
+this can be pretty interesting.
+
+00:06:53.400 --> 00:06:57.600
+Also I wrote some common package integration,
+
+00:06:57.700 --> 00:06:59.217
+so even though there's not
+
+00:06:59.317 --> 00:07:00.300
+a Common Lisp standard,
+
+00:07:00.400 --> 00:07:05.100
+there's some libraries that are used
+
+00:07:05.200 --> 00:07:07.583
+by basically everyone.
+
+00:07:07.683 --> 00:07:09.417
+They're not part of the standard,
+
+00:07:09.517 --> 00:07:11.000
+but yeah.
+
+00:07:11.100 --> 00:07:13.900
+A lot of people use it: like `asdf`,
+
+00:07:14.000 --> 00:07:15.550
+which is the package manager,
+
+00:07:15.650 --> 00:07:18.967
+I will say it's [`asdf` is] the
+
+00:07:19.067 --> 00:07:21.783
+definition packages, so to say,
+
+00:07:21.883 --> 00:07:23.667
+better than packages itself
+
+00:07:23.767 --> 00:07:26.317
+and have more features.
+
+00:07:26.417 --> 00:07:28.383
+I wrote a nice integration with it
+
+00:07:28.483 --> 00:07:29.500
+and also `fiveam`,
+
+00:07:29.600 --> 00:07:34.417
+which is a well-known test package.
+
+00:07:34.517 --> 00:07:39.300
+I just wrote this as an example
+
+00:07:39.400 --> 00:07:41.883
+on how we can do with CLEDE.
+
+00:07:41.983 --> 00:07:43.633
+Let's look at the features,
+
+00:07:43.733 --> 00:07:46.267
+and then we go to a demo.
+
+00:07:51.367 --> 00:07:54.000
+You can go to the repository.
+
+00:07:54.100 --> 00:07:56.550
+Currently, it's not in Melpa
+
+00:07:56.650 --> 00:07:57.917
+although I wanted
+
+00:07:58.017 --> 00:08:01.250
+to merge it-- I mean, to add it--
+
+00:08:01.450 --> 00:08:04.667
+to Melpa in the future.
+
+00:08:04.767 --> 00:08:06.367
+I want to clean the code and
+
+00:08:06.467 --> 00:08:07.417
+add some more features;
+
+00:08:07.517 --> 00:08:09.650
+I'm working on that and now
+
+00:08:09.750 --> 00:08:12.567
+like an eagle, so to say...
+
+00:08:12.667 --> 00:08:15.533
+but yeah, you can go here and then check
+
+00:08:15.633 --> 00:08:18.833
+all the features and test it.
+
+00:08:18.933 --> 00:08:20.733
+To install is pretty easy:
+
+00:08:20.833 --> 00:08:22.500
+just "add to path" thing.
+
+00:08:22.600 --> 00:08:23.650
+You don't need any external dependencies;
+
+00:08:23.750 --> 00:08:25.817
+everything's in Emacs.
+
+00:08:25.917 --> 00:08:28.467
+This was tested with Emacs 27,
+
+00:08:28.567 --> 00:08:29.883
+but probably going to work
+
+00:08:29.983 --> 00:08:32.750
+with Emacs 25 onwards so
+
+00:08:32.850 --> 00:08:34.267
+it shouldn't be any problem.
+
+00:08:34.367 --> 00:08:38.633
+So let's go with the features.
+
+00:08:38.733 --> 00:08:42.783
+This is some CEDET integrations,
+
+00:08:42.883 --> 00:08:44.417
+and first, like I said, it has
+
+00:08:44.517 --> 00:08:48.000
+support for SLY, SLIME, and inferior Lisp.
+
+00:08:48.100 --> 00:08:49.517
+If you are Common Lisp developer, you
+
+00:08:49.617 --> 00:08:52.267
+probably know a SLIME and a SLY,
+
+00:08:52.367 --> 00:08:53.483
+and inferior Lisp is basically
+
+00:08:53.583 --> 00:08:57.800
+just stock Emacs REPL.
+
+00:08:57.900 --> 00:09:00.817
+I support all three equally, so to say,
+
+00:09:00.917 --> 00:09:05.583
+and we have also `fiveam` integration,
+
+00:09:05.683 --> 00:09:08.867
+the ability to-- as I'm going to show later,
+
+00:09:08.967 --> 00:09:10.883
+you have the ability to send a test--
+
+00:09:10.983 --> 00:09:16.233
+either packages or an entire suite of tests,
+
+00:09:16.333 --> 00:09:21.350
+and `asdf`, which currently I'm just
+
+00:09:21.450 --> 00:09:23.517
+supporting basic project navigation
+
+00:09:23.617 --> 00:09:25.433
+and some information,
+
+00:09:25.533 --> 00:09:28.517
+but it's a work-in-progress.
+
+00:09:28.617 --> 00:09:29.783
+I also have some general activities
+
+00:09:29.883 --> 00:09:31.917
+that are not directly related to CEDET
+
+00:09:32.017 --> 00:09:34.050
+but part of the CLEDE package, which
+
+00:09:34.150 --> 00:09:35.500
+is CLEDE highlight.
+
+00:09:35.600 --> 00:09:36.817
+It's highly inspired by the
+
+00:09:36.917 --> 00:09:41.167
+Emacs re-factor `erefactor`.
+
+00:09:41.267 --> 00:09:43.950
+Basically, you have some nice
+
+00:09:44.050 --> 00:09:47.883
+highlights for lint variables.
+
+00:09:47.983 --> 00:09:49.467
+I want to expand that to also
+
+00:09:49.567 --> 00:09:53.133
+support parameters and function stuff,
+
+00:09:53.233 --> 00:09:56.300
+but it's not a high priority for me.
+
+00:09:56.400 --> 00:09:58.117
+But yeah, I sometimes use this;
+
+00:09:58.217 --> 00:10:01.950
+it's pretty neat when you have a big lint.
+
+00:10:02.050 --> 00:10:05.333
+Also some refactoring utilities...
+
+00:10:05.433 --> 00:10:06.700
+some of those can be said
+
+00:10:06.800 --> 00:10:08.400
+that it's overlapped with some...
+
+00:10:08.500 --> 00:10:12.467
+because it is a string base, it doesn't
+
+00:10:12.567 --> 00:10:15.983
+have too much context information,
+
+00:10:16.083 --> 00:10:17.967
+but yeah, some sort of
+
+00:10:18.067 --> 00:10:22.167
+`replace-symbol-in-region` and `symbol-tag`.
+
+00:10:22.267 --> 00:10:23.867
+And then some CLEDE commands.
+
+00:10:23.967 --> 00:10:25.500
+This is the thing that I use all the time.
+
+00:10:25.600 --> 00:10:26.067
+It's like you're going to find
+
+00:10:26.167 --> 00:10:29.067
+some commands to send to a REPL.
+
+00:10:29.167 --> 00:10:31.367
+I will show some example, but basically,
+
+00:10:31.467 --> 00:10:32.983
+you have already an example.
+
+00:10:33.083 --> 00:10:34.333
+You define a list of commands,
+
+00:10:34.433 --> 00:10:37.867
+you put name, and then you put the
+
+00:10:37.967 --> 00:10:39.300
+Common Lisp code that you want to send.
+
+00:10:39.400 --> 00:10:41.550
+Given that, you're writing this
+
+00:10:41.650 --> 00:10:43.483
+Emacs Lisp in your configuration.
+
+00:10:43.583 --> 00:10:46.867
+You can have some runtime information
+
+00:10:46.967 --> 00:10:49.450
+when the code is sent, right?
+
+00:10:49.550 --> 00:10:53.450
+so insert, get a variable value, or whatever.
+
+00:10:53.550 --> 00:10:56.133
+OK, `imenu` integration.
+
+00:10:56.233 --> 00:10:58.967
+Yes, Semantic...
+
+00:10:59.067 --> 00:11:02.450
+CEDET has a great `imenu` utilities
+
+00:11:02.550 --> 00:11:05.600
+to have a better `imenu`.
+
+00:11:05.700 --> 00:11:10.383
+`imenu-list` also works really well.
+
+00:11:10.483 --> 00:11:12.917
+So you have better... when you go to a file
+
+00:11:13.017 --> 00:11:15.200
+that you don't fully know what is inside,
+
+00:11:15.300 --> 00:11:20.533
+it's better to navigate having like a tree.
+
+00:11:20.633 --> 00:11:22.383
+Yeah, this one's the thing is going
+
+00:11:22.483 --> 00:11:24.783
+to show that Senator, which is
+
+00:11:24.883 --> 00:11:26.633
+Semantic navigator, and then some
+
+00:11:26.733 --> 00:11:30.217
+Semantic-specific tools like `complete-jump`,
+
+00:11:30.317 --> 00:11:32.750
+which I don't use this one too much
+
+00:11:32.850 --> 00:11:35.300
+because we have SLY/SLIME,
+
+00:11:35.400 --> 00:11:39.083
+but they're there, so yeah.
+
+00:11:39.183 --> 00:11:41.433
+Like I said, Common Lisp library support,
+
+00:11:41.533 --> 00:11:44.333
+which is duplicated.
+
+00:11:44.433 --> 00:11:47.017
+OK, so let's go to the demo.
+
+00:11:47.117 --> 00:11:50.983
+Um.
+
+00:11:51.083 --> 00:11:53.567
+Let's go to the demo file.
+
+00:11:53.667 --> 00:11:55.300
+Right.
+
+00:11:55.400 --> 00:11:58.250
+First, we have to do is enable CLEDE.
+
+00:11:58.350 --> 00:11:59.433
+This is pretty easy:
+
+00:11:59.533 --> 00:12:03.400
+we call `clede-start`, right,
+
+00:12:03.500 --> 00:12:05.100
+and now it's started.
+
+00:12:05.200 --> 00:12:08.100
+CLEDE is not an asynchronous parser so
+
+00:12:08.200 --> 00:12:10.900
+Semantic (in this case, Bovine) is not.
+
+00:12:11.000 --> 00:12:15.917
+If the file is large, it may take some time.
+
+00:12:16.017 --> 00:12:16.017
+It shouldn't because we have
+
+00:12:16.117 --> 00:12:19.117
+powerful computers, but if your
+
+00:12:19.217 --> 00:12:21.917
+computer is not that powerful,
+
+00:12:22.017 --> 00:12:22.933
+it may take a while.
+
+00:12:23.033 --> 00:12:26.117
+To see the information that has been
+
+00:12:26.217 --> 00:12:31.167
+parsed, we're going to call `bovinate`.
+
+00:12:31.267 --> 00:12:33.767
+Oops... oops...
+
+00:12:33.867 --> 00:12:36.033
+Oh! I have to-- sorry...
+
+00:12:36.133 --> 00:12:43.267
+Let's enable Semantic again.
+
+00:12:43.367 --> 00:12:45.217
+Let's start... `bovinate`...
+
+00:12:45.317 --> 00:12:48.117
+OK, so...
+
+00:12:48.217 --> 00:12:49.917
+This is the information that
+
+00:12:50.017 --> 00:12:52.983
+currently CLEDE is taking from the buffer.
+
+00:12:53.083 --> 00:12:55.517
+So we can see it's taking this, and
+
+00:12:55.617 --> 00:12:58.550
+it doesn't know what it is,
+
+00:12:58.550 --> 00:13:02.167
+so this is the tag name...
+
+00:13:02.267 --> 00:13:02.850
+this is the type,
+
+00:13:02.950 --> 00:13:03.733
+and these are some information
+
+00:13:03.833 --> 00:13:05.750
+and the location.
+
+00:13:05.850 --> 00:13:08.150
+OK, so we know that this is a variable,
+
+00:13:08.250 --> 00:13:10.150
+and it has the full value.
+
+00:13:10.250 --> 00:13:13.233
+You know this is a package, right,
+
+00:13:13.333 --> 00:13:15.450
+because it's defined as a package.
+
+00:13:15.550 --> 00:13:18.100
+It doesn't understand what this is.
+
+00:13:18.300 --> 00:13:18.967
+This node is a function
+
+00:13:19.067 --> 00:13:19.817
+because of the `fun`,
+
+00:13:19.917 --> 00:13:23.133
+and some of this is code,
+
+00:13:23.233 --> 00:13:25.917
+and it also understands some tests
+
+00:13:26.017 --> 00:13:27.667
+because it has `fiveam` integration.
+
+00:13:27.767 --> 00:13:31.000
+If it detects that has some test here
+
+00:13:31.000 --> 00:13:34.517
+it will know that, indeed, it is test.
+
+00:13:34.517 --> 00:13:40.317
+So let's try some, first, `imenu`.
+
+00:13:40.417 --> 00:13:42.550
+So we can see here we have...
+
+00:13:42.650 --> 00:13:44.750
+I understand that this have
+
+00:13:44.850 --> 00:13:46.600
+some sort of `fiveam` switch
+
+00:13:46.700 --> 00:13:49.350
+and some tests defined.
+
+00:13:49.450 --> 00:13:51.000
+It understands this package, and
+
+00:13:51.100 --> 00:13:52.783
+it'll give you some variables-- `defuns`,
+
+00:13:52.883 --> 00:13:55.117
+and it also will give you some misc
+
+00:13:55.217 --> 00:13:59.917
+for things that doesn't know what it is.
+
+00:14:00.017 --> 00:14:00.983
+And you can also
+
+00:14:01.083 --> 00:14:04.417
+navigate with this-- like this `imenu`.
+
+00:14:06.000 --> 00:14:12.000
+So, um, let's go first with some Senator.
+
+00:14:12.000 --> 00:14:14.867
+So with Senator, we can navigate,
+
+00:14:14.967 --> 00:14:16.200
+go to the next stack, previous stack,
+
+00:14:16.300 --> 00:14:20.783
+all this, um, top-level `s-expression`
+
+00:14:20.883 --> 00:14:22.467
+are basically a tag, even though
+
+00:14:22.567 --> 00:14:28.467
+it's code... you can navigate, right.
+
+00:14:28.567 --> 00:14:31.333
+Um, copy/kill this or some other stuff.
+
+00:14:31.433 --> 00:14:34.017
+Um, some interesting thing that we can
+
+00:14:34.117 --> 00:14:38.717
+do is let's launch SLY, right.
+
+00:14:38.817 --> 00:14:44.317
+Um, let's load `fiveam`,
+
+00:14:44.417 --> 00:14:45.500
+and let's send some tests.
+
+00:14:45.600 --> 00:14:51.467
+We can say, OK, `clede-fiveam-send-current-test`,
+
+00:14:51.567 --> 00:14:53.033
+and it will-- OK, have to compile
+
+00:14:53.133 --> 00:14:54.750
+this file first.
+
+00:14:54.850 --> 00:14:55.983
+OK, you don't like this...
+
+00:14:56.083 --> 00:14:58.367
+you compile the tests.
+
+00:14:58.467 --> 00:15:03.667
+OK... um... well...
+
+00:15:03.767 --> 00:15:05.017
+I don't have-- yeah, I don't have
+
+00:15:05.117 --> 00:15:11.833
+the switch here so let's...
+
+00:15:11.933 --> 00:15:14.733
+OK, yeah because I guess it's getting...
+
+00:15:14.833 --> 00:15:19.583
+sorry about this...
+
+00:15:19.683 --> 00:15:22.983
+Let's say we're going to send this test...
+
+00:15:23.083 --> 00:15:28.667
+It isn't working...
+
+00:15:28.767 --> 00:15:36.967
+OK, why are you not working...
+
+00:15:37.067 --> 00:15:38.450
+maybe because we have to go
+
+00:15:38.550 --> 00:15:47.083
+to the package `fiveam`.
+
+00:15:47.183 --> 00:15:49.133
+Yes, sorry... um...
+
+00:15:49.233 --> 00:15:51.550
+Yeah, so we're gonna go here, and
+
+00:15:51.650 --> 00:15:54.117
+we can say `fiveam-send-tests`,
+
+00:15:54.217 --> 00:15:55.250
+and there we have it.
+
+00:15:55.350 --> 00:15:56.200
+It will send the test
+
+00:15:56.300 --> 00:16:00.217
+that we are currently in, right.
+
+00:16:00.317 --> 00:16:01.883
+So that's the thing.
+
+00:16:01.983 --> 00:16:04.000
+Another interesting thing that I said is
+
+00:16:04.000 --> 00:16:08.450
+`clede-highlight-minor-mode`.
+
+00:16:08.550 --> 00:16:11.567
+Basically, work in `let`'s context
+
+00:16:11.667 --> 00:16:13.450
+to know where to highlight
+
+00:16:13.550 --> 00:16:17.117
+all the variables,
+
+00:16:17.217 --> 00:16:20.217
+and we can disable.
+
+00:16:20.317 --> 00:16:21.833
+What else do we have?
+
+00:16:21.933 --> 00:16:24.100
+So we have framework integration.
+
+00:16:24.200 --> 00:16:25.900
+You can go `clede-` and
+
+00:16:26.000 --> 00:16:27.717
+see what more commands are.
+
+00:16:27.817 --> 00:16:29.767
+`commands-run` are basically a way
+
+00:16:29.867 --> 00:16:31.617
+to define commands, you have a variable,
+
+00:16:31.717 --> 00:16:35.317
+which is `clede-commands-list`.
+
+00:16:35.417 --> 00:16:37.233
+Let's explain that you can get
+
+00:16:37.333 --> 00:16:39.817
+some system working
+
+00:16:39.917 --> 00:16:42.617
+or whatever command you want, right.
+
+00:16:42.717 --> 00:16:46.083
+Also you have `asdf` basic integration.
+
+00:16:46.183 --> 00:16:48.067
+You can go to a definition file
+
+00:16:48.167 --> 00:16:51.050
+of some of the systems are already loaded.
+
+00:16:51.150 --> 00:16:53.667
+For example, let's go to here,
+
+00:16:53.767 --> 00:16:55.550
+and we go to the definition file--
+
+00:16:55.650 --> 00:16:57.917
+there's the file, right?
+
+00:16:58.017 --> 00:16:59.000
+This is used because I'm sending
+
+00:16:59.100 --> 00:17:00.800
+commands for the REPL, so this
+
+00:17:00.900 --> 00:17:04.117
+functionality is not provided
+
+00:17:04.217 --> 00:17:09.167
+by CEDET or Semantic,
+
+00:17:09.267 --> 00:17:11.633
+but I can also get some sort
+
+00:17:11.733 --> 00:17:19.717
+of information for `asd` file,
+
+00:17:19.817 --> 00:17:21.550
+which is a work-in-progress,
+
+00:17:21.650 --> 00:17:23.100
+but you can go to some component file
+
+00:17:23.200 --> 00:17:24.150
+when you have a big `asd` file
+
+00:17:24.250 --> 00:17:25.200
+with lots of components
+
+00:17:25.300 --> 00:17:27.783
+and some other interesting thing.
+
+00:17:27.883 --> 00:17:30.283
+Like I said, that's a work-in-progress,
+
+00:17:30.383 --> 00:17:34.967
+Yes, so this is most of the functionality.
+
+00:17:35.067 --> 00:17:37.000
+The most interesting thing, I think,
+
+00:17:37.100 --> 00:17:40.267
+is the base for the foundation.
+
+00:17:40.367 --> 00:17:43.000
+So you can expand: let's go to source code,
+
+00:17:43.100 --> 00:17:48.333
+for example, that `fiveam`.
+
+00:17:48.433 --> 00:17:49.900
+So as we can see here, this is
+
+00:17:50.000 --> 00:17:53.433
+the `fiveam` integration, and to add it,
+
+00:17:53.533 --> 00:17:58.233
+I just define some new functions,
+
+00:17:58.333 --> 00:18:01.983
+and then you use this...
+
+00:18:02.083 --> 00:18:04.150
+set up a new form parser that we use
+
+00:18:04.250 --> 00:18:06.400
+to get some information
+
+00:18:06.500 --> 00:18:09.150
+about the `s-expression` top-level,
+
+00:18:09.250 --> 00:18:10.433
+and we define the names,
+
+00:18:10.533 --> 00:18:11.617
+we define information we want to take
+
+00:18:11.717 --> 00:18:13.700
+from the symbol and everything else.
+
+00:18:13.800 --> 00:18:17.133
+Also some [??] types
+
+00:18:17.233 --> 00:18:19.367
+that would be going to be added
+
+00:18:19.467 --> 00:18:21.067
+to the `imenu` thing:
+
+00:18:21.167 --> 00:18:24.033
+for example, `imenu test switch and test`.
+
+00:18:24.133 --> 00:18:27.317
+And then, these are, for example,
+
+00:18:27.417 --> 00:18:29.333
+some function to send information
+
+00:18:29.433 --> 00:18:33.483
+to the SLY, SLIME, or inferior Lisp
+
+00:18:33.583 --> 00:18:37.050
+depending on the Lisp that you're using.
+
+00:18:37.150 --> 00:18:39.400
+So I do not have more time.
+
+00:18:39.500 --> 00:18:40.367
+Sorry about that.
+
+00:18:40.467 --> 00:18:44.917
+Thank you very much.
+
+00:18:45.017 --> 00:18:46.383
+My name is Fermin.
+
+00:18:46.483 --> 00:18:49.733
+You can send me a mail in my mail,
+
+00:18:49.833 --> 00:18:51.233
+and that's my webpage.
+
+00:18:51.333 --> 00:18:54.950
+I hope you like it.
diff --git a/2021/info/clede-schedule.md b/2021/info/clede-schedule.md
index 5f327ba7..2bfe4d4f 100644
--- a/2021/info/clede-schedule.md
+++ b/2021/info/clede-schedule.md
@@ -10,7 +10,8 @@ If you have questions and the speaker has not indicated public contact informati
# Talk
[[!template id="vid" vidid="mainVideo" src="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.webm" poster="https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.png"
-size="39.8M" duration="18:55" other_resources="""[Download --compressed56.webm (24.6MB)](https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--compressed56.webm)
+size="39.8M" duration="18:55" captions="""<track label="English" kind="captions" srclang="en" src="/2021/captions/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt" default />""" other_resources="""[Download --compressed56.webm (24.6MB)](https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--compressed56.webm)
+[Download --main.vtt](emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt)
[View on Toobnix](https://toobnix.org/w/1HuHMank52gcpHqf4M7Sa5)
"""]]
diff --git a/2021/talks/clede.md b/2021/talks/clede.md
index 4a4229e0..59bb10f6 100644
--- a/2021/talks/clede.md
+++ b/2021/talks/clede.md
@@ -10,13 +10,6 @@ Fermin MF
[[!inline pages="internal(2021/info/clede-schedule)" raw="yes"]]
-[[!template id="help" tags="help_with_main_captions"
-summary="main talk does not have captions"
-volunteer="Hannah Miller 2021-12-22"
-message="""This talk does not have captions yet. Would you like to help [caption this talk](/captioning/)? You may be able to start with these
-[autogenerated captions](https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf--main.vtt)
-and [timing information](https://media.emacsconf.org/2021/emacsconf-2021-clede--clede-the-common-lisp-emacs-development-environment--fermin-mf.en.srv2)."""]]
-
I've been developing a package that helps with the development of
Common Lisp's software,
it's uses the internal semantic framework, it has a custom reader