WEBVTT
00:00:08.620 --> 00:00:09.120
[Speaker 0]: And I think we are live.
00:00:09.620 --> 00:00:09.960
Hello again, everyone.
00:00:10.940 --> 00:00:11.440
And hi, Lovro. How are you doing?
00:00:15.339 --> 00:00:15.839
[Speaker 1]: Just a second. Should I join the other room?
00:00:18.460 --> 00:00:18.740
[Speaker 0]: Oh, no, no, you can stay here.
00:00:20.860 --> 00:00:21.360
[Speaker 1]: I can stay in the backstage.
00:00:24.140 --> 00:00:24.320
[Speaker 0]: Everything is fine. I don't think you are
00:00:25.520 --> 00:00:25.760
technically in the backstage right now you're
00:00:26.750 --> 00:00:26.820
just in Big Blue Button with us.
00:00:30.040 --> 00:00:30.160
[Speaker 1]: Oh thanks. Oh because I have 2 of them open I
00:00:30.920 --> 00:00:31.280
thought there were 2 different rooms.
00:00:32.720 --> 00:00:33.220
1 is the backstage and the other,
00:00:38.239 --> 00:00:38.360
[Speaker 0]: whichever, I can hear you and so can the
00:00:39.840 --> 00:00:40.080
stream, so don't worry too much about which
00:00:41.140 --> 00:00:41.220
is the backstage and which is the front page.
00:00:41.540 --> 00:00:41.760
[Speaker 1]: I have no idea. Well, great,
00:00:43.660 --> 00:00:43.940
great. Okay, yeah. Yeah,
00:00:45.280 --> 00:00:45.480
I'm doing great, just to answer your
00:00:45.480 --> 00:00:45.980
question.
00:00:47.379 --> 00:00:47.640
[Speaker 0]: Okay, great, great, Okay,
00:00:49.900 --> 00:00:50.280
well splendid. So, I've pasted a link again
00:00:51.520 --> 00:00:51.760
on IRC if you want to ask your questions,
00:00:53.000 --> 00:00:53.200
and I'd invite you to do so,
00:00:54.620 --> 00:00:55.040
because we have about 9 minutes of laborious
00:00:56.580 --> 00:00:57.080
time to answer as many of them as possible.
00:00:58.360 --> 00:00:58.860
And I'm going to start with the first 1.
00:01:01.100 --> 00:01:01.600
This looks great and was very well-presented.
00:01:03.240 --> 00:01:03.420
Do you have plans to upstream this
00:01:04.239 --> 00:01:04.739
functionality into Emacs?
00:01:08.000 --> 00:01:08.200
[Speaker 1]: That's a good idea. That's something we
00:01:08.860 --> 00:01:09.360
thought about as well.
00:01:11.640 --> 00:01:12.140
Currently, we haven't really contacted anyone
00:01:16.160 --> 00:01:16.660
to do this. Also, the current implementation,
00:01:19.760 --> 00:01:20.080
so as I mentioned in the presentation towards
00:01:22.120 --> 00:01:22.300
the end, so we use a little bit of advice to
00:01:24.240 --> 00:01:24.520
sort of patch some functionality of query
00:01:26.479 --> 00:01:26.600
replace because not everything was easy to
00:01:28.680 --> 00:01:29.180
implement. The core functionality luckily
00:01:32.220 --> 00:01:32.340
was, But there's a couple of fixes we need to
00:01:34.200 --> 00:01:34.340
apply to the message function in order to
00:01:36.380 --> 00:01:36.820
display a nice message in the echo buffer
00:01:39.140 --> 00:01:39.320
because this doesn't happen on its own when
00:01:41.100 --> 00:01:41.580
we're using this trick with this big regex
00:01:45.360 --> 00:01:45.720
and whatnot. So I don't think that the code
00:01:47.080 --> 00:01:47.580
as it is would be upstreamable.
00:01:50.600 --> 00:01:51.100
I think probably if we wanted to upstream it,
00:01:54.140 --> 00:01:54.280
we would have to do some proper work on
00:01:57.180 --> 00:01:57.340
refactoring query place itself in order to
00:01:58.780 --> 00:01:58.979
integrate all of this functionality just
00:02:01.880 --> 00:02:02.380
directly without any patching left and right.
00:02:05.680 --> 00:02:06.120
But yeah, definitely something I've given
00:02:10.080 --> 00:02:10.259
some thought, but so far no progress on it.
00:02:11.640 --> 00:02:11.980
I haven't actually started doing anything
00:02:12.240 --> 00:02:12.740
about it.
00:02:17.440 --> 00:02:17.780
[Speaker 0]: Right, So I'm curious now,
00:02:19.640 --> 00:02:19.900
you developed the feature and then you moved
00:02:21.600 --> 00:02:21.740
on to the presentation or did you want to do
00:02:23.080 --> 00:02:23.200
a presentation for EmacsConf and then you
00:02:24.140 --> 00:02:24.640
worked on something like this?
00:02:26.360 --> 00:02:26.860
Which was it first, the chicken or the egg?
00:02:28.220 --> 00:02:28.720
[Speaker 1]: Yeah, it was the former.
00:02:31.320 --> 00:02:31.820
So this is a problem I've been aware of for,
00:02:33.340 --> 00:02:33.840
I mean, probably a couple of years.
00:02:35.280 --> 00:02:35.640
And, you know, I talked to my friend
00:02:37.600 --> 00:02:37.840
Valentino about it and we had like a little
00:02:39.240 --> 00:02:39.740
discussion, you know, how would we do this?
00:02:41.880 --> 00:02:42.380
And then I remember back when I was
00:02:44.140 --> 00:02:44.260
researching about this problem and the
00:02:45.100 --> 00:02:45.600
various Emacs Lisp solutions,
00:02:47.780 --> 00:02:47.960
all I could find were these solutions that
00:02:49.400 --> 00:02:49.600
would, you know, just shy away from
00:02:50.640 --> 00:02:50.920
implementing the RegEx case,
00:02:52.340 --> 00:02:52.840
which is a really complicated 1.
00:02:54.720 --> 00:02:55.220
And, after some discussion,
00:02:56.140 --> 00:02:56.580
my friend and I decided,
00:02:58.080 --> 00:02:58.320
okay, what the hell? Let's,
00:02:59.280 --> 00:02:59.480
let's try and implement this.
00:03:01.800 --> 00:03:02.300
How hard can it be? And yeah,
00:03:03.280 --> 00:03:03.780
basically in 1 afternoon,
00:03:06.300 --> 00:03:06.500
the idea, our little trick and the whole
00:03:07.440 --> 00:03:07.940
implementation was born.
00:03:11.480 --> 00:03:11.680
And then I think that was maybe around a year
00:03:12.540 --> 00:03:13.040
ago, maybe a bit less.
00:03:14.480 --> 00:03:14.680
And then through the months,
00:03:15.920 --> 00:03:16.420
we just thought, oh yeah,
00:03:17.420 --> 00:03:17.640
maybe we could present this,
00:03:18.960 --> 00:03:19.200
maybe it would be interesting for people to
00:03:20.660 --> 00:03:20.920
see and that's how we came up with the idea
00:03:22.440 --> 00:03:22.940
to present at EmacsConf.
00:03:27.900 --> 00:03:28.180
[Speaker 0]: Okay, great. I don't see other people asking
00:03:30.240 --> 00:03:30.540
questions. So people, it's nice if I ask
00:03:31.100 --> 00:03:31.600
questions but you know,
00:03:33.160 --> 00:03:33.340
the point is kind of for you to ask the
00:03:35.140 --> 00:03:35.280
questions. I see someone who's joined us on
00:03:36.780 --> 00:03:37.120
BBB. Peter, would you like to ask a question
00:03:41.720 --> 00:03:41.980
maybe? Otherwise I see another person writing
00:03:43.040 --> 00:03:43.260
a question on the pad,
00:03:44.540 --> 00:03:44.700
so we can either move for this 1.
00:03:46.640 --> 00:03:46.800
So I'll leave Peter to figure out if they
00:03:47.680 --> 00:03:47.960
want to ask a question.
00:03:49.160 --> 00:03:49.660
So I'm moving on to the next question.
00:03:57.900 --> 00:03:58.180
[Speaker 2]: I can jump in. That's a really well done talk
00:04:01.780 --> 00:04:02.120
and you really clearly laid out the problem
00:04:03.000 --> 00:04:03.500
and the solution there.
00:04:05.600 --> 00:04:05.740
While I was watching it,
00:04:10.740 --> 00:04:11.040
I was thinking maybe the nice way to name it
00:04:13.140 --> 00:04:13.440
is just to name it query replace and query
00:04:15.700 --> 00:04:16.019
replace regext, you know,
00:04:18.480 --> 00:04:18.980
overloading the original functions and then
00:04:23.000 --> 00:04:23.460
using a prefix number,
00:04:26.880 --> 00:04:27.380
like control number to indicate how many
00:04:29.280 --> 00:04:29.780
replacements you're going to do.
00:04:31.640 --> 00:04:32.140
But maybe that doesn't work with the
00:04:36.680 --> 00:04:37.120
recursive editing stuff,
00:04:37.960 --> 00:04:38.180
which I don't use much.
00:04:40.440 --> 00:04:40.940
So I don't have a good method.
00:04:43.260 --> 00:04:43.760
[Speaker 1]: I think it would definitely work.
00:04:46.260 --> 00:04:46.440
Well, the question is,
00:04:47.880 --> 00:04:48.380
if we just overwrite the definitions,
00:04:51.700 --> 00:04:52.200
then, oh, well, I guess we could do that.
00:04:53.410 --> 00:04:53.560
Nothing stops us. I mean,
00:04:54.800 --> 00:04:54.880
we're in Emacs. We could definitely do that.
00:04:55.680 --> 00:04:55.920
And then if you give, like,
00:04:57.540 --> 00:04:57.720
a prefix argument, maybe it just drops you
00:04:59.060 --> 00:04:59.560
back to the original query replace.
00:05:01.000 --> 00:05:01.160
Yeah, that's an idea. For now,
00:05:02.440 --> 00:05:02.920
we decided, OK, let's just keep everything
00:05:05.000 --> 00:05:05.240
explicitly separate just to avoid any
00:05:05.240 --> 00:05:05.740
confusion.
00:05:09.220 --> 00:05:09.400
[Speaker 2]: Yeah, I think that's the right thing to do
00:05:11.820 --> 00:05:12.320
for now. What I'm actually thinking is that
00:05:13.620 --> 00:05:13.940
when you do query replace,
00:05:15.600 --> 00:05:16.100
it just does the regular query replace.
00:05:17.220 --> 00:05:17.440
And if you're going to do,
00:05:20.140 --> 00:05:20.640
say, 3 parallel replacements,
00:05:21.340 --> 00:05:21.840
then you do Control-U,
00:05:25.580 --> 00:05:26.080
query replace. Sorry. Control-3,
00:05:28.580 --> 00:05:28.860
query replace. And then that way you don't
00:05:33.400 --> 00:05:33.760
have The final prompt that you give nothing
00:05:33.760 --> 00:05:34.260
to.
00:05:36.880 --> 00:05:37.380
[Speaker 1]: Exactly, that's actually not a bad idea.
00:05:39.720 --> 00:05:40.080
I think I like that. Yeah,
00:05:40.800 --> 00:05:41.300
that's not a bad idea.
00:05:44.760 --> 00:05:44.920
[Speaker 0]: It's always a quagmire whether to ask for an
00:05:47.080 --> 00:05:47.580
argument or to use the universal argument.
00:05:51.060 --> 00:05:51.380
When you're working with Emacs and especially
00:05:52.640 --> 00:05:52.960
the UX side of things in the package,
00:05:54.900 --> 00:05:55.020
it's so complicated to figure out which 1 you
00:05:56.880 --> 00:05:57.380
want to do. In this particular case,
00:06:00.340 --> 00:06:00.840
I think it's the better option to use the
00:06:02.800 --> 00:06:03.120
universal argument or any kind of argument
00:06:04.040 --> 00:06:04.540
with a control number before.
00:06:10.240 --> 00:06:10.440
All right, we have about 3 more minutes of
00:06:12.440 --> 00:06:12.720
questions. Peter, if you don't mind,
00:06:14.440 --> 00:06:14.940
I'll keep reading the questions in the chat.
00:06:19.440 --> 00:06:19.940
Did you use pair programming while developing
00:06:21.100 --> 00:06:21.600
it, it being a package,
00:06:22.440 --> 00:06:22.940
or did you work independently,
00:06:24.840 --> 00:06:25.340
alternating and reviewing with Valentino?
00:06:28.320 --> 00:06:28.440
[Speaker 1]: It was definitely a pair programming kind of
00:06:29.440 --> 00:06:29.940
thing. So if I remember correctly,
00:06:32.760 --> 00:06:33.260
I was sitting at the computer and Valentino
00:06:36.020 --> 00:06:36.520
was in front of a whiteboard and we were just
00:06:38.400 --> 00:06:38.900
dissecting this regex and a bunch of examples
00:06:41.680 --> 00:06:41.820
and trying to get these capture groups and
00:06:44.240 --> 00:06:44.440
stuff that we have to remap internally to get
00:06:46.560 --> 00:06:46.880
these offsets right and avoid off by 1 error
00:06:48.160 --> 00:06:48.420
and stuff like that. So yeah,
00:06:49.280 --> 00:06:49.780
definitely a team effort.
00:06:53.660 --> 00:06:54.160
[Speaker 0]: Okay, great. Moving on to the next question.
00:06:55.240 --> 00:06:55.740
What is your background in programming?
00:06:57.440 --> 00:06:57.620
Was it difficult to implement following the
00:06:59.700 --> 00:07:00.040
same API and architecture as what is already
00:07:00.200 --> 00:07:00.700
in Emacs?
00:07:05.400 --> 00:07:05.680
[Speaker 1]: So maybe just a quick back story.
00:07:06.960 --> 00:07:07.440
Both Valentino and I are actually PhD
00:07:08.300 --> 00:07:08.680
students in computer science,
00:07:09.960 --> 00:07:10.460
and we literally share an office.
00:07:12.960 --> 00:07:13.180
So that's how we even started talking about
00:07:14.480 --> 00:07:14.900
this whole thing. And we both use Emacs,
00:07:18.380 --> 00:07:18.640
of course. But I don't think this was too
00:07:20.740 --> 00:07:20.880
hard to implement because luckily all of the
00:07:22.300 --> 00:07:22.540
interactive functionality like this
00:07:23.600 --> 00:07:24.100
complicated undo, skipping,
00:07:25.680 --> 00:07:26.180
execute until the end and so on,
00:07:27.980 --> 00:07:28.380
all of this is really just already provided
00:07:29.860 --> 00:07:30.360
by the Emacs queer replace implementation.
00:07:34.160 --> 00:07:34.360
So sort of what we do is we just invoke it as
00:07:36.080 --> 00:07:36.220
a function and delegate to it.
00:07:37.800 --> 00:07:38.000
And we came up with this clever trick to
00:07:42.380 --> 00:07:42.560
basically delegate this multi-replacement to
00:07:45.160 --> 00:07:45.660
this 1 single function that's already there.
00:07:47.980 --> 00:07:48.480
So it wasn't too complicated.
00:07:54.780 --> 00:07:54.960
[Speaker 0]: Alright. And we have about 2 minutes of time
00:07:55.560 --> 00:07:56.040
for the last question.
00:07:58.040 --> 00:07:58.260
What did you learn about Emacs programming or
00:08:00.020 --> 00:08:00.100
programming in general while working on this
00:08:02.320 --> 00:08:02.820
project? A very wide question for me.
00:08:05.840 --> 00:08:06.340
[Speaker 1]: Maybe 1 thing I would like to add to the
00:08:09.220 --> 00:08:09.440
previous just answer is I don't want to say
00:08:10.160 --> 00:08:10.660
like you know we're PhDs,
00:08:12.780 --> 00:08:13.260
a PhD is required for this or anything,
00:08:15.800 --> 00:08:15.920
not at all. It's mostly just for a little bit
00:08:19.220 --> 00:08:19.720
of context, but I think obviously,
00:08:20.640 --> 00:08:21.020
even if you're not a PhD,
00:08:22.360 --> 00:08:22.540
I mean, you don't even require like
00:08:24.960 --> 00:08:25.460
university, you know, education or anything.
00:08:27.540 --> 00:08:28.040
It wasn't overly difficult to implement,
00:08:30.680 --> 00:08:31.080
sort of just read some code that's already
00:08:33.539 --> 00:08:34.039
there and you know follow what you see and
00:08:35.860 --> 00:08:36.020
poke Emacs a little bit and do a little bit
00:08:38.140 --> 00:08:38.320
of debugging on the internals and you can
00:08:40.280 --> 00:08:40.440
definitely get it. So definitely not a
00:08:42.240 --> 00:08:42.400
prerequisite to have a degree or anything to
00:08:45.480 --> 00:08:45.600
do any of this stuff. Okay so Coming back to
00:08:48.420 --> 00:08:48.560
[Speaker 0]: Yeah, I'm going to amend a little bit the
00:08:49.680 --> 00:08:49.960
question because we only have 1 minute.
00:08:51.600 --> 00:08:52.100
So just 1 thing in 10 seconds,
00:08:52.490 --> 00:08:52.540
[Speaker 2]: what did you
00:08:53.040 --> 00:08:53.540
[Speaker 0]: learn about this?
00:08:54.240 --> 00:08:54.380
[Speaker 1]: your last question. What did I learn about
00:08:56.420 --> 00:08:56.920
Emacs programming? That Emacs is so flexible
00:08:59.160 --> 00:08:59.360
that I can go and I can patch literally its
00:09:01.480 --> 00:09:01.880
message function. And that is how we achieve
00:09:03.680 --> 00:09:04.180
the nice message function in the echo buffer.
00:09:06.720 --> 00:09:06.980
So I can literally go and patch something as
00:09:07.560 --> 00:09:08.060
crucial as message.
00:09:09.920 --> 00:09:10.420
[Speaker 0]: It's great. That's a lovely 1.
00:09:12.260 --> 00:09:12.380
And I think, again, we're going back to the
00:09:13.660 --> 00:09:13.780
philosophy of Emacs. Everything is
00:09:15.200 --> 00:09:15.520
programmable and even changing the message
00:09:16.640 --> 00:09:16.800
function is great. All right,
00:09:17.440 --> 00:09:17.640
well, thank you so much,
00:09:19.540 --> 00:09:19.660
Lovro, and thanks to Valentino as well,
00:09:21.820 --> 00:09:21.960
who's not here, but who's contributed to this
00:09:23.900 --> 00:09:24.400
talk. Any last word?
00:09:29.540 --> 00:09:29.800
[Speaker 1]: Well, just if you're gonna build any
00:09:31.980 --> 00:09:32.160
solutions, try to make them as foolproof and
00:09:34.360 --> 00:09:34.540
as 100% as possible so we get more of these
00:09:36.280 --> 00:09:36.420
goodies that are nice and robust for
00:09:37.000 --> 00:09:37.500
everybody to use.
00:09:39.400 --> 00:09:39.620
[Speaker 0]: All right, lovely. Well,
00:09:40.240 --> 00:09:40.580
thank you so much, Lover,
00:09:41.940 --> 00:09:42.380
for your presentation and your answer.
00:09:44.340 --> 00:09:44.640
We'll be moving on to the next talk in just
00:09:47.260 --> 00:09:47.720
about 5 seconds, and I'll see you after.
00:09:47.900 --> 00:09:48.400
Bye, Lovro!
00:09:49.760 --> 00:09:50.260
[Speaker 1]: Yep, bye bye!
00:10:01.440 --> 00:10:01.560
[Speaker 0]: So I'm just waiting to make sure my VNC is a
00:10:02.840 --> 00:10:03.000
little slow. Okay, we switch to the next
00:10:03.480 --> 00:10:03.740
talk. All right, Lover,
00:10:04.960 --> 00:10:05.460
I'm gonna need to go get ready now.
00:10:09.060 --> 00:10:09.560
Yep. Bye-bye, and thanks for your talk.
00:10:11.160 --> 00:10:11.660
[Speaker 1]: Bye, thank you, see you.
00:10:15.060 --> 00:10:15.560
[Speaker 2]: You