WEBVTT 00:00:00.399 --> 00:00:02.683 My name is Corwin Brust 00:00:02.683 --> 00:00:08.960 and I will be talking about getting started with Emacs today. 00:00:08.960 --> 00:00:11.448 I have been an Emacs user for a long time. 00:00:11.448 --> 00:00:15.360 First of all, thanks and a huge welcome to the conference 00:00:15.360 --> 00:00:22.400 from me and and on behalf 00:00:22.400 --> 00:00:24.368 and back to the other people 00:00:24.368 --> 00:00:26.080 that 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:36.399 with that and just, kind of, see backstage. 00:00:36.399 --> 00:00:42.281 So I've used a lot of different editors in my time. 00:00:42.281 --> 00:00:52.399 That's about 25 years as a professional software engineer. 00:00:52.399 --> 00:00:54.247 And most of that time I've been using Emacs. 00:00:54.247 --> 00:00:56.160 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:14.410 something that you notice right away 00:01:14.410 --> 00:01:18.560 is that you get good with it in a way that stays meaningful. 00:01:18.560 --> 00:01:24.199 You learn new things. Those things stick with you. 00:01:24.199 --> 00:01:33.759 You learn how to make it do new tricks and then keep doing those tricks. 00:01:33.759 --> 00:01:39.439 I want to mention that this conference--oops, 00:01:39.439 --> 00:01:44.829 this talk isn't about how to adjust 00:01:44.829 --> 00:01:46.802 your configuration specifically. 00:01:46.802 --> 00:01:50.000 I don't have a bunch of good code samples in here. 00:01:50.000 --> 00:01:52.451 There are other great talks at the conference, 00:01:52.451 --> 00:01:56.411 particularly Andrew's, that I looked at, 00:01:56.411 --> 00:01:59.920 that looked 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.017 it more comfortable for me starting?" 00:02:07.017 --> 00:02:09.759 This is about how to think about the problem space. 00:02:09.759 --> 00:02:13.337 Hopefully, a good warm up as we start thinking about 00:02:13.337 --> 00:02:17.200 some of the lightning talks a little later on. 00:02:17.200 --> 00:02:19.835 I'm just gonna quickly make sure 00:02:19.835 --> 00:02:21.789 I can see my IRC buffer in case 00:02:21.789 --> 00:02:25.680 I run into time. I didn't get my stopwatch started for this one. 00:02:25.680 --> 00:02:29.680 So all right, let's dive in. 00:02:29.680 --> 00:02:33.840 We assume that we want to install packages 00:02:33.840 --> 00:02:36.281 and maybe configure some features. 00:02:36.281 --> 00:02:38.319 This 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.541 with a bunch of people on a team 00:02:40.541 --> 00:02:42.160 and we 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:53.519 Others are installing it for the first time. 00:02:53.519 --> 00:02:57.889 So the first question is, you know, in that context: 00:02:57.889 --> 00:02:59.784 what's the value proposition? 00:02:59.784 --> 00:03:01.532 Why should I mess with my machine, 00:03:01.532 --> 00:03:04.219 my mature Emacs configuration, 00:03:04.219 --> 00:03:09.815 and impose my ideas over the way somebody else is learning Emacs? 00:03:09.815 --> 00:03:13.840 Well, it can be.. I'm off my slides here a little bit. 00:03:13.840 --> 00:03:16.959 It can be a little bit tricky 00:03:16.959 --> 00:03:21.440 to learn Emacs. One thing that 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:27.301 can tell us, kinda, keystroke for keystroke at times, 00:03:27.301 --> 00:03:30.480 what to do and explain what everything is doing. 00:03:30.480 --> 00:03:35.840 Using the same packages can really help us working together on a project. 00:03:35.840 --> 00:03:40.720 Speaking from my personal 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.226 where I was excited to program in Emacs Lisp. 00:03:45.226 --> 00:03:47.840 I've programmed in a lot of programming languages, 00:03:47.840 --> 00:03:50.252 but Lisp wasn't on my list. 00:03:50.252 --> 00:03:53.680 I looked at my config that I was copy-pasting around 00:03:53.680 --> 00:03:57.279 from generation after generation of .emacs file, 00:03:57.279 --> 00:04:00.799 or recrafting it from hand and from Internet 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:14.016 and be able to to quickly get through that workflow 00:04:14.016 --> 00:04:17.440 that caused me to install the program. 00:04:17.440 --> 00:04:24.049 You know, just little simple one-liners that got committed to memory 00:04:24.049 --> 00:04:27.675 over decades eventually just led me to a sort of "hey what's going on here." 00:04:27.675 --> 00:04:33.520 And I credit Jeff Goff, my good friend who died 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:42.000 a little bit more in another talk we have scheduled, 00:04:42.000 --> 00:04:44.400 but Jeff was a huge influence on us 00:04:44.400 --> 00:04:46.027 in a number of ways, 00:04:46.027 --> 00:04:47.732 and a huge contributor 00:04:47.732 --> 00:04:54.840 to the Raku programming language, which is very cool. 00:04:54.840 --> 00:05:00.153 So, understanding how to make a good decision 00:05:00.153 --> 00:05:03.680 about splitting up configuration in a way to share it across 00:05:03.680 --> 00:05:06.292 people with really different uses of Emacs... 00:05:06.292 --> 00:05:08.546 That's actually a complicated topic 00:05:08.546 --> 00:05:12.639 and I want to sort of back off and stare at it for a second. 00:05:12.639 --> 00:05:18.720 I think Emacs is about people, so that means it's about community. 00:05:18.720 --> 00:05:24.960 And community means we're going to invite disagreement. 00:05:24.960 --> 00:05:32.687 In fact, that disagreement isn't necessarily a road-block to our project. 00:05:32.687 --> 00:05:37.759 In fact, some of the work that a community project can invite us to do 00:05:37.759 --> 00:05:39.505 is to get closer to each other 00:05:39.505 --> 00:05:40.840 by inviting those disagreements, 00:05:40.840 --> 00:05:42.080 by learning from them--learning from 00:05:42.080 --> 00:05:46.880 different people's styles and from how they argue, 00:05:46.880 --> 00:05:50.058 and thinking about why they have that perspective 00:05:50.058 --> 00:05:53.227 and what technical benefits 00:05:53.227 --> 00:05:55.800 that perhaps radical point of view might carry away. 00:05:55.800 --> 00:05:58.266 Some people are really aggressive arguers, 00:05:58.266 --> 00:06:01.919 and others are very passive and really 00:06:01.919 --> 00:06:05.824 couch their ideas in distancing terms, to say, 00:06:05.824 --> 00:06:07.906 "well probably, this is a good idea" 00:06:07.906 --> 00:06:12.479 or "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.497 how certain a person is, because we're different. 00:06:17.497 --> 00:06:19.520 We have different ways of communicating 00:06:19.520 --> 00:06:23.380 ideas like certainty or excitement. 00:06:24.560 --> 00:06:26.235 When we think about a bunch of 00:06:26.235 --> 00:06:30.000 really diverse programmers approaching Emacs, 00:06:30.000 --> 00:06:36.479 probably one of our first really big challenges is just 00:06:36.479 --> 00:06:40.085 to pick what we're going to go after. 00:06:40.085 --> 00:06:49.599 There are a lot of existing kit installs and things like this. 00:06:49.599 --> 00:06:54.400 My argument is that you could actually get pretty far 00:06:54.400 --> 00:06:56.020 just trading files around. 00:06:56.020 --> 00:07:03.698 Maybe the more valuable conversation to have 00:07:03.698 --> 00:07:06.080 is making the 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:17.440 the traditional splayed out over a single line completion, 00:07:17.440 --> 00:07:19.428 for example in the mode line, 00:07:19.428 --> 00:07:29.039 those people are going to add a line of config to their own setup? 00:07:29.039 --> 00:07:30.979 The way to get there? 00:07:30.979 --> 00:07:33.344 I mean, how do we find out what works? 00:07:33.344 --> 00:07:38.587 We don't want to slow down the people that are super productive with Emacs 00:07:38.587 --> 00:07:40.879 by asking them to completely break their workflows 00:07:40.879 --> 00:07:42.560 and make it easier for new folks. 00:07:42.560 --> 00:07:48.673 At the same time, we do want to make sure those new people 00:07:48.673 --> 00:07:52.720 are excited by Emacs and not turned off by having to learn 00:07:52.720 --> 00:08:00.363 the entire jungle of Emacs history in the form of its unique 00:08:00.363 --> 00:08:07.610 technical stylings for things like frames, buffers, 00:08:07.610 --> 00:08:11.668 and other unique Emacs viewpoints 00:08:11.668 --> 00:08:16.240 on important 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.117 Rather than necessarily following 00:08:25.117 --> 00:08:33.279 our defaults of finding the simplest configurations 00:08:33.279 --> 00:08:37.440 that generally work and letting people customize it, 00:08:37.440 --> 00:08:40.479 what if we tried to look 00:08:40.479 --> 00:08:42.346 for fairly specific configurations 00:08:42.346 --> 00:08:44.159 that 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:59.839 I think that degree of experimentation 00:08:59.839 --> 00:09:02.584 can drive back into the Emacs development process. 00:09:02.584 --> 00:09:04.800 In the development mailing list... 00:09:04.800 --> 00:09:15.120 I'm hoping I'll get a timing cue here. 00:09:15.120 --> 00:09:18.835 In the context of Emacs development as a greater entity, 00:09:18.835 --> 00:09:20.959 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:27.146 Sometimes we can have the sense that defaults in Emacs will never change. 00:09:27.146 --> 00:09:29.279 The conversation is too difficult. 00:09:29.279 --> 00:09:32.560 I think one thing that can help us get 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.560 is using this set of bindings, 00:09:38.560 --> 00:09:40.111 and here's what we learned 00:09:40.111 --> 00:09:42.240 about 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:51.984 Oh, beautiful. Okay, great. 00:09:51.984 --> 00:09:54.720 I will try to get through my last few slides that I 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:08.760 in theory, Emacs works out of the box. 00:10:08.760 --> 00:10:12.853 That means we're free to experiment. 00:10:12.853 --> 00:10:17.120 We can 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:30.079 I don't know what I was thinking on that slide, excuse me. 00:10:30.079 --> 00:10:33.440 Bringing it back around to the free 00:10:33.440 --> 00:10:35.680 and open source software community, 00:10:35.680 --> 00:10:39.519 our goal 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:47.680 That's the context to take with project initialization, but sometimes 00:10:47.680 --> 00:10:49.560 it could make sense 00:10:50.800 --> 00:10:52.032 to put some gloves on. 00:10:52.032 --> 00:10:53.766 I've thrown up on the screen here 00:10:53.766 --> 00:10:55.276 just a couple of other ideas, 00:10:55.276 --> 00:10:57.920 ways to maybe think outside of the box. 00:10:57.920 --> 00:11:01.440 As you're putting together project nets, 00:11:01.440 --> 00:11:05.519 my words of encouragement are to experiment with it, 00:11:05.519 --> 00:11:09.941 try different things, and think really specifically 00:11:09.941 --> 00:11:17.010 about how different the development users might be from each other 00:11:17.010 --> 00:11:21.680 as you define standards for configuring 00:11:21.680 --> 00:11:23.519 the user environment of Emacs 00:11:23.519 --> 00:11:26.552 specifically for developing on a project. 00:11:26.552 --> 00:11:29.120 That's pretty much my talk. 00:11:29.120 --> 00:11:32.959 If there's any time, I would take a couple questions. 00:11:32.959 --> 00:11:36.480 (Amin: Thank you for your awesome talk, Corwin. 00:11:36.480 --> 00:11:49.519 I think we have one or two 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:58.000 Corwin: Oh, I managed to close the pad 00:11:58.000 --> 00:12:00.352 and I am trying to open it again. 00:12:00.352 --> 00:12:03.519 All right, there it opened. 00:12:03.519 --> 00:12:05.500 Bringing it onto a screen where I can see it. 00:12:05.500 --> 00:12:09.360 Will you read me the first question while I drag windows around, please? 00:12:09.360 --> 00:12:15.600 (Amin: Sure. It says, "do you use Emacs as a community building tool?") 00:12:15.600 --> 00:12:19.760 Do I use Emacs as a community building 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:29.920 I think Emacs is an ambassador to the GNU tool chain. 00:12:29.920 --> 00:12:33.027 I think that in the fullness of time, 00:12:33.027 --> 00:12:36.558 we will see an Emacs 00:12:36.558 --> 00:12:43.760 that makes iOS and Android and other closed-source tools dream. 00:12:43.760 --> 00:12:46.689 That's why they mock us and call Emacs 00:12:46.689 --> 00:12:49.200 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:58.540 spaces it can address, 00:12:58.540 --> 00:13:01.519 how many types of 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:06.456 it robust in those environments. 00:13:06.456 --> 00:13:09.524 I mean, we're always thinking about the weak points, 00:13:09.524 --> 00:13:14.639 but is Emacs a community building tool? Heck yeah. 00:13:14.639 --> 00:13:18.480 (Amin: There's like one or two more questions. 00:13:18.480 --> 00:13:22.480 I think they're more long-form so it might be better 00:13:22.480 --> 00:13:26.880 if you took them off stream so you could keep the schedule on time.) 00:13:26.880 --> 00:13:29.463 I would love to take those questions offline. 00:13:29.463 --> 00:13:30.908 I will respond to you 00:13:30.908 --> 00:13:32.237 in writing if we don't get to it 00:13:32.237 --> 00:13:33.360 in a breakout room. 00:13:33.360 --> 00:13:35.451 Thanks so much for joining us. 00:13:35.451 --> 00:13:36.639 I 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.)