WEBVTT 00:00:00.399 --> 00:00:03.280 My name is Corwin Brust and I 00:00:03.280 --> 00:00:06.240 will be talking about getting started 00:00:06.240 --> 00:00:08.960 with Emacs today. 00:00:08.960 --> 00:00:11.200 I have been an Emacs user for a long 00:00:11.200 --> 00:00:13.040 time. First of all, thanks and a huge 00:00:13.040 --> 00:00:15.360 welcome to the conference 00:00:15.360 --> 00:00:18.400 from me and 00:00:18.400 --> 00:00:22.400 and on behalf 00:00:22.400 --> 00:00:24.720 and back to the other people that 00:00:24.720 --> 00:00:26.080 have been helping to organize. 00:00:26.080 --> 00:00:30.480 It's been amazing just to be involved 00:00:30.480 --> 00:00:32.480 with that and just, kind of, see 00:00:32.480 --> 00:00:36.399 backstage. 00:00:36.399 --> 00:00:39.680 So I've used a lot of different editors 00:00:39.680 --> 00:00:42.960 in my time. That's 00:00:42.960 --> 00:00:45.440 about 25 years as a professional 00:00:45.440 --> 00:00:52.399 software engineer. 00:00:52.399 --> 00:00:53.920 And most of that time I've been using 00:00:53.920 --> 00:00:56.160 Emacs. I'll talk a little bit in a minute 00:00:56.160 --> 00:01:00.960 (if I can ever find my slides) 00:01:00.960 --> 00:01:04.479 about how I got into Emacs 00:01:04.479 --> 00:01:07.200 but I think if you've used Emacs and a 00:01:07.200 --> 00:01:10.240 lot of other editors for a long time, 00:01:10.240 --> 00:01:15.200 something that you notice right away is that 00:01:15.200 --> 00:01:17.520 you get good with it in a way that stays 00:01:17.520 --> 00:01:18.560 meaningful. 00:01:18.560 --> 00:01:20.799 You learn new things. Those things 00:01:20.799 --> 00:01:27.600 stick with you. You learn how to 00:01:27.600 --> 00:01:30.720 make it do new tricks and then 00:01:30.720 --> 00:01:33.759 keep doing those tricks. 00:01:33.759 --> 00:01:36.799 I want to mention that this 00:01:36.799 --> 00:01:39.439 conference--oops, 00:01:39.439 --> 00:01:41.439 this talk isn't about 00:01:41.439 --> 00:01:45.600 how to adjust your 00:01:45.600 --> 00:01:47.520 configuration specifically. I don't have 00:01:47.520 --> 00:01:50.000 a bunch of good code samples in here. 00:01:50.000 --> 00:01:51.520 There are other great talks at the 00:01:51.520 --> 00:01:54.399 conference, particularly Andrew's, 00:01:54.399 --> 00:01:57.600 that I looked at, that looked 00:01:57.600 --> 00:01:59.920 like they might be more aimed at that 00:01:59.920 --> 00:02:02.240 "hey, I'm just getting started with Emacs, 00:02:02.240 --> 00:02:05.280 what are some things to try to make 00:02:05.280 --> 00:02:07.200 it more comfortable for me starting?" This 00:02:07.200 --> 00:02:08.879 is about how to think about the problem 00:02:08.879 --> 00:02:09.759 space. 00:02:09.759 --> 00:02:12.959 Hopefully, a good warm up as we 00:02:12.959 --> 00:02:14.080 start thinking about some of the 00:02:14.080 --> 00:02:17.200 lightning talks a little later on. 00:02:17.200 --> 00:02:20.000 I'm just gonna quickly make sure I 00:02:20.000 --> 00:02:22.400 can see my IRC buffer in case I run into 00:02:22.400 --> 00:02:24.080 time. I didn't get my stopwatch started 00:02:24.080 --> 00:02:25.680 for this one. 00:02:25.680 --> 00:02:29.680 So all right, let's dive in. 00:02:29.680 --> 00:02:32.879 We assume that we want to install 00:02:32.879 --> 00:02:33.840 packages 00:02:33.840 --> 00:02:36.560 and maybe configure some features. This 00:02:36.560 --> 00:02:38.319 is particularly from the perspective of 00:02:38.319 --> 00:02:39.120 where we're working 00:02:39.120 --> 00:02:40.800 with a bunch of people on a team and we 00:02:40.800 --> 00:02:42.160 want to get something done. 00:02:42.160 --> 00:02:44.800 Some of us probably already have mature 00:02:44.800 --> 00:02:46.560 Emacs workflows. 00:02:46.560 --> 00:02:49.280 Others are installing it for the first 00:02:49.280 --> 00:02:53.519 time. 00:02:53.519 --> 00:02:56.879 So the first question is, you know, 00:02:56.879 --> 00:02:59.280 in that context: what's the value 00:02:59.280 --> 00:03:00.879 proposition? Why should I mess with my 00:03:00.879 --> 00:03:02.840 machine, my mature Emacs 00:03:02.840 --> 00:03:05.599 configuration, and impose my 00:03:05.599 --> 00:03:07.440 ideas over the way somebody else is 00:03:07.440 --> 00:03:10.239 learning Emacs? Well, 00:03:10.239 --> 00:03:12.800 it can be.. I'm off my slides here a 00:03:12.800 --> 00:03:13.840 little bit. 00:03:13.840 --> 00:03:16.400 It can be a little bit 00:03:16.400 --> 00:03:16.959 tricky 00:03:16.959 --> 00:03:20.400 to learn Emacs. One thing that 00:03:20.400 --> 00:03:21.440 helps us a lot 00:03:21.440 --> 00:03:24.720 is if people that we're working with 00:03:24.720 --> 00:03:26.239 can tell us, kinda, keystroke for 00:03:26.239 --> 00:03:28.080 keystroke at times, what to do and 00:03:28.080 --> 00:03:30.480 explain what everything is doing. 00:03:30.480 --> 00:03:32.400 Using the same packages can really 00:03:32.400 --> 00:03:35.840 help us working together on a project. 00:03:35.840 --> 00:03:39.840 Speaking from my personal 00:03:39.840 --> 00:03:40.720 experience, 00:03:40.720 --> 00:03:42.959 it took me decades to get to the point 00:03:42.959 --> 00:03:45.040 where I was excited to program in Emacs 00:03:45.040 --> 00:03:46.720 Lisp. I've programmed in a lot of programming 00:03:46.720 --> 00:03:47.840 languages, 00:03:47.840 --> 00:03:51.200 but Lisp wasn't on my list. I looked at 00:03:51.200 --> 00:03:53.680 my config that I was copy-pasting around 00:03:53.680 --> 00:03:56.319 from generation after generation of 00:03:56.319 --> 00:03:57.519 .emacs file or 00:03:57.519 --> 00:03:59.519 recrafting it from hand and from Internet 00:03:59.519 --> 00:04:00.799 searches, 00:04:00.799 --> 00:04:03.519 to get the things that I needed when 00:04:03.519 --> 00:04:05.680 I would quickly go install Emacs at some 00:04:05.680 --> 00:04:07.680 new job or contract, 00:04:07.680 --> 00:04:10.959 and 00:04:10.959 --> 00:04:13.680 be able to to quickly get through that 00:04:13.680 --> 00:04:15.280 workflow that caused me to install the 00:04:15.280 --> 00:04:17.440 program. 00:04:17.440 --> 00:04:20.560 You know, just 00:04:20.560 --> 00:04:23.440 little simple one-liners that that 00:04:23.440 --> 00:04:25.199 got committed to memory over decades 00:04:25.199 --> 00:04:27.120 eventually just led me to a sort of "hey what's going on 00:04:27.120 --> 00:04:28.880 here." And I credit 00:04:28.880 --> 00:04:31.680 Jeff Goff, my good friend who died 00:04:31.680 --> 00:04:33.520 earlier in 2020, 00:04:33.520 --> 00:04:37.759 for my lifelong love of Emacs. 00:04:37.759 --> 00:04:39.280 Perhaps EriK and I will talk about that 00:04:39.280 --> 00:04:40.800 a little bit more in another talk we 00:04:40.800 --> 00:04:41.360 have 00:04:41.360 --> 00:04:43.280 scheduled, but Jeff was a huge 00:04:43.280 --> 00:04:44.400 influenceo on us 00:04:44.400 --> 00:04:47.280 in a number of ways and a huge 00:04:47.280 --> 00:04:48.720 contributor to the Raku programming 00:04:48.720 --> 00:04:50.720 language 00:04:50.720 --> 00:04:54.840 which is very cool. 00:04:54.840 --> 00:04:58.880 So, understanding how 00:04:58.880 --> 00:05:01.039 to make a good decision about splitting 00:05:01.039 --> 00:05:03.120 up configuration in a way to share it 00:05:03.120 --> 00:05:03.680 across 00:05:03.680 --> 00:05:05.600 people with really different uses of 00:05:05.600 --> 00:05:07.600 Emacs... That's actually a 00:05:07.600 --> 00:05:09.360 complicated topic and I want to 00:05:09.360 --> 00:05:11.039 sort of back off and stare at it for a 00:05:11.039 --> 00:05:12.639 second. 00:05:12.639 --> 00:05:15.840 I think Emacs is about people, so that 00:05:15.840 --> 00:05:18.720 means it's about community. 00:05:18.720 --> 00:05:22.000 And community means we're going to 00:05:22.000 --> 00:05:24.960 invite disagreement. 00:05:24.960 --> 00:05:29.120 In fact, that disagreement 00:05:29.120 --> 00:05:32.160 isn't necessarily a road-block to our 00:05:32.160 --> 00:05:33.280 project. In fact, 00:05:33.280 --> 00:05:35.680 some of the work that a community 00:05:35.680 --> 00:05:37.759 project can invite us to do 00:05:37.759 --> 00:05:39.680 is to get closer to each other by 00:05:39.680 --> 00:05:40.960 inviting those disagreements, by 00:05:40.960 --> 00:05:42.080 learning from them--learning from 00:05:42.080 --> 00:05:43.280 different people's 00:05:43.280 --> 00:05:46.880 styles and from how they argue, 00:05:46.880 --> 00:05:49.120 and thinking about why they have that 00:05:49.120 --> 00:05:50.400 perspective and 00:05:50.400 --> 00:05:53.680 what technical benefits that 00:05:53.680 --> 00:05:55.360 perhaps radical point of view might 00:05:55.360 --> 00:05:56.720 carry away. Some people are really 00:05:56.720 --> 00:05:59.039 aggressive arguers, and others 00:05:59.039 --> 00:06:01.919 are very passive and really 00:06:01.919 --> 00:06:03.120 couch their ideas 00:06:03.120 --> 00:06:06.240 in distancing terms, to say, "well 00:06:06.240 --> 00:06:08.080 probably, this is a good idea" or 00:06:08.080 --> 00:06:12.479 "please double check me." 00:06:12.479 --> 00:06:15.520 Those don't always necessarily indicate 00:06:15.520 --> 00:06:17.120 how certain a person is, because we're 00:06:17.120 --> 00:06:18.479 different. We have different ways of 00:06:18.479 --> 00:06:19.520 communicating 00:06:19.520 --> 00:06:23.380 ideas like certainty or excitement. 00:06:23.380 --> 00:06:24.560 [Music] 00:06:24.560 --> 00:06:26.560 When we think about a bunch of really 00:06:26.560 --> 00:06:30.000 diverse programmers approaching Emacs, 00:06:30.000 --> 00:06:33.280 probably one of our our first really big 00:06:33.280 --> 00:06:36.479 challenges is just 00:06:36.479 --> 00:06:39.759 to pick what we're going to go 00:06:39.759 --> 00:06:41.120 after. There are a lot of 00:06:41.120 --> 00:06:44.000 existing kit 00:06:44.000 --> 00:06:49.599 installs and things like this. 00:06:49.599 --> 00:06:52.880 My argument is that you could actually 00:06:52.880 --> 00:06:54.400 get pretty far 00:06:54.400 --> 00:06:56.560 just trading files around. Maybe the 00:06:56.560 --> 00:07:02.240 more valuable 00:07:02.240 --> 00:07:04.720 conversation to have is making the 00:07:04.720 --> 00:07:06.080 hard decisions about, well, 00:07:06.080 --> 00:07:08.000 "should we have vertical completion," 00:07:08.000 --> 00:07:10.080 should that be the out of the box, 00:07:10.080 --> 00:07:11.759 and the people that want 00:07:11.759 --> 00:07:15.680 the traditional splayed out over a 00:07:15.680 --> 00:07:17.440 single line completion 00:07:17.440 --> 00:07:19.840 for example in the mode line, those 00:07:19.840 --> 00:07:20.800 people are going to 00:07:20.800 --> 00:07:24.160 add a line of config 00:07:24.160 --> 00:07:29.039 to their own setup? 00:07:29.039 --> 00:07:32.479 The way to get there? I mean, how do we 00:07:32.479 --> 00:07:34.080 find out what works? We don't want to 00:07:34.080 --> 00:07:35.520 slow down the people that 00:07:35.520 --> 00:07:38.800 are super productive with Emacs by 00:07:38.800 --> 00:07:40.479 asking them to completely break their 00:07:40.479 --> 00:07:42.080 workflows and make it easier for new 00:07:42.080 --> 00:07:42.560 folks. 00:07:42.560 --> 00:07:46.240 At the same time, we do 00:07:46.240 --> 00:07:48.960 want to make sure those new people are 00:07:48.960 --> 00:07:51.280 excited by Emacs and not turned off by 00:07:51.280 --> 00:07:52.720 having to learn 00:07:52.720 --> 00:07:56.319 the entire jungle of Emacs 00:07:56.319 --> 00:07:59.840 history in the form of its 00:07:59.840 --> 00:08:03.120 unique technical stylings for 00:08:03.120 --> 00:08:06.160 things like frames, 00:08:06.160 --> 00:08:09.840 buffers, and other unique 00:08:09.840 --> 00:08:12.960 Emacs viewpoints on important 00:08:12.960 --> 00:08:16.240 interface concepts, especially. 00:08:16.240 --> 00:08:19.520 The encouragement here is to keep 00:08:19.520 --> 00:08:21.680 the initialization for a project team 00:08:21.680 --> 00:08:23.280 together as a crucible. 00:08:23.280 --> 00:08:25.280 Rather than necessarily following our 00:08:25.280 --> 00:08:31.440 defaults of 00:08:31.440 --> 00:08:33.279 finding the simplest configuration 00:08:33.279 --> 00:08:35.120 that generally work and letting people 00:08:35.120 --> 00:08:37.440 customize it, 00:08:37.440 --> 00:08:40.479 what if we tried to look 00:08:40.479 --> 00:08:42.560 for fairly specific configurations that 00:08:42.560 --> 00:08:44.159 we'll expect essentially all of our 00:08:44.159 --> 00:08:46.320 developers to be using, 00:08:46.320 --> 00:08:52.839 at least when they submit bug reports. 00:08:52.839 --> 00:08:55.920 In particular, with this, 00:08:55.920 --> 00:08:58.800 I think that degree of 00:08:58.800 --> 00:08:59.839 experimentation 00:08:59.839 --> 00:09:01.680 can drive back into the Emacs 00:09:01.680 --> 00:09:03.360 development process. In the development 00:09:03.360 --> 00:09:04.800 mailing list... 00:09:04.800 --> 00:09:07.760 I'm hoping I'll get a timing cue 00:09:07.760 --> 00:09:15.120 here. 00:09:15.120 --> 00:09:17.760 In the context of Emacs development as a 00:09:17.760 --> 00:09:18.320 greater 00:09:18.320 --> 00:09:20.959 entity, we see some of these struggles. 00:09:20.959 --> 00:09:22.399 Should we change this default? 00:09:22.399 --> 00:09:24.000 Sometimes we can have the 00:09:24.000 --> 00:09:26.720 sense that defaults in Emacs will never 00:09:26.720 --> 00:09:29.279 change. The conversation is too difficult. 00:09:29.279 --> 00:09:30.959 I think one thing that can help us get 00:09:30.959 --> 00:09:32.560 there is evidence 00:09:32.560 --> 00:09:36.160 that says, "hey my 30- to 40-person project 00:09:36.160 --> 00:09:38.880 is using this set of bindings and 00:09:38.880 --> 00:09:40.399 here's what we learned about 00:09:40.399 --> 00:09:42.240 brand new Emacs users trying to come in 00:09:42.240 --> 00:09:46.800 and get work done with that." 00:09:46.800 --> 00:09:49.360 (Amin: Yeah you still have 00:09:49.360 --> 00:09:50.720 a couple more minutes) 00:09:50.720 --> 00:09:52.640 Oh, beautiful. Okay, great. I will try to 00:09:52.640 --> 00:09:54.160 get through my last few slides that i 00:09:54.160 --> 00:09:54.720 cut 00:09:54.720 --> 00:09:56.320 in my last walkthrough, but I think i'm 00:09:56.320 --> 00:09:58.320 going quicker today thank you. 00:09:58.320 --> 00:10:02.000 Thank you. 00:10:02.000 --> 00:10:05.120 So let's just recap real quick: 00:10:05.120 --> 00:10:06.800 in theory, Emacs works 00:10:06.800 --> 00:10:10.720 out of the box. That means we're 00:10:10.720 --> 00:10:14.079 free to experiment. We can 00:10:14.079 --> 00:10:17.120 throw it all away and start over. 00:10:17.120 --> 00:10:26.000 As an organizational principle... 00:10:26.000 --> 00:10:27.360 I don't know what I was thinking on that 00:10:27.360 --> 00:10:30.079 slide, excuse me. 00:10:30.079 --> 00:10:32.240 Bringing it back around 00:10:32.240 --> 00:10:33.440 to the free 00:10:33.440 --> 00:10:35.680 and open source software community, 00:10:35.680 --> 00:10:36.480 our goal 00:10:36.480 --> 00:10:39.519 is to enable users 00:10:39.519 --> 00:10:41.440 to unlock their computers, to do as much 00:10:41.440 --> 00:10:43.040 with them as possible. 00:10:43.040 --> 00:10:45.600 That's the context to take with project 00:10:45.600 --> 00:10:47.680 initialization, but sometimes 00:10:47.680 --> 00:10:49.560 it could make sense to put... 00:10:49.560 --> 00:10:50.800 [Music] 00:10:50.800 --> 00:10:53.040 to put some gloves on. I've thrown up on 00:10:53.040 --> 00:10:54.880 the screen here just a couple of other 00:10:54.880 --> 00:10:57.279 ideas, ways to maybe think outside of the 00:10:57.279 --> 00:10:57.920 box. 00:10:57.920 --> 00:11:00.399 As you're putting together project 00:11:00.399 --> 00:11:01.440 nets, 00:11:01.440 --> 00:11:04.959 my words of encouragement are to experiment 00:11:04.959 --> 00:11:05.519 with it, 00:11:05.519 --> 00:11:09.200 try different things, and think really 00:11:09.200 --> 00:11:10.560 specifically about how 00:11:10.560 --> 00:11:14.320 different the development users 00:11:14.320 --> 00:11:17.760 might be from each other as you 00:11:17.760 --> 00:11:21.680 define standards for configuring 00:11:21.680 --> 00:11:23.519 the user environment of Emacs 00:11:23.519 --> 00:11:25.360 specifically for developing 00:11:25.360 --> 00:11:29.120 on a project. That's pretty much my talk. 00:11:29.120 --> 00:11:30.480 If there's any time, I would take a 00:11:30.480 --> 00:11:32.959 couple questions. 00:11:32.959 --> 00:11:35.040 Thank you for your awesome talk, 00:11:35.040 --> 00:11:36.480 Corwin. 00:11:36.480 --> 00:11:38.160 I think we have one or two 00:11:38.160 --> 00:11:49.519 minutes for a few questions. 00:11:49.519 --> 00:11:52.000 Do you have the pad open or would you 00:11:52.000 --> 00:11:53.839 like me to read the questions for you? 00:11:53.839 --> 00:11:56.959 Oh, I managed to close the 00:11:56.959 --> 00:11:58.000 pad 00:11:58.000 --> 00:12:00.560 and I am trying to open it again. All 00:12:00.560 --> 00:12:03.519 right, there it opened. 00:12:03.519 --> 00:12:05.040 Bringing it onto a screen where I can 00:12:05.040 --> 00:12:06.880 see it. Will you read me the 00:12:06.880 --> 00:12:08.399 first question while I drag windows 00:12:08.399 --> 00:12:09.360 around, please? 00:12:09.360 --> 00:12:12.720 (Amin: Sure. It says, "do you use Emacs as a 00:12:12.720 --> 00:12:15.600 community building tool?") 00:12:15.600 --> 00:12:17.680 Do I use Emacs as a community building 00:12:17.680 --> 00:12:19.760 tool, or how do I? 00:12:19.760 --> 00:12:23.519 (Amin: It just says do you.) Yes, absolutely. 00:12:23.519 --> 00:12:26.720 I think Emacs is an ambassador to 00:12:26.720 --> 00:12:29.920 the GNU tool chain. 00:12:29.920 --> 00:12:33.279 I think that in the fullness of time, we 00:12:33.279 --> 00:12:34.560 will see an Emacs 00:12:34.560 --> 00:12:38.240 that makes 00:12:38.240 --> 00:12:42.000 and that makes iOS and Android and other 00:12:42.000 --> 00:12:42.800 closed-source 00:12:42.800 --> 00:12:45.680 tools dream. That's why they mock us 00:12:45.680 --> 00:12:46.320 and call 00:12:46.320 --> 00:12:49.200 Emacs an operating system. It's because 00:12:49.200 --> 00:12:51.440 it could be, if we cared for it to be. 00:12:51.440 --> 00:12:55.680 It's quite a threatening product 00:12:55.680 --> 00:12:57.440 from the perspective of how many problem 00:12:57.440 --> 00:12:59.440 spaces it can address, how many types of 00:12:59.440 --> 00:13:01.519 users it can satisfy, 00:13:01.519 --> 00:13:04.399 the things that we can do to make 00:13:04.399 --> 00:13:05.600 it robust in those 00:13:05.600 --> 00:13:07.839 environments. I mean, we're always 00:13:07.839 --> 00:13:09.760 thinking about the weak points, but 00:13:09.760 --> 00:13:11.839 is Emacs a community building tool? Heck 00:13:11.839 --> 00:13:14.639 yeah. 00:13:14.639 --> 00:13:17.920 (Amin: There's like one or two more 00:13:17.920 --> 00:13:18.480 questions. 00:13:18.480 --> 00:13:21.519 I think they're more long-form so it 00:13:21.519 --> 00:13:22.480 might be better 00:13:22.480 --> 00:13:24.000 if you took them off stream so you 00:13:24.000 --> 00:13:26.880 could keep the schedule on time.) 00:13:26.880 --> 00:13:28.959 i would love to take those questions 00:13:28.959 --> 00:13:31.040 offline. I will respond to you in 00:13:31.040 --> 00:13:32.399 writing if we don't get to it in a 00:13:32.399 --> 00:13:33.360 breakout room. 00:13:33.360 --> 00:13:35.519 Thanks so much for joining us. I 00:13:35.519 --> 00:13:36.639 can't wait to see the rest of the 00:13:36.639 --> 00:13:38.000 conference. See you there! 00:13:38.000 --> 00:13:42.800 (Amin: Awesome. Thank you again so much, Corwin.)