WEBVTT 00:00.000 --> 00:02.770 Hi everyone! My name is Case Duckworth 00:02.770 --> 00:04.070 and I've been using Emacs 00:04.070 --> 00:05.536 for about a year and a half. 00:05.536 --> 00:06.736 If you do the math, 00:06.736 --> 00:08.403 you'll see that was pretty soon 00:08.403 --> 00:11.470 after the pandemic hit us in the U.S. 00:11.470 --> 00:13.970 While I was busy making bread 00:13.970 --> 00:14.970 and walking my dogs, 00:14.970 --> 00:17.936 trying not to drive myself crazy 00:17.936 --> 00:18.970 in the house, 00:18.970 --> 00:20.603 I tried Emacs again. 00:20.603 --> 00:23.270 I don't know if I was successful in that, 00:23.270 --> 00:26.936 going crazy... I mean, I still use Emacs. 00:26.936 --> 00:30.436 But I have been able to enjoy 00:30.436 --> 00:31.670 the infinitely-malleable, 00:31.670 --> 00:32.870 immensely enjoyable, 00:32.870 --> 00:34.936 and sublimely parenthetical world 00:34.936 --> 00:36.470 of Emacs the editor, 00:36.470 --> 00:37.570 the community, 00:37.570 --> 00:39.470 and of course, the Lisp language. 00:39.470 --> 00:42.270 So. And in this I'm going to 00:42.270 --> 00:46.103 explore just a little anecdote of that, 00:46.103 --> 00:48.536 a little nugget of what I think 00:48.536 --> 00:50.870 makes Emacs so great, 00:50.870 --> 00:53.703 using the lens of a package that I wrote 00:53.703 --> 00:57.370 about a month ago now 00:57.370 --> 00:59.536 called frowny.el. 00:59.536 --> 00:01:01.569 So yeah, let's go ahead and jump in. 01:01.570 --> 01:08.236 So, before the beginning, 01:08.236 --> 01:09.036 I want to talk about 01:09.036 --> 01:10.770 my very beginning with Linux. 01:10.770 --> 01:12.136 I first installed Linux 01:12.136 --> 01:13.170 for the first time 01:13.170 --> 01:15.703 as a freshman in college, way back in 2008. 01:15.703 --> 01:17.703 I don't know if you were around, 01:17.703 --> 01:19.503 but 2008 was not 01:19.503 --> 01:21.570 the year of the Linux desktop. 01:21.570 --> 01:26.803 WiFi was weird. Sound was weird. 01:26.803 --> 01:30.136 Everything was odd and strange and weird. 01:30.136 --> 01:31.670 I mean, it wasn't good. 01:31.670 --> 01:33.603 So, at that time, 01:33.603 --> 01:36.203 I knew absolutely nothing about anything. 01:36.203 --> 01:41.203 I installed this terrible 01:41.203 --> 01:43.470 distro called gOS. 01:43.470 --> 01:44.803 I always forget what it's called 01:44.803 --> 01:45.703 and then I looked it up. 01:45.703 --> 01:47.636 And this is what I looked at 01:47.636 --> 01:49.836 when I signed in. 01:49.836 --> 01:51.903 It wasn't good. 01:51.903 --> 01:53.203 I think it was trying to 01:53.203 --> 01:57.003 integrate better with Google tools? 01:57.003 --> 01:58.870 So I was, like, oh, yeah, you know, 01:58.870 --> 02:00.870 Gmail and Google Calendar, 02:00.870 --> 02:02.436 so this will have it all there. 02:02.436 --> 02:04.536 Anyway, the company's defunct now 02:04.536 --> 02:07.003 and it's pretty obvious why. 02:07.003 --> 00:02:07.635 It was really bad. 02:07.636 --> 02:08.903 So I thought to myself, 02:08.903 --> 02:11.670 I'll delete the partition. 02:11.670 --> 02:12.903 Easy peasy. So I did, 02:12.903 --> 02:13.770 and I rebooted, 02:13.770 --> 02:15.336 and the Master Boot Record was gone, 02:15.336 --> 02:16.370 so I couldn't boot Windows, 02:16.370 --> 02:17.936 and it was all, bleah, and I was like, 02:17.936 --> 02:22.103 oh, shit, I have to do my schoolwork. 02:24.536 --> 02:26.203 So I thought I was terribly hosed 02:26.203 --> 02:28.870 so I just installed Linux. 02:28.870 --> 02:31.970 I think I installed Crunchbang Linux first. 02:31.970 --> 02:33.270 It looked like this. 02:33.270 --> 02:35.203 It's not super exciting. 02:35.203 --> 02:41.303 It was an Openbox-based, Debian-based distro 02:41.303 --> 02:43.403 run by this one guy out in England. 02:43.403 --> 02:46.570 It was great. I really enjoyed it. 02:46.570 --> 02:47.970 The forums were amazing. 02:47.970 --> 02:50.603 It still kind of lives on 02:50.603 --> 02:53.003 through a project called BunsenLabs 02:53.003 --> 02:54.936 so go check them out if you want. 02:54.936 --> 00:02:56.169 It was a good time. Anyway. 02:56.170 --> 02:58.803 I was using that for a long time, 02:58.803 --> 03:00.436 and, you know, probably familiar 03:00.436 --> 03:01.670 to many of you, 03:01.670 --> 03:02.903 I hopped around 03:02.903 --> 03:03.836 from distro to distro, 03:03.836 --> 03:08.970 from WM to DE, just on and on and on, 03:08.970 --> 03:10.270 trying different things. 03:10.270 --> 03:12.003 I'm not a programmer. 03:12.003 --> 03:12.736 I actually went to school 03:12.736 --> 03:15.136 for English writing, 03:15.136 --> 03:17.536 and so I learned programming 03:17.536 --> 03:19.636 mostly from configuring 03:19.636 --> 03:20.836 different window managers. 03:20.836 --> 03:23.803 I learned Lua with AwesomeWM. 03:23.803 --> 03:25.836 I learned Haskell with Xmonad. 03:25.836 --> 03:28.070 Sort of Haskell. I mean, I liked Haskell. 03:28.070 --> 03:30.770 I like Haskell a lot, 03:30.770 --> 03:32.536 at least the syntax. 03:32.536 --> 03:36.070 It looks like words. 03:36.070 --> 03:40.103 You can define functions multiple times 03:40.103 --> 03:41.670 for different inputs. 03:41.670 --> 03:42.703 It has that really great pattern matching. 03:42.703 --> 03:45.270 The thing I really didn't get was monads. 03:45.270 --> 03:46.570 What is a monad? 03:46.570 --> 03:48.103 Is it a burrito? Is it a box? 03:48.103 --> 03:49.770 Is it a burrito inside of a box? 03:49.770 --> 03:51.370 Is it a box inside of a burrito? 03:51.370 --> 03:53.203 Is there a cat involved, 03:53.203 --> 03:55.336 or a superposition of such? 03:55.336 --> 03:58.936 I don't know. Anyway, it got confusing. 03:58.936 --> 04:01.436 That's really where I lost me. 04:01.436 --> 04:05.170 Again, you know, if you like Haskell, 04:05.170 --> 04:05.970 if you write Haskell, 04:05.970 --> 04:08.136 more power to you. 04:08.136 --> 04:11.370 It didn't fit my brain right. 04:11.370 --> 04:14.403 So that was that, 04:14.403 --> 04:15.436 but it kinda ruined me 04:15.436 --> 04:17.003 for a lot of other programming languages, 04:17.003 --> 04:19.970 because the functional style 04:19.970 --> 04:22.403 I really get. That part I did get. 04:22.403 --> 04:25.703 And stuff like Python, really, 04:25.703 --> 04:27.070 object orientation... 04:27.070 --> 04:32.570 I would always get way too into classes 04:32.570 --> 04:34.703 and figuring out this and that. 04:34.703 --> 04:35.870 It just didn't work for me. 04:35.870 --> 04:37.870 I was kind of floating. 04:37.870 --> 04:41.503 Learned Bash, which is, you know, Bash. 04:41.503 --> 04:43.603 It's fine, but it's Bash. 04:43.603 --> 04:46.703 It wasn't great either. 04:46.703 --> 04:51.470 Anyway. That was six years or so, 04:51.470 --> 00:04:52.935 just kind of did that, right. 04:52.936 --> 04:55.870 And yes, I was using Vim. 04:55.870 --> 04:58.370 I mean... Keeps you clean, right? 04:58.370 --> 04:59.636 I'm just kidding. 04:59.636 --> 05:02.536 I was using Vim, the editor. 05:02.536 --> 05:03.470 It was fine. 05:03.470 --> 05:05.936 It was great. I mean... 05:05.936 --> 05:08.203 Emacs and Vim, they go head to head 05:08.203 --> 05:10.536 because they're both 40 years old. 05:10.536 --> 05:13.270 They both are super powerful. 05:13.270 --> 05:15.336 They both have their own paradigms. 05:15.336 --> 05:16.836 If you get into it, then it's like 05:16.836 --> 05:19.236 powpowpow, you're doing all this stuff 05:19.236 --> 05:20.503 it's great. 05:20.503 --> 05:22.036 I wrote some plugins with Vim, 05:22.036 --> 05:25.536 a couple of themes, this and that, 05:25.536 --> 05:28.636 but you know, VimScript is not great. 05:28.636 --> 05:31.803 I think one of the common 05:31.803 --> 05:34.936 criticisms of Elisp 05:34.936 --> 05:37.170 it's like, oh, it's this weird kind of... 05:37.170 --> 05:38.536 It's written for (inaudible)... 05:38.536 --> 05:43.336 Tell you, it's way less than 05:43.336 --> 05:44.470 VimScript is. Oof. 05:44.470 --> 05:49.670 Anyway. That, also, really terminal-first, 05:49.670 --> 05:52.570 which I used for a long time and then 05:52.570 --> 05:54.436 I only think I started noticing 05:54.436 --> 05:56.236 now that I'm using Emacs more, 05:56.236 --> 05:57.803 like, that terminal-first workflow, 05:57.803 --> 06:01.136 again, for my brain, 06:01.136 --> 06:02.803 it doesn't super work for me. 06:02.803 --> 06:06.636 I always had this Platonic ideal 06:06.636 --> 06:08.470 of what a workflow should look like, 06:08.470 --> 06:10.836 and I was always working towards it. 06:10.836 --> 06:12.803 I would run into this problem 06:12.803 --> 06:14.003 and I wouldn't know how to solve it. 06:14.003 --> 06:15.736 so I kind of quit. Do something else. 06:15.736 --> 06:17.003 I think that's part of why 06:17.003 --> 06:17.836 I had so much churn 06:17.836 --> 06:18.670 for such a long time. 06:18.670 --> 06:20.336 Because at the end of the day, 06:20.336 --> 06:23.936 window managing, you're just 06:23.936 --> 06:26.567 moving around little boxes on your screen. 06:26.567 --> 06:30.536 So I was spinning wheels 06:30.536 --> 06:31.203 for a long time. 06:31.203 --> 06:36.203 But yes. And it wasn't like 06:36.203 --> 06:36.803 it was all bad. 06:36.803 --> 06:38.036 Most of this stuff 06:38.036 --> 06:39.603 just came out now that 06:39.603 --> 06:40.236 I'm thinking about it, 06:40.236 --> 06:42.970 now that I'm kind of going through this 06:42.970 --> 06:45.736 in my head, like, that part of it wasn't great. 06:45.736 --> 06:46.703 I was having a good time. 06:46.703 --> 06:48.670 I was still... Open source, 06:48.670 --> 06:49.936 I was getting in the community. 06:49.936 --> 06:50.603 I was doing all this stuff. 06:50.603 --> 00:06:51.802 It was all great. 06:51.803 --> 06:56.336 But anyway, the pandemic hit, obviously, 06:56.336 --> 06:58.736 really hard, last spring, in the US. 06:58.736 --> 07:00.870 And here we are, 07:00.870 --> 07:03.070 talking about the pandemic in 2021. 07:03.070 --> 07:04.370 Can you imagine? 07:04.370 --> 07:05.836 So, I didn't lose my job. 07:05.836 --> 07:06.903 Thank goodness. 07:06.903 --> 07:09.236 But I did... I work for the government, 07:09.236 --> 07:10.236 I was sent home for two months. 07:10.236 --> 07:11.803 I had all this free time on my hands. 07:11.803 --> 07:13.903 I got into baking, 07:13.903 --> 07:16.236 I bought a 50-pound bag of flour. 07:16.236 --> 07:18.470 I started a bread-themed tilde server, 07:18.470 --> 07:20.436 you know, those shared Unix servers 07:20.436 --> 07:21.803 all the cool kids talk about? 07:21.803 --> 07:26.970 Yeah, it's breadpunk.club, go check it out! 07:26.970 --> 00:07:29.769 Join if you want. Anyway. Yeah. 07:29.770 --> 07:32.703 So I decided to try Emacs again. 07:32.703 --> 07:33.803 Kind of on a whim, I think. 07:33.803 --> 07:36.170 I don't super remember, but I think I did. 07:36.170 --> 07:42.103 I tried Spacemacs. It didn't stick. 07:42.103 --> 07:44.036 Spacemacs was trying to be Vim, 07:44.036 --> 07:46.403 but enough things didn't fit in 07:46.403 --> 07:48.636 with what I was expecting 07:48.636 --> 07:50.603 with my Vim workflow. 07:50.603 --> 07:53.836 All sorts of plugins that did certain things 07:53.836 --> 07:57.270 and I didn't know to just get into Spacemacs. 07:57.270 --> 08:01.070 It just didn't work for me. 08:01.070 --> 08:05.436 I tried Emacs. This time, it stuck. 08:05.436 --> 08:07.370 I started out just vanilla, 08:07.370 --> 08:09.470 basic no init.el, 08:09.470 --> 08:11.103 then I wrote an init.el, 08:11.103 --> 08:12.636 and then I rewrote my init.el, 08:12.636 --> 08:16.570 and then I took my init.el, crumpled it up, 08:16.570 --> 08:17.736 threw it in the trash can, 08:17.736 --> 08:19.603 wrote it again from scratch. 08:19.603 --> 08:21.203 I'm actually currently 08:21.203 --> 08:23.036 in the middle of Bankruptcy #8, 08:23.036 --> 08:25.136 which I think I really got this time. 08:25.136 --> 08:29.036 It's either that or Number 9. 08:29.036 --> 08:32.936 So I have 1700-ish commits. 08:32.936 --> 08:37.536 I also have like, 3 or 4 .emacs repositories 08:37.536 --> 08:41.500 around my various Git hosting platforms 08:41.500 --> 08:42.270 that I use. 08:42.270 --> 08:44.103 I was on GitHub, GitLab, ~/git... 08:44.103 --> 08:47.403 I don't use Git very well. 08:47.403 --> 00:08:50.002 I'm very much amateur in that entire thing. 08:50.003 --> 08:52.970 Anyway, that is all to say 08:52.970 --> 08:55.170 I got into it, right. 08:55.170 --> 08:57.470 Like, really into it. 08:57.470 --> 08:59.000 I was watching 08:59.000 --> 09:02.136 Emacs Conference videos. Live. 09:02.136 --> 09:06.003 I was reading /r/emacs. 09:06.003 --> 09:07.036 I was reading Planet Emacs. 09:07.036 --> 09:09.036 I subscribed to both. 09:09.036 --> 09:11.603 I have other blogs that I read. 09:11.603 --> 09:13.570 All the greats. 09:13.570 --> 09:16.203 Everyone who's presenting here, probably. 09:16.203 --> 09:18.836 I started watching people on YouTube 09:18.836 --> 09:20.803 like Prot, like David Wilson 09:20.803 --> 09:23.003 who does System Crafters. 09:23.003 --> 09:25.336 I was already on IRC 09:25.336 --> 09:26.836 with the tildeverse, 09:26.836 --> 09:29.670 and so I hopped over to #emacs on Freenode 09:29.670 --> 09:30.936 (remember Freenode?). 09:30.936 --> 09:34.403 Anyway, it was a good time. 09:34.403 --> 09:36.003 So I was doing all this stuff. 09:36.003 --> 00:09:38.235 And... oh yeah. Right. 09:38.236 --> 09:40.636 Anyway, so that's all to say... 09:40.636 --> 09:46.736 Frowns. I was on #systemcrafters channel 09:46.736 --> 09:47.970 on libera.chat, 09:47.970 --> 09:51.203 the channel for the YouTube channel 09:51.203 --> 09:53.403 System Crafters by David Wilson. 09:53.403 --> 09:55.436 I think he's on later. 09:55.436 --> 09:57.070 I'm sure he'll talk about it. 09:57.070 --> 09:58.370 I don't know what he's talking about. 09:58.370 --> 10:01.270 Anyway, one day we were chatting 10:01.270 --> 10:02.770 and this guy alphapapa, who also 10:02.770 --> 10:08.236 has written a lot of these packages, said 10:08.236 --> 10:09.370 "electric-pair-mode messes up 10:09.370 --> 10:10.733 my frowny faces sometimes." 10:10.733 --> 10:14.036 You can see here 10:14.036 --> 10:15.170 this frowny, what is this... 10:15.170 --> 10:23.136 You can see it there on the screen. 10:23.136 --> 10:24.303 What is that, right? 10:24.303 --> 10:27.070 It's terrifying. 10:27.070 --> 10:28.203 What is this? 10:28.203 --> 10:30.970 What is that? 10:30.970 --> 10:31.803 I don't know. 10:31.803 --> 00:10:32.735 I don't know what that is. 10:32.736 --> 10:34.736 And then I said, you know, 10:34.736 --> 10:35.567 "I have a hook 10:35.567 --> 10:36.536 that disables electric-pair-mode 10:36.536 --> 10:37.970 for chat buffers." 10:37.970 --> 10:39.136 Which, actually, fun fact, 10:39.136 --> 10:40.167 I was lying. 10:40.167 --> 10:41.836 Not that that matters. 10:41.836 --> 10:43.370 I have a hook. 10:43.370 --> 10:44.436 You could have a hook 10:44.436 --> 10:46.203 that just disables electric-pair-mode 10:46.203 --> 10:46.800 in chat buffers. 10:46.800 --> 10:47.803 To which he replied, 10:47.803 --> 10:50.667 "Yeah, but I want electric-pair-mode 10:50.667 --> 10:51.900 everywhere, except for 10:51.900 --> 10:53.670 when I type a frowny face." 10:53.670 --> 10:56.503 And this sandwich face. What is that? 10:56.503 --> 10:59.870 He said, "I could stop typing frowny faces." 10:59.870 --> 11:01.270 And then I said, "Hmm..." 11:01.270 --> 11:02.533 And then I said, "I feel like 11:02.533 --> 11:03.200 you're in the best position 11:03.200 --> 11:05.336 to write a package, like frowny.el," 11:05.336 --> 11:07.270 I said as a joke. 11:07.270 --> 11:10.636 And then conversation went on, 11:10.636 --> 11:12.636 we talked about... made some jokes 11:12.636 --> 00:11:14.669 about Lisp and all that stuff. 11:14.670 --> 11:18.370 So anyway, went on, went on, 11:18.370 --> 11:20.503 and then apparently, 11:20.503 --> 11:21.703 23 minutes later, 11:21.703 --> 11:24.603 I had a frowny.el package 11:24.603 --> 11:26.770 just wrote up real quick. 11:26.770 --> 11:30.903 And yeah. That was it. 11:30.903 --> 11:31.803 I said, you know, buddy, 11:31.803 --> 00:11:33.069 anyway... 11:33.070 --> 11:34.270 So now we're going to look at 11:34.270 --> 11:35.803 the package that I wrote. 11:35.803 --> 11:36.970 frowny.el. 11:36.970 --> 11:40.070 It was actually pretty easy. 11:40.070 --> 11:41.936 Let's see here. 11:41.936 --> 11:44.170 This is it now. 11:44.170 --> 11:50.203 I kind of want to go back into... 11:50.203 --> 11:53.236 Let's go back to the very beginning. 11:53.236 --> 11:56.536 We'll see what we have here. 11:56.536 --> 11:57.303 Here's our very first, 11:57.303 --> 11:59.370 my very first commit. 11:59.370 --> 12:03.370 I already had all of this crap. 12:03.370 --> 12:05.736 Oh, I already did have a... 12:05.736 --> 12:08.336 I had a defgroup, I had frowny-eyes... 12:08.336 --> 12:11.236 This is basically the way I thought it was. 12:11.236 --> 12:14.736 You want to insert a frowny face. 12:14.736 --> 12:16.670 You type in the colon, 12:16.670 --> 12:18.670 or the equal sign, or whatever. 12:18.670 --> 12:19.836 for the eyes, 12:19.836 --> 12:21.436 and then you type the open parenthesis 12:21.436 --> 12:22.836 for the frown. 12:22.836 --> 12:25.703 And the problem is that 12:25.703 --> 12:27.870 the parenthesis then triggers 12:27.870 --> 12:29.170 electric-pair-mode. 12:29.170 --> 12:30.303 It's like, oh, no, I got 12:30.303 --> 12:32.503 a close parenthesis. 12:32.503 --> 12:33.836 So we just short-circuit that 12:33.836 --> 12:36.270 whenever there's a thing, 12:36.270 --> 12:38.636 a colon or equals sign before, 12:38.636 --> 12:40.136 and just insert the thing. 12:40.136 --> 12:41.736 Where did it go? 12:41.736 --> 12:43.303 That's kind of what I did. 12:43.303 --> 12:45.370 So I wrote out... This is it. 12:45.370 --> 12:46.603 This is the whole package. 12:46.603 --> 12:49.803 It's one function, one minor mode, 12:49.803 --> 12:52.536 one defcustom, and one group. That's it. 12:52.536 --> 12:54.303 Super simple. 12:54.303 --> 12:56.970 Basically, all it does is 12:56.970 --> 12:59.803 it inserts a frowny 12:59.803 --> 13:04.603 if it looks back and sees frowny eyes 13:04.603 --> 13:07.536 which are up here. 13:07.536 --> 13:08.136 The eyes are up here. 13:08.136 --> 13:11.536 Colon, equals sign... 13:11.536 --> 13:13.336 and then it inserts it 13:13.336 --> 13:15.970 or it does a self insert command. 13:15.970 --> 13:17.636 That simple. 13:17.636 --> 13:18.803 self-insert-command is what 13:18.803 --> 13:22.770 electric-pair-mode hooks into. 13:22.770 --> 13:24.370 So that's it. 13:24.370 --> 13:25.503 And then the minor mode 13:25.503 --> 13:27.070 just makes it a minor mode. 13:27.070 --> 13:28.503 So that was that. 13:28.503 --> 13:32.436 And you know, that worked just fine. 13:32.436 --> 13:35.670 That's the thing. It works just fine. 13:35.670 --> 13:37.270 Of course, after that, 13:37.270 --> 13:39.103 I had it do a couple of different things. 13:39.103 --> 13:40.236 I added a mascot. 13:40.236 --> 13:42.370 I had to add a README. 13:42.370 --> 13:45.070 I added a global-frowny-mode 13:45.070 --> 13:49.036 which was kind of interesting 13:49.036 --> 13:49.870 because I had to figure out 13:49.870 --> 13:51.603 turn on the frowny mode, 13:51.603 --> 13:56.336 I wrote this define-globalized-minor-mode 13:56.336 --> 13:58.603 which... is that the one 13:58.603 --> 14:00.870 No, that one's not super new. 14:00.870 --> 14:04.203 There was another one. Something else 14:04.203 --> 14:07.170 that was actually for 28 or 27, 14:07.170 --> 14:09.036 and I tried using it at work, 14:09.036 --> 14:10.970 where I have Windows 14:10.970 --> 14:13.436 and it was 27, 14:13.436 --> 14:14.670 so it must have been for 28. 14:14.670 --> 14:16.103 Anyway, something didn't work 14:16.103 --> 14:17.170 and I had to do all this stuff. 14:17.170 --> 14:20.870 Oops, sorry. 14:20.870 --> 14:23.070 I added some customization options, 14:23.070 --> 14:25.370 made package-lint happy... 14:25.370 --> 14:27.336 So yeah, let's see. 14:27.336 --> 14:30.170 That's 0.1. 14:30.170 --> 14:33.370 This version 0.1 was basically 14:33.370 --> 14:36.770 basic information. 14:36.770 --> 14:39.670 So then somebody... I put it on GitHub, 14:39.670 --> 14:40.270 good to go. 14:40.270 --> 14:43.103 It actually got some traction on Reddit. 14:43.103 --> 14:45.903 alphapapa, shout out to you 14:45.903 --> 14:47.303 who posted it there. 14:47.303 --> 14:50.636 But then I got an issue. 14:50.636 --> 14:51.770 Somebody said, hey, could you add 14:51.770 --> 14:52.936 smiley support? 14:52.936 --> 14:54.403 I was, like, well, 14:54.403 --> 14:55.070 I don't really understand 14:55.070 --> 14:56.003 why that's important. 14:56.003 --> 14:58.236 Well, you know, why not? 14:58.236 --> 15:01.270 They had a use case for it, I forget, 15:01.270 --> 15:02.270 but they had a use case for it. 15:02.270 --> 15:03.770 So, okay, fine. 15:03.770 --> 15:05.270 So I added smiley support right here. 15:05.270 --> 15:12.570 Oh, and I added some more eyes 15:12.570 --> 15:13.670 at some point. 15:13.670 --> 15:16.736 Now you have... you can do a tear. 15:16.736 --> 15:18.103 You can do a nose. 15:18.103 --> 15:23.603 Let's see... 15:23.603 --> 15:27.270 I had to change frowny-self-insert 15:27.270 --> 15:28.803 to frowny-insert-character, 15:28.803 --> 15:33.400 I added frowny-self-insert-frowny 15:33.400 --> 15:34.170 right here. 15:34.170 --> 15:38.536 I added... I had an obsolete function alias. 15:38.536 --> 15:39.503 That was super fun. 15:39.503 --> 15:40.870 That was a cool thing to do. 15:40.870 --> 15:43.970 I have insert-smiley as well. 15:43.970 --> 15:45.536 They're both very similar. 15:45.536 --> 15:47.336 They're all still there. 15:47.336 --> 15:49.403 I added a keymap. 15:49.403 --> 15:50.833 That was pretty much it. 15:50.833 --> 15:51.303 And you know, again, 15:51.303 --> 15:54.203 super simple, very small. 15:54.203 --> 15:56.270 Let me try this again. 15:56.270 --> 15:58.336 I added comments and docstrings. 15:58.336 --> 15:59.170 At some point, I decided 15:59.170 --> 16:03.870 let me try to make a frowny prog mode 16:03.870 --> 16:06.236 that only works in programming modes, 16:06.236 --> 16:07.536 that only works in strings 16:07.536 --> 16:09.303 and in comments, but... 16:09.303 --> 16:11.803 There's still a branch for it, 16:11.803 --> 16:14.003 if you want to go check it out. 16:14.003 --> 16:15.303 It wasn't super useful, 16:15.303 --> 16:16.336 and I think, actually, 16:16.336 --> 16:18.136 electric-pair-mode already does that. 16:18.136 --> 16:19.070 I'm not a hundred percent sure. 16:19.070 --> 16:21.503 I got a pull request 16:21.503 --> 16:23.903 from alphapapa, adding HISTORY.org. 16:23.903 --> 16:26.170 So you can go read the IRC logs about it. 16:26.170 --> 16:29.703 There's... Let's see... 16:29.703 --> 16:31.236 And then just recently, 16:31.236 --> 16:33.636 I actually had to add frowny-inhibit-modes 16:33.636 --> 16:39.603 because with dired, I kept getting this... 16:39.603 --> 16:43.236 I would try to hit open parenthesis 16:43.236 --> 16:47.536 which is my dired-hide-details-mode, 16:47.536 --> 16:50.536 but it kept saying, hey, 16:50.536 --> 16:51.903 it's a read-only buffer. I'm, like, what? 16:51.903 --> 16:55.303 Oh yeah! Right! It's Emacs. I can C-h k 16:55.303 --> 16:59.703 and then (, and oh, frowny-self-insert. 16:59.703 --> 17:01.636 Oh, duh. So I had to add 17:01.636 --> 17:05.036 this little frowny-inhibit-modes bit. 17:05.036 --> 17:06.836 So now there's a little custom in here. 17:06.836 --> 17:09.136 Right now, it just defaults to special-mode. 17:09.136 --> 17:12.170 I added dired myself on my config. 17:12.170 --> 17:14.236 I might add that as a default as well. 17:14.236 --> 17:15.270 I'm going to think about it. 17:15.270 --> 17:21.536 And then, yeah. So now we're at version 0.3, 17:21.536 --> 17:23.470 that's where we're at now. 17:23.470 --> 17:26.070 I just updated the README with the last one. 17:26.070 --> 17:28.603 Basically, lots of functionality, 17:28.603 --> 17:30.303 plus this frowny-inhibit-mode, 17:30.303 --> 17:32.836 and yeah, now it is just... 17:32.836 --> 17:34.503 This is it. This is the whole thing 17:34.503 --> 17:36.736 right here. It's pretty short. 17:36.736 --> 17:39.103 I think it's a total of 113 lines. 17:39.103 --> 17:42.203 But you know what, it's got... 17:42.203 --> 17:43.803 It's useful for people, 17:43.803 --> 17:45.136 and it's something where 17:45.136 --> 17:47.770 I never thought I would write 17:47.770 --> 17:49.470 software that people would use. 17:49.470 --> 17:51.136 As I said, I'm not a programmer. 17:51.136 --> 17:54.003 I'm just this guy. 17:54.003 --> 17:55.070 I like using Emacs 17:55.070 --> 17:56.103 because I'm kind of a nerd. 17:56.103 --> 17:57.436 I like tinkering around 17:57.436 --> 17:58.436 and doing things the hard way. 17:58.436 --> 18:02.570 I don't... I could use Microsoft Word. 18:02.570 --> 18:04.136 I should. I was trying to 18:04.136 --> 18:06.136 write this presentation up 18:06.136 --> 18:07.500 and my wife said, "Why don't you just 18:07.500 --> 18:08.903 write it in Google Docs?" 18:08.903 --> 18:11.503 And I said, "I don't want to." 18:11.503 --> 18:13.036 I mean, that's really it. 18:13.036 --> 18:15.036 Isn't that why we're all here? 18:15.036 --> 18:18.936 So yeah, you know, 18:18.936 --> 18:21.003 so anyway, that's the story about frowny 18:21.003 --> 18:22.270 That's the story about me, 18:22.270 --> 18:25.436 my journey to Emacs, 18:25.436 --> 18:27.136 my journey to this conference, 18:27.136 --> 18:30.636 and the journey of this package. 18:30.636 --> 18:32.536 I think it's about done. 18:32.536 --> 18:36.136 I'm not sure what else needs to go in there. 18:36.136 --> 18:38.103 If you have any suggestions, 18:38.103 --> 18:39.803 pull requests, comments, 18:39.803 --> 18:43.370 there's a GitHub right here, 18:43.370 --> 18:45.436 frowny.el. 18:45.436 --> 18:49.236 Let's see if I can pull it up. 18:49.236 --> 18:52.370 frowny.el. 18:52.370 --> 18:55.236 I'll put it on (inaudible). 18:55.236 --> 18:57.336 That's something I still don't understand. 18:57.336 --> 18:59.203 Packages, the whole keywords thing... 18:59.203 --> 19:00.236 I'm still confused on that. 19:00.236 --> 19:04.636 But yeah. Just requires Emacs 24. 19:04.636 --> 19:09.970 That's it. So anyway, 19:09.970 --> 19:12.470 I'm not sure if I'm going to be 19:12.470 --> 19:13.803 live for questions. 19:13.803 --> 19:14.736 I'm recording this, obviously, 19:14.736 --> 19:15.903 a bit before, 19:15.903 --> 19:18.636 and I will be travelling that weekend, 19:18.636 --> 19:20.303 this weekend, when you're watching this, 19:20.303 --> 19:25.236 so I'm going to... But right now, 19:25.236 --> 19:26.836 I'm recording it, I'm not 100% sure. 19:26.836 --> 19:28.636 I will know obviously by then. 19:28.636 --> 19:30.003 So maybe I'll talk to you 19:30.003 --> 19:31.070 in a moment, maybe not. 19:31.070 --> 19:33.300 Otherwise, have a 19:33.300 --> 19:34.336 great conference, everybody. 19:34.336 --> 19:38.303 I'm really excited to see everyone's talks.