WEBVTT 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.