WEBVTT captioned by sachac, checked by sachac
NOTE Introduction
00:00:00.000 --> 00:00:03.199
Hello, my name is Fermin.
00:00:03.200 --> 00:00:06.959
Today, I'm going to talk about the Emacsen family,
00:00:06.960 --> 00:00:11.159
the design of an Emacs, and the importance of Lisp.
00:00:11.160 --> 00:00:13.519
So we're going to talk about Lisp.
00:00:13.520 --> 00:00:16.999
I want to start from the end.
NOTE Why Lisp matters
00:00:17.000 --> 00:00:19.039
The first question I want to ask is
00:00:19.040 --> 00:00:21.399
why I think Lisp matters.
00:00:21.400 --> 00:00:22.879
When I'm talking about Lisp here,
00:00:22.880 --> 00:00:27.559
I'm talking about the idea of Lisp,
00:00:27.560 --> 00:00:30.119
so the family of languages that are Lisp.
00:00:30.120 --> 00:00:34.719
But given that there's no formal specification of Lisp,
00:00:34.720 --> 00:00:40.599
so the opinion might vary. I will expect that Lisp,
00:00:40.600 --> 00:00:44.439
most of the Lisp have these kind of features.
00:00:44.440 --> 00:00:46.239
The first one is homoiconic:
00:00:46.240 --> 00:00:49.799
the code is data, basically.
00:00:49.800 --> 00:00:52.559
They also have a REPL: read-eval-print loop.
00:00:52.560 --> 00:00:57.759
That is very powerful and can help in development.
00:00:57.760 --> 00:01:00.359
Also, I think a good Lisp
00:01:00.360 --> 00:01:03.319
should have a powerful macro system.
00:01:03.320 --> 00:01:05.759
I'm good with compile-time macros,
00:01:05.760 --> 00:01:07.599
but read-time is also interesting.
00:01:07.600 --> 00:01:10.279
There's a lot of Lisp that you can choose.
00:01:10.280 --> 00:01:11.999
There's the main three ones, of course,
00:01:12.000 --> 00:01:13.839
with Scheme, Common Lisp, and Clojure.
00:01:13.840 --> 00:01:19.674
Scheme by Guile, Common Lisp by Common Lisp,
00:01:19.675 --> 00:01:26.639
and Clojure by Clojure or ClojureScript.
NOTE Why Emacs Lisp was chosen
00:01:26.640 --> 00:01:28.079
So let's talk about Emacs Lisp.
00:01:28.080 --> 00:01:29.679
I didn't mention Emacs Lisp.
00:01:29.680 --> 00:01:32.519
I'm going to talk about why Emacs Lisp
00:01:32.520 --> 00:01:35.599
was chosen for an Emacs editor.
00:01:35.600 --> 00:01:39.159
We're going to explore this kind of design of the Emacs.
00:01:39.160 --> 00:01:42.279
And Emacs Lisp is the main language of it. Why?
00:01:42.280 --> 00:01:44.959
Given that there were a few alternatives at the time,
00:01:44.960 --> 00:01:48.159
why Emacs Lisp was chosen?
00:01:48.160 --> 00:01:51.919
So RMS, Richard Stallman, needed a Lisp,
00:01:51.920 --> 00:01:54.279
and there wasn't one available at the time.
00:01:54.280 --> 00:01:57.039
Keep in mind, this was the early 80s.
00:01:57.040 --> 00:02:03.240
Stallman was writing at that point the GCC, I think,
00:02:03.241 --> 00:02:07.974
and he was writing the core components
00:02:07.975 --> 00:02:10.440
of what is going to become GNU.
00:02:10.441 --> 00:02:15.499
He needed an editor. He wanted Lisp. He wanted Emacs.
00:02:15.500 --> 00:02:20.280
So he wrote Emacs Lisp. So at that time,
00:02:20.281 --> 00:02:24.599
the functionality was more important than "perfection."
00:02:24.600 --> 00:02:26.639
What I mean [by] "perfection" is: we programmers
00:02:26.640 --> 00:02:33.359
sometimes like to make everything good
00:02:33.360 --> 00:02:36.479
or very, very good when sometimes, indeed,
00:02:36.480 --> 00:02:39.119
it's more important that it works
00:02:39.120 --> 00:02:42.919
to do the task that it should.
00:02:42.920 --> 00:02:44.199
And it's not a bad language.
00:02:44.200 --> 00:02:50.239
It's not that bad. At that time, it was mostly nice.
00:02:50.240 --> 00:02:54.840
Today, it's good enough, I think.
NOTE Other "Emacsen"
00:02:54.841 --> 00:02:59.460
He wasn't the first one, the GNU Emacs,
00:02:59.461 --> 00:03:02.540
nor the only one, of course.
00:03:02.541 --> 00:03:06.439
There were others: Hemlock, Zmacs, and Climacs...
00:03:06.440 --> 00:03:08.980
Two of them, I think, were written in Common Lisp,
00:03:08.981 --> 00:03:14.479
and Zmacs was written in a Lisp from a Lisp machine,
00:03:14.480 --> 00:03:16.639
so it was an implementation of Emacs.
00:03:16.640 --> 00:03:19.039
Not GNU Emacs, but the original idea
00:03:19.040 --> 00:03:22.079
of Emacs for a Lisp machine.
00:03:22.080 --> 00:03:23.759
So Hemlock was written in Common Lisp,
00:03:23.760 --> 00:03:26.079
but it's no longer used and no longer developed,
00:03:26.080 --> 00:03:28.999
as far as I know. And Climacs, it was developed,
00:03:29.000 --> 00:03:31.519
but it was abandoned, I think.
00:03:31.520 --> 00:03:33.639
So three of them failed for different reasons.
00:03:33.640 --> 00:03:37.879
Zmacs was because of the Lisp machine market crash,
00:03:37.880 --> 00:03:38.580
and yeah, it also failed.
NOTE Why not Common Lisp?
00:03:38.581 --> 00:03:44.039
So Emacs got alone. And in the 90s, interesting to explore,
00:03:44.040 --> 00:03:46.479
some people suggest that why
00:03:46.480 --> 00:03:49.679
now that we have a standard Lisp, right,
00:03:49.680 --> 00:03:52.559
because Common Lisp was standardized in '94,
00:03:52.560 --> 00:03:56.719
why don't we change Emacs Lisp to Common Lisp?
00:03:56.720 --> 00:03:58.999
These are the other reasons I think are important,
00:03:59.000 --> 00:04:01.159
because that's why Stallman didn't choose Common Lisp.
00:04:01.160 --> 00:04:02.039
But I think the main one
00:04:02.040 --> 00:04:03.759
that I didn't write here
00:04:03.760 --> 00:04:09.039
is that Stallman wasn't a big fan of Common Lisp,
00:04:09.040 --> 00:04:12.679
and he was at the time the main developer
00:04:12.680 --> 00:04:14.040
and maintainer, of course, for Emacs.
00:04:14.041 --> 00:04:16.439
So he chose not to move to Common Lisp.
00:04:16.440 --> 00:04:18.479
But other reasons may be why...
00:04:18.480 --> 00:04:22.919
Because he had a late and painful standardization.
00:04:22.920 --> 00:04:28.039
Keep in mind, the first book that Guy Steele wrote
00:04:28.040 --> 00:04:32.239
was in 1984. The standardization finished in 19--
00:04:32.240 --> 00:04:38.279
sorry, in 1984 was the first book
00:04:38.280 --> 00:04:44.420
and the standardization finished in 1994.
00:04:44.421 --> 00:04:48.119
So, like, 10 years of difference from one to the other.
00:04:48.120 --> 00:04:51.879
10 years of a lot of talk, a lot of money,
00:04:51.880 --> 00:04:56.399
and a lot of pain probably.
00:04:56.400 --> 00:04:59.199
The Lisp usage declined in the 90s
00:04:59.200 --> 00:05:00.959
due to the AI winter.
00:05:00.960 --> 00:05:03.359
We all know about the Lisp machine market crash.
00:05:03.360 --> 00:05:08.839
And the failure of commercial Lisp machine was
00:05:08.840 --> 00:05:12.239
inevitable at that point.
00:05:12.240 --> 00:05:17.160
So all the potential Emacs friends died.
00:05:17.161 --> 00:05:21.279
And also a lot of Emacs Lisp was already available.
00:05:21.280 --> 00:05:24.559
Emacs was already an amateur utility.
00:05:24.560 --> 00:05:29.959
Unix won the war of the operating system, as we know,
00:05:29.960 --> 00:05:33.839
and Emacs Lisp was available in Unix,
00:05:33.840 --> 00:05:36.919
or in GNU/Linux, as we know,
00:05:36.920 --> 00:05:40.479
which is the most successful implementation of Unix.
00:05:40.480 --> 00:05:44.207
Sorry, BSD. Okay.
00:05:44.208 --> 00:05:48.399
So Emacs won by being the "better" alternative.
00:05:48.400 --> 00:05:49.999
I'm quoting "better" here because
00:05:50.000 --> 00:05:53.699
I think Emacs does have a better design
00:05:53.700 --> 00:05:56.959
and, well, it was the one that survived, right?
00:05:56.960 --> 00:06:00.039
Which is the more important thing for a software or,
00:06:00.040 --> 00:06:05.159
you know... So Emacs won by being free,
00:06:05.160 --> 00:06:08.399
also in price, which I think the Lisp machine wasn't.
00:06:08.400 --> 00:06:11.519
So that was also very good. It was included.
00:06:11.520 --> 00:06:14.559
It had, and it still has, of course,
00:06:14.560 --> 00:06:15.879
a nice collection of packages
00:06:15.880 --> 00:06:20.679
that improve the standard functionality.
00:06:20.680 --> 00:06:23.479
It was easy to extend because of the nature of Lisp.
00:06:23.480 --> 00:06:26.039
And it has a very good integration with GNU/Linux,
00:06:26.040 --> 00:06:29.399
of course. It was created to write it.
00:06:29.400 --> 00:06:31.079
It makes sense that it's very good
00:06:31.080 --> 00:06:39.119
for a system administration perspective.
NOTE Common Lisp is still not dead or is always dead
00:06:39.120 --> 00:06:43.319
But I think Common Lisp is not dead yet.
00:06:43.320 --> 00:06:45.719
Or some people say that it's always dead,
00:06:45.720 --> 00:06:48.399
so you cannot kill the something that is always dead.
00:06:48.400 --> 00:06:50.719
So I don't always code in C,
00:06:50.720 --> 00:06:54.199
but when I do, it's Lisp. I'm not a big fan of C
00:06:54.200 --> 00:06:58.599
for a lot of things, but yeah.
00:06:58.600 --> 00:07:02.439
Why I think Common Lisp is still relevant
00:07:02.440 --> 00:07:05.399
and can be used for all kind of application,
00:07:05.400 --> 00:07:09.279
both commercially and non-commercially.
00:07:09.280 --> 00:07:11.839
The first one is the main implementation
00:07:11.840 --> 00:07:16.799
of Common Lisp, which is called SBCL, which is awesome.
00:07:16.800 --> 00:07:19.399
It's fast. It's a very good extension.
00:07:19.400 --> 00:07:21.639
Basically, it's the reference one today.
00:07:21.640 --> 00:07:25.559
The namespaces of common Lisp,
00:07:25.560 --> 00:07:26.879
I really like the implementation.
00:07:26.880 --> 00:07:28.719
Some people don't like it. It's a matter of taste.
00:07:28.720 --> 00:07:29.639
But I think it's really good.
00:07:29.640 --> 00:07:32.919
I have a timeless standard. So it was standardized
00:07:32.920 --> 00:07:35.979
in the 90s, as I said.
00:07:35.980 --> 00:07:38.880
And it doesn't really need a new standard.
00:07:38.881 --> 00:07:44.119
Some people say it does need, but I don't think so.
00:07:44.120 --> 00:07:45.999
Also it does have macro readers,
00:07:46.000 --> 00:07:49.159
which I think is a very nice feature of Common Lisp
00:07:49.160 --> 00:07:51.239
that other Lisp doesn't seem to have,
00:07:51.240 --> 00:07:56.719
or a lot of them don't: in my mind, Emacs Lisp and Clojure.
00:07:56.720 --> 00:07:58.199
Also, it's image-based development,
00:07:58.200 --> 00:08:00.399
which is also quite unique to Common Lisp.
00:08:00.400 --> 00:08:04.359
I don't know all the Lisp that does have this.
00:08:04.360 --> 00:08:05.359
Basically, you develop a REPL
00:08:05.360 --> 00:08:10.159
and then you dump the entire REPL into an image.
00:08:10.160 --> 00:08:12.079
Java would be like a core dump.
00:08:12.080 --> 00:08:14.159
And you create an executable.
00:08:14.160 --> 00:08:17.159
Which at the time, I guess in the 90s,
00:08:17.160 --> 00:08:18.199
was a huge one, right?
00:08:18.200 --> 00:08:20.679
Because you have the entire language, and the REPL,
00:08:20.680 --> 00:08:23.799
and the code. But today are like 20 MB,
00:08:23.800 --> 00:08:26.599
which in today's standard is nothing.
00:08:26.600 --> 00:08:30.079
There's pictures in your phone larger than 20 MB.
NOTE Lem is a nice Emacsen implementation
00:08:30.080 --> 00:08:39.239
So there's a new Emacs in town--well, Emacs, not Emacs,
00:08:39.240 --> 00:08:43.439
Which is Lem. I think it's a very good Emacs implementation.
00:08:43.440 --> 00:08:46.679
What I mean by "Emacs" here is not a clone of GNU Emacs,
00:08:46.680 --> 00:08:51.559
but an Emacs-inspired editor with similar characteristics,
00:08:51.560 --> 00:08:53.519
and written in a Lisp,
00:08:53.520 --> 00:08:58.259
which is why I said that Lisp was very important.
NOTE Why not just use GNU Emacs?
00:08:58.260 --> 00:09:01.559
So first, I'm going to address the elephant in the room,
00:09:01.560 --> 00:09:05.039
and the question that maybe most
00:09:05.040 --> 00:09:06.159
of you are now thinking.
00:09:06.160 --> 00:09:12.919
Why not just use GNU Emacs? It's the project.
00:09:12.920 --> 00:09:15.759
It's the main one, right? Why choose another one?
00:09:15.760 --> 00:09:18.199
So Lem is relatively new, 2018.
00:09:18.200 --> 00:09:20.199
And it can explore different ideas.
00:09:20.200 --> 00:09:21.679
It was developed by Sasaki-san.
00:09:21.680 --> 00:09:26.719
Basically, it was mostly a one-month project,
00:09:26.720 --> 00:09:31.940
but we are getting there. I'm not the maintainer.
00:09:31.941 --> 00:09:36.959
I'm a developer of Lem. So given that it's
00:09:36.960 --> 00:09:39.239
relatively new, it can explore different ideas.
00:09:39.240 --> 00:09:43.519
You're not bound to a community or backwards compatibility.
00:09:43.520 --> 00:09:45.439
You can explore different ideas,
00:09:45.440 --> 00:09:46.199
and I think that's always nice.
00:09:46.200 --> 00:09:49.839
Having multiple options creates competition,
00:09:49.840 --> 00:09:52.639
which benefits the community. So Emacs and Vim,
00:09:52.640 --> 00:09:54.839
the competition between the two
00:09:54.840 --> 00:09:59.119
always create nice packages like evil or, you know...
00:09:59.120 --> 00:10:03.719
It's really good to have some kind of a competition,
00:10:03.720 --> 00:10:06.159
healthy competition.
00:10:06.160 --> 00:10:08.199
And it doesn't share any code base with GNU Emacs.
00:10:08.200 --> 00:10:12.879
I want to clarify this because some people think that
00:10:12.880 --> 00:10:16.119
Lem is kind of a, you know, Spacemacs or Doom.
00:10:16.120 --> 00:10:19.959
No, it doesn't share any code.
00:10:19.960 --> 00:10:27.759
It has zero Emacs. So that's it.
00:10:27.760 --> 00:10:29.199
Getting this out of the way.
00:10:29.200 --> 00:10:31.079
Why I think Lem is interesting.
NOTE Why Lem
00:10:31.080 --> 00:10:32.359
I'm going to show why Lem.
00:10:32.360 --> 00:10:37.759
Why? You can try Lem, and maybe you like it.
00:10:37.760 --> 00:10:41.319
First thing, these are the features
00:10:41.320 --> 00:10:42.799
that I really like from it.
00:10:42.800 --> 00:10:45.574
Can be different from person to person,
00:10:45.575 --> 00:10:48.279
but I think these are the main ideas
00:10:48.280 --> 00:10:49.999
it brings to the table and are really interesting.
00:10:50.000 --> 00:10:53.119
I want to say that Lem is not a research project.
00:10:53.120 --> 00:10:55.719
It's not like some people did that
00:10:55.720 --> 00:10:57.239
and it's still in development. No, no.
00:10:57.240 --> 00:11:00.039
This is a usable product that can be used
00:11:00.040 --> 00:11:02.039
to [do] day-to-day programming
00:11:02.040 --> 00:11:04.559
in a very good experience.
00:11:04.560 --> 00:11:06.279
This is not like--I want to clarify this
00:11:06.280 --> 00:11:08.719
because some people bring some exploratory projects.
00:11:08.720 --> 00:11:10.799
This is not that one. This is finished.
00:11:10.800 --> 00:11:14.719
Well, finished in the way that you can use it.
00:11:14.720 --> 00:11:17.799
It's not, you know, have everything in place.
00:11:17.800 --> 00:11:20.639
So let's continue.
00:11:20.640 --> 00:11:22.159
It's written 100% in Common Lisp.
00:11:22.160 --> 00:11:23.839
I say this because Emacs is not
00:11:23.840 --> 00:11:26.279
100% in Emacs Lisp.
00:11:26.280 --> 00:11:28.359
You have to modify the C code,
00:11:28.360 --> 00:11:31.839
I think, well, if you... You don't have to,
00:11:31.840 --> 00:11:33.999
but if you want to change the internals, you do.
00:11:34.000 --> 00:11:38.879
I think that given that Lem does not care
00:11:38.880 --> 00:11:41.199
about the implementation of the language itself--
00:11:41.200 --> 00:11:44.039
so for example, Lem doesn't have to deal with
00:11:44.040 --> 00:11:48.199
how Common Lisp works, it just used the language, right?
00:11:48.200 --> 00:11:50.799
It's on top of the language.
00:11:50.800 --> 00:11:53.879
You can say that. Emacs Lisp is Emacs and Emacs Lisp,
00:11:53.880 --> 00:11:56.079
so you have to, you have both in the same place,
00:11:56.080 --> 00:12:00.319
which is, well, it's a double-edged sword, right?
00:12:00.320 --> 00:12:03.319
Then you have the both--similar to Emacs--
00:12:03.320 --> 00:12:05.639
you have ncurses and SDL2 frontends.
00:12:05.640 --> 00:12:08.719
One is terminal-based and the other is graphical
00:12:08.720 --> 00:12:10.399
using the SDL2 library,
00:12:10.400 --> 00:12:13.759
which you can do a lot of crazy things.
00:12:13.760 --> 00:12:16.159
Of course, it's meant to program games and stuff,
00:12:16.160 --> 00:12:19.679
but Lem uses, and it works fairly well.
00:12:19.680 --> 00:12:21.879
You can program games if you want.
00:12:21.880 --> 00:12:27.559
Not that you need to or anything, but we have Tetris.
00:12:27.560 --> 00:12:28.999
So there's that.
00:12:29.000 --> 00:12:31.719
Also, separate front-end interface.
00:12:31.720 --> 00:12:34.159
So like I said, you have two, but you can create more.
00:12:34.160 --> 00:12:36.439
In the past, had an electron one,
00:12:36.440 --> 00:12:41.319
but it got abandoned for obvious reasons, I think. Sorry.
00:12:41.320 --> 00:12:45.839
This idea is taken from Neovim that had a lot of frontends.
00:12:45.840 --> 00:12:48.119
In fact, we don't have that many,
00:12:48.120 --> 00:12:49.639
but not that many people we have two.
00:12:49.640 --> 00:12:51.674
That works fairly well.
00:12:51.675 --> 00:12:56.679
We have superb development experience thanks to SLIME.
00:12:56.680 --> 00:13:01.319
So we have Micro,
00:13:01.320 --> 00:13:04.039
which is a SLIME version for Lem, basically.
00:13:04.040 --> 00:13:08.999
SLIME is awesome and Micro is also awesome.
00:13:09.000 --> 00:13:12.319
We have a very strong development experience
00:13:12.320 --> 00:13:15.399
that we don't have for a Lisp,
00:13:15.400 --> 00:13:17.399
which I think is very important.
00:13:17.400 --> 00:13:20.319
If you want someone to develop packages or to use your tool,
00:13:20.320 --> 00:13:22.719
your Emacs at least,
00:13:22.720 --> 00:13:28.759
you need to have a very good development experience,
00:13:28.760 --> 00:13:34.039
which enhance the extensions for the editor.
00:13:34.040 --> 00:13:36.719
So we have also Vim-like integration.
00:13:36.720 --> 00:13:39.399
This for me was mostly mandatory
00:13:39.400 --> 00:13:44.439
because I'm an evil-mode user, and I think it's really good.
00:13:44.440 --> 00:13:49.479
Because evil-mode is very good and the VMode,
00:13:49.480 --> 00:13:51.719
which it's called, even though it's more like Vim mode,
00:13:51.720 --> 00:13:54.159
it's called VMode. It's written by
00:13:54.160 --> 00:13:59.159
Fukamachi-san and it's really good.
00:13:59.160 --> 00:14:01.959
So yeah, that's the thing that I think Lem brings to
00:14:01.960 --> 00:14:03.079
the table and that's really interesting.
NOTE Similarities and differences
00:14:03.080 --> 00:14:10.519
So I'm going to do a small demo of Lem, a Emacs example.
00:14:10.520 --> 00:14:11.679
First, the similarities,
00:14:11.680 --> 00:14:14.119
the nomenclature is very similar: modes, buffers,
00:14:14.120 --> 00:14:17.439
commands... The commands are very similar in nature.
00:14:17.440 --> 00:14:20.039
It was written with GNU Emacs in mind
00:14:20.040 --> 00:14:24.359
to mimic a lot of things.
00:14:24.360 --> 00:14:29.079
I think GNU Emacs is the best Emacs implementation
00:14:29.080 --> 00:14:33.719
in that way. So why not just take what is working, right?
00:14:33.720 --> 00:14:35.599
I have similar command,
00:14:35.600 --> 00:14:39.399
but flexible to add other default ones.
00:14:39.400 --> 00:14:42.399
It's not like Emacs that you have Emacs commands.
00:14:42.400 --> 00:14:45.159
Lem has Emacs command by default,
00:14:45.160 --> 00:14:47.759
but you can easily change that
00:14:47.760 --> 00:14:49.919
with other default ones, right?
00:14:49.920 --> 00:14:52.159
It's like, you can think of it like a major mode, right?
00:14:52.160 --> 00:14:54.439
Well, more like a global mode,
00:14:54.440 --> 00:14:57.960
sorry. That's a global mode of Emacs commands,
00:14:57.961 --> 00:14:59.360
or something like that.
00:14:59.361 --> 00:15:01.519
In general, the feeling is really close.
00:15:01.520 --> 00:15:05.919
So you will tell that it's really close to how both work,
00:15:05.920 --> 00:15:07.839
similar commands, and that shows.
00:15:07.840 --> 00:15:12.359
Differences, Common Lisp is not Emacs Lisp,
00:15:12.360 --> 00:15:13.919
it's similar in the surface.
00:15:13.920 --> 00:15:16.279
So it uses `defun`, you know, have parentheses
00:15:16.280 --> 00:15:18.719
and yada, yada, but it's not the same language, really,
00:15:18.720 --> 00:15:20.839
and sometimes you will find
00:15:20.840 --> 00:15:22.639
that the differences are substantial.
00:15:23.260 --> 00:15:24.859
The internals are completely different,
00:15:24.860 --> 00:15:27.479
of course, nothing, well, completely.
00:15:27.480 --> 00:15:29.719
They have a buffer implementation and other things,
00:15:29.720 --> 00:15:32.359
but in general, yeah, aside from that,
00:15:32.360 --> 00:15:34.079
it's completely different.
00:15:34.080 --> 00:15:36.199
And it's true that GNU Emacs
00:15:36.200 --> 00:15:37.479
has a better documentation tutorial.
00:15:37.480 --> 00:15:39.719
So GNU Emacs for me, I think it's
00:15:39.720 --> 00:15:41.759
one of the best-documented software ever.
00:15:41.760 --> 00:15:49.599
We're trying to go there, but we're still not there.
NOTE Demo
00:15:49.600 --> 00:15:54.079
Let's do the demo. So to open Lem, you compile it,
00:15:54.080 --> 00:15:55.759
and then you have it available,
00:15:55.760 --> 00:15:57.719
and you open Lem. As you can see,
00:15:57.720 --> 00:16:00.839
we have the temporary buffer. On the top left is the mode--
00:16:00.840 --> 00:16:03.279
not mode,
00:16:03.280 --> 00:16:07.239
the beam, insert, normal, visual. This is the V mode, right?
00:16:07.240 --> 00:16:10.279
In the top right corner, we have fundamental,
00:16:10.280 --> 00:16:11.599
which is the major mode, then paredit,
00:16:11.600 --> 00:16:15.079
which is like the minor mode, but you know,
00:16:15.080 --> 00:16:16.079
this is like the paredit for Emacs.
00:16:16.080 --> 00:16:19.199
In the top left buffer,
00:16:19.200 --> 00:16:22.479
you have the current buffer.
00:16:22.480 --> 00:16:26.479
So let's open the... Emacs, we all know how to do this.
00:16:26.480 --> 00:16:29.319
This is a command, like explore this command,
00:16:29.320 --> 00:16:31.479
like `open-init-file`. This opens the init file,
00:16:31.480 --> 00:16:34.319
which is in this directory, in `~/.lem/init.lisp`.
00:16:34.320 --> 00:16:38.239
As you can see, this is very similar, right?
00:16:38.240 --> 00:16:40.279
You define a command, which is not interactive,
00:16:40.280 --> 00:16:42.959
and then you get the buffer, right?
00:16:42.960 --> 00:16:44.919
This is a... So my personal command...
00:16:44.920 --> 00:16:48.879
Let's go to the one that I just opened. Init file, right?
00:16:48.880 --> 00:16:52.159
So this is a command that I did,
00:16:52.160 --> 00:16:53.439
which is `find-file`.
00:16:53.440 --> 00:16:56.599
This is very similar to [??], but just `find-file`.
00:16:56.600 --> 00:16:58.399
As you can see, very similar.
00:16:58.400 --> 00:17:01.759
This is the way that you program in Lem.
00:17:01.760 --> 00:17:04.839
This is the major mode, which is Lisp,
00:17:04.840 --> 00:17:06.959
that we're seeing at the top, right?
00:17:06.960 --> 00:17:10.479
And we can connect if we `slime-self-connect`.
00:17:10.480 --> 00:17:14.119
This is the prompt. This is the REPL.
00:17:14.120 --> 00:17:17.959
So if we... Keep in mind that this is Common Lisp,
00:17:17.960 --> 00:17:20.439
so this has different things.
00:17:20.440 --> 00:17:22.719
So we have to go to the Lem package,
00:17:22.720 --> 00:17:26.199
which is very important. This has namespaces, right?
00:17:26.200 --> 00:17:29.039
It's not the same. And we can say, okay,
00:17:29.040 --> 00:17:32.319
`current-buffer`. We get the buffer.
00:17:32.320 --> 00:17:35.199
We can explore everything that is in it, right?
00:17:35.200 --> 00:17:38.559
We have all this stuff. This is... If you're familiar
00:17:38.560 --> 00:17:41.159
with SLIME or Sly, this is it.
00:17:41.160 --> 00:17:46.279
It's just that we can say, buffer, I think it's `buffer-name`.
00:17:46.280 --> 00:17:49.159
Yes. And we can take this,
00:17:49.160 --> 00:17:50.799
and then we'll give you the name.
00:17:50.800 --> 00:17:54.359
So as you can see, the development experience
00:17:54.360 --> 00:17:57.639
is really powerful. We can also `lisp-scratch`,
00:17:57.640 --> 00:18:00.679
which transform... basically apply
00:18:00.680 --> 00:18:02.639
the major mode of Lisp to the temporary buffer.
00:18:02.640 --> 00:18:06.719
This is very similar to Emacs.
00:18:06.720 --> 00:18:11.999
Let's go back to the theme. I think that's it.
00:18:12.000 --> 00:18:13.879
Thank you all very much for listening to me.
00:18:13.880 --> 00:18:15.239
I think I point out
00:18:15.240 --> 00:18:16.999
the Emacsen family is really interesting.
00:18:17.000 --> 00:18:19.279
Lisp is really good, and GNU Emacs is really good,
00:18:19.280 --> 00:18:21.199
and I think Lem is also pretty awesome.
00:18:21.200 --> 00:18:23.119
So thank you all very much.
00:18:23.120 --> 00:18:27.560
I'll be answering the question now. And happy hacking.