 Welcome to video number three in a series of videos that I have entitled configuring emacs. And for those of you that have been following along thus far, I have created a repository over on my GitLab at gitlab.com slash dwt1 look for a repo called configuring emacs. And in this repository, I'm going to have a directory for each video in the series. There's video number one, there's video number two. And if you click on them, you will find the configuration files as they existed when I recorded that video. So be sure to check that out if you need the configs. Now up front, I do want to warn you today's video, we are going to add a ton of stuff to this configuration file, and I'm going to move along rather quickly. I'm not going to go into great detail on a lot of what I do today. You'll get a general overview on every little bit of functionality I add to the configuration, but I can't spend a lot of time detailing every little minutia, because it's one of these things this video is going to be very long as it is. And if I really spent time detailing every little thing that I add to the config, this video that I'm making right now seriously would be a multi hour video, because that's how much stuff we're really about to add to this config, because we need to speed things along right now. As our Emacs configuration exists, it's working, but it still leaves a lot to be desired. So today I'm going to add a lot of really important functionality that I think most of you guys are going to want to. So let me switch over to my desktop and let me go ahead and launch Emacs. I'll launch the Emacs client. I'm going to do spacefc. Now that is a key binding I added in the last video, spacefc for find my config.org, right? Spacefc. You could set that to anything, but I just found that it would be convenient to have a key binding to quickly get us to the config.org, since we're going to be doing so much with it until we finally get this configuration somewhat complete. Now the first thing I want to do is I want to add ivy and council. Now council is a part of ivy. ivy is a completion framework for Emacs, and that's one of the things I really miss not using Doom Emacs anymore, right? Doom Emacs had ivy and council built into it, and it had a really neat find recent file command. You would do spacefr and doomemacs for find your recent files and give you a list of all the files you've worked in recently, basically your history. So I really want to get ivy installed and I'll try to keep these top level headings alphabetical ivy starts with the i, so it will go right in front of org mode, right? So let's go ahead and I'm just going to paste a rather large block of text here, but I'm going to talk you through exactly what some of this stuff is. So I'm going to install ivy, which installs actually a ton of programs that are part of the ivy completion mechanism for Emacs. You can see ivy is a generic completion mechanism for Emacs, and it has several built-in programs along with it, including council, which is a collection of various programs. It's a collection of ivy enhanced versions of common Emacs commands, common Emacs functions, and then I'm also going to install a third-party package that's not part of ivy, but it extends ivy in some ways. It's ivy rich, which allows us to add descriptions alongside our commands when we do the meta x command, which right now meta x doesn't give us a list of programs. It doesn't give us the names. It doesn't give us the descriptions. It's just empty prompt meta x. What are you looking for? Right? And you can start typing. It would have tab complete. So if I did find and then tab, you know, I will get some suggestions, but it would be nice if I would get those kinds of suggestions, you know, out of the box. And if you want to read more about ivy and all the things that are built into ivy, including council, you can go to their GitHub. So it is this GitHub page here, which I will link. The repo is actually called Swiper. Although Swiper is the program is called ivy, Swiper is part of ivy. That's a ivy enhanced alternative to iSearch. We won't be playing with Swiper today, but really I wanted ivy and council and then ivy rich. I will also link to their GitHub. There's not much to ivy rich. Basically, you install it and you turn it on. So what we're going to do here is I forget this source code block, right? It's a elisp source code block. And to install council, we're just going to do a use package council. And then we're going to do colon after. So after means load this program after this other program has already loaded. So it needs to start after ivy is loaded. And then under the configuration options, we're just going to run council dash mode. So that's just a very basic configuration block. I use package block for council. Next up, something similar for ivy. And this is ripped straight from their GitHub, practically, right? This is just some suggested configuration options that they suggest. For example, we have bindings. They suggest a couple of key bindings for important ivy programs. Now I'm going to go ahead and set these bindings. I'm never going to use them. But for those of you that like GNU Emacs styled key bindings, such as control C, control R, control X, capital B, you know, I'm going to leave these here as example code. But if I was actually going to use these particular ivy related programs, I would probably add some key bindings up in the general key binding section of my config and actually do something with a proper leader key like space, you know, I do space IR for whatever it happens to be for ivy resume for this particular function, which I made a note here ivy resume, it resumes the last ivy based completion. Then I assign some values to these variables here under the custom section. And these were suggested defaults from the ivy GitHub. And these variables, ivy use virtual buffers. So what this is set to true use virtual buffers. So when you're searching through buffers using ivy, the ivy completion framework, it can actually search buffers that you've actually closed essentially, because it keeps the history of things. I'm pretty sure that's what the use virtual buffers variable is doing ivy count format. When you're looking at things through ivy and some of the council related programs, it's going to show you a count of you know, the matches when you're doing a search and then enable recursive mini buffers that set to true. So if you already have something going on in a mini buffer and then you run a program that also needs a mini buffer, I believe that will it enables you to have more than one mini buffer. I'm assuming is what that is. Actually, I'm not sure we could actually look that up. Remember all the help functions that we set key bindings for. So if I actually did a space hv for variable, because these are all variables, you know, they're variables, because we're using set q set q assigns a value to a variable. And let's actually read what the enable recursive mini buffers function does. And it says they a non nil value, a true value means we're allowing mini buffer commands while in the mini buffer. So if the mini buffer is already active, we can still use the mini buffer for other things. So yeah, that's what I was assuming that was about. And then finally, under the use package block for ivy, we have the config section where we just turn on ivy mode, similar to what we did in council under the config, turn on council mode. And then finally, I wanted to use ivy rich ivy rich is going to give us some nice bling to our ivy and council programs. Really what I wanted is I wanted icons in my council commands, my council recent f command for fine recent files. This block here use package ivy rich again, check out their GitHub. Most of this stuff I just ripped straight from the GitHub, you know, these were suggested settings, it's going to load ivy rich after ivy. And then on the init ivy rich mode one, it basically turns on ivy rich mode. If this was set to negative one, it would turn it off. And this use package block that I had right before it use package all the icons ivy rich will give us icons on the buffers that use ivy rich. Of course, we need to install a package to go along with this because right now we don't have any icon packs installed inside emacs. The most common one is actually a package called all the icons. So actually, let me zoom out. We pretty much did everything with ivy and council. So that is that block. But I should go ahead and add the all the icons package as well. So I'm actually going to scroll back up. I'll just add it right here in front of fonts. Let's create a new hitting all the icons. I'll zoom back in here. And I'll just go ahead and paste this here. So all the icons is pretty straightforward. I'm going to do a use package block to install one unusual part about this use package block is we have colon if and then we have display dash graphic dash P. I believe this is referring to are we using the graphical version of the max the GUI version of the max which of course we're going to be using most of the time. Typically, the only time you would use the terminal version of the max is if you were forced to use emacs and a TTY where you didn't have a proper display server, you know, then you wouldn't probably have access to cool graphics, for example, like all the icons. And there's actually a separate package from all the icons called all the icons dash dear ed, which gives you icons in the dear ed file manager. So I went ahead and added this use package block to install that. So that's a lot of stuff we are going to install right away to give us counsel and IV and our find recent files command and then adding some bling with descriptions and icons because we installed the all the icons icon pack. So let's see if any of this actually works. I'm actually going to do an escape. Let's do a colon W to write that. And remember the key binding that we added in the previous video to do a hot restart a hot reload. So space h r r and the alpaca package manager is installing a lot of programs. And let's see if that actually works. I'm going to do a control w v for vertical split. Remember, I also did this with space w v would also do the same thing depending on what which key bindings you want to use. Now I'm going to do a meta x and I'm just going to type dear ed. And we already know that Ivy and counsel and Ivy Ridge and all of that did get installed properly along with the all the icons because we got icons. We get our descriptions as part of the suggestions here for meta x as well. I do get this annoying carrot symbol in front of dear ed. The carrot symbol specifies it's the beginning of a string. So it's finding everything that actually begins with the search string dear ed. So I don't like that. I would like it to actually find every file that contains the string dear ed, whether it's the beginning of the function name or not. But I'll change that in a minute right now. I'm just going to launch dear ed, give it a directory. I'll give it my home directory. And there is all the icons in dear ed. So makes that file manager just look that much nicer. Let me do space BK for buffer kill. I'll do space WC for window close. That did not work. I wonder why that did not work. Let's do control WC for window close. I don't think I ever added the space related key bindings for the windows space WV for vertical split space WC for close. So I thought I added those on the last video, but I must not have. So we'll add those in just a second. But at least we've got council and IV, all the icons. But we need some key bindings because now what I want to do is I want to go back up here to make this a little more readable. I'm actually going to turn off the truncated lines. Remember the last video I did space T T for truncated lines. And now yeah, I turned off truncated lines of the lines actually run off the end of the page here. But that's what I want at least for right now just so this is a little easier to read what I'm about to do. I'm going to do space FR for the find recent files command and the actual command that we're going to use will be part of council part of IV. It's going to be council dash recent F and then colon WK for which key and this is the which key description and the description should just be find recent files. I think that is plenty descriptive enough. Let me do a colon W, space HRR. Elpaca doesn't need to install anything. But now space FR for find recent files does give us council recent F. Now it did not give us a list of recent files. And the reason it hasn't is this is the very first time we've run it. So let's actually open some stuff. So let me do control WV for a vertical split. And now I'm going to do space period for find file. And I'm just going to open some stuff. Let's do the early init space period again. Let's do the init dot el. I'm just opening some files. That's all I'm doing space period. Let me go back to config.org in this buffer. Now let me do space FR. I'll do it in this frame here space FR. And now you can see I actually get recent files suggested here. So that will be one of the key bindings that you will probably use all the time. Let me close that that frame there. So that's probably the two most common key bindings I use in Emacs or the find file commands and the find recent file commands. So find file remember space period when you basically gives me a little file manager a little dear ed buffer almost right down here in the mini buffer where I can quickly search for a file. So that's if if you didn't work on a file recently do space period for find file if it's something you've recently been in space FR for find a recent file. Now one thing that kind of bugs me with standard GNU Emacs out of the box is it does not manage your splits your windows the way Vim does let me open up like three windows. There's no way for me to move the file that's open in this window to this window or into this window or going back in the reverse order you know kind of like how you would manage your windows in a tiling window manager. Now Vim actually has this kind of functionality you can you know have however many splits in your window and you can actually move them any direction you want and swap the the contents of each little split and you know there is a hacky solution to this that I found and I've actually used this in the past and that is let me switch over to my web browser this code over on the Emacs wiki called buffer-move.el and all of this is other than the comments is four functions you can see define buff move up move the buffer up right so if it's below a buffer it'll move it up above it and then we've got define buff move down define buff move left and finally define buff move right so what I'm going to do is I'm just going to copy this I don't need all those comments at the top but I'm just going to copy that code and that will add this functionality to where I can basically rotate through the buffer stack if you will so let me get back into my config I'll zoom out a little bit here and since it's called buffer move I'll put it right after all the icons so create a new top level header buffer move I'm going to go ahead and paste this now I've actually removed a lot of the comments because there were a ton of comments in that code for buffer move and I removed one line of actual code that is not necessary if I go back the very last line here was provide and then single quote buffer dash move now that is great if you're having this as a separate elisp file that you're sourcing because it is essentially buffer move is a program but in this case I'm just adding it directly to my config because it's already in the config I don't need that provide buffer move line so I didn't add that but now that we've got this let me do a colon w for right space h r r to reload our config and then elpaka didn't need to do anything space bp for buffer previous now if I do a meta x now the name of these functions are buff dash move dash direction so buff dash move yeah there's buff move up left down and right now we just need to add key bindings for these I'm going to go back up to the general key binding section I'm going to add a block for window movements so this will be key bindings that will begin with w so I've added this new block that will start with w and you can see w ignore so if I do space w it won't actually run a command but you will actually get a suggestion with which key and you will see it is for windows related programs and you can say I'm going to do space w c for closed window so instead of control w c the standard vim binding that uses control we're going to do space w c for close instead of control w v for vertical split which is the standard vim binding we're going to do space w v space w s will do the horizontal split instead of control w s like the standard vim bindings you see where we're going with this but these are standard evil commands right just standard evil window commands you can see window motion so this is moving focus let me show you this so let me do a colon w and let's space h or r to reload this config so that these key bindings actually work I'll space bp for buffer previous now space w v for vertical split we get our vertical split here let me change to a different file so it's obvious what we're working with here is our early init dot el you can see space w h will move focus to the window left so we're already in the right window here so if I do space w h I am now in the left window if I did space w l for moving right I'm in the right window and you can always just do space w w to move focus space w w moves back and that's the standard evil window next command so it's always going to go to the next window in the stack space w w and of course j and k will move down or up but what I really wanted is I wanted those new buff move commands so these are going to be space w and then capital h j k l depending on where you want to move so this isn't moving focus this is moving the window for example I'm in the right window over here if I did space w and then capital h it actually moved that window over to the left if I did space w capital l it moved that window back to the right space w c we'll close a split now we've really got our window management set up here right when people talk about living in emacs and emacs is practically its own operating system or its own window manager in some cases which you can actually use emacs as a window manager part of the reason is because you can do so much with these splits these splits are essentially like your windows and a tiling window manager and once you have it set up to where you can quickly navigate through them switch focus or actually move the windows around so now we're really getting somewhere here the next thing we need to set up is shells and terminals because being an emacs it's not just you're working on text files as a text editor you're going to be doing a lot of command line oriented stuff and there are shells and terminals that are built into emacs and there's some third party shells and terminals that you could also install as well so i'm going to go to my reload emacs section here which is just our custom hot reload function that our little hacky solution from before and the reason i'm going there is because i think it makes sense to add shells and terminals just because of alphabetically and we're going to have some second level headers we're going to do something with the e-shell we're going to do something with vterm then i'm going to install a program called vterm toggle as well so what are these e-shell is an actual shell it is an actual shell like the bash shell except e-shell is written in emacs all the functions there's a lot of built-in functions a lot of your like standard gnu core utils that you would run in the bash shell e-shell has a lot of those functions too but they've been rewritten most of them have been rewritten using emacs list but e-shell is a really unique and powerful shell it's something you should explore eventually if you're an emacs user now what vterm is vterm is just a terminal emulator your standard run-of-the-mill terminal emulator that runs inside of emacs so you'd actually get a split and vterm the terminal emulator will run in that split what shell you run in vterm is entirely up to you you could use bash fish zsh we can actually configure vterm to tell it exactly what shell we would prefer to run and vterm toggle is a third-party package that gives us the ability to toggle on and off a vterm you know so we'll have a key binding that you know i'm going to do space tv that was because t are my toggle bindings right space tv for toggle vterm and that vterm will appear in a horizontal split at the bottom of the screen when i do space tv to toggle it back off it just goes away it's going to be really neat so let me go ahead and add some source code blocks here and i went ahead and added some comments as well but under the e-shell heading here the first thing i wanted to do is use package e-shell dash syntax dash highlighting you guys can probably figure out what that particular program will do it's going to give us syntax highlighting in the e-shell that is essentially all that does the config is turning on e-shell syntax highlighting global mode next up is i have this block of code here for set q remember set q assigns values to variables and i have about eight different e-shell related variables that i'm assigning values to including e-shell rc script so every shell has a config file right bash has the bash rc zsh has the zsh rc so e-shell rc script is where is your e-shell config and i'm going to locate it in a directory called e-shell slash name a file i'll call it profile that's typically how you do this so if i do space wv for a vertical split and i do space period for find file what i need to do is here inside dot den figs slash emacs i need to create a directory e-shell and then slash name a file profile and here you could add whatever configuration options you want for the e-shell i'm going to do one that i add to all of my shells you guys have seen me if i switch to a different workspace i'll go to this workspace if i launch my terminal which runs the fish shell you can see i get color scripts running that's my own uh packaged color scripts that that i've got packaged up and i run a random one every time i launch a new terminal and that's just run with the command color script space random so i have that line in my bash rc my zsh rc my config dot fish i'm getting a message here in the mini buffer does it it's telling me that path to this file e-shell slash profile do i want it to actually create the directory e-shell yes uh then if i close this window space wc for window close you can see e-shell also has its aliases file kind of like bash has an aliases file you can locate this anywhere i'm going to put it in that e-shell directory once again slash name of file will be aliases let me do space period for the find file command i'll go into e-shell and i'll create aliases and i'm gonna just paste this here i'll zoom in a little bit but aliases for the e-shell are very similar to how you would set them in other shells you can see i'm gonna alias ff so if i type ff in the e-shell it's actually going to run the command find file dollar sign 1 so if i give it an argument so if i do ff dot bash rc it's going to run the find file command on the dot bash rc essentially and of course i have other standard kind of shell aliases like all my ls aliases i have some doom emacs aliases here as i was using these for doom emacs and this is not a doom emacs config i will remove those you can see i'm going to alias the command merge to actually merge the dot x resources file yada yada yada so i'm going to colon w to write that space bp for buffer previous to get back to the config and then some other standard settings for the e-shell such as the history size the maximum aligns and the buffer etc next up is the vterm section the vterm section is really easy use package vterm so use package install vterm once vterm is installed we can run it by doing a meta x vterm or i'll set a key binding to launch it the only configuration option i really want to add and i actually should put this inside the use package block here i probably should do a colon config and then set shell file name slash bin slash fish and then vterm max scroll back will be 5000 lines yeah that should work for us i understand why i had this outside of the use package block because this variable shell file name actually is not specific to vterm it's for all the terminal emulators that are available in emacs and there's a bunch so that would have set the default shell for any of them to be the fish shell but in this case i'm probably only ever going to use vterm when i need a proper terminal emulator because it's really the best one inside emacs so and then finally we're going to install vterm toggle and that's use baggage vterm toggle and after vterm so vterm has to load before vterm toggle can be loaded that's pretty obvious why that's the case and other than that we've got some configuration options i just ripped this straight from the vterm toggle get up nothing to see here if you wanted to play with some of the settings you could adjust the window height for example i'm going to set it to 0.3 so it'll be 30 percent of a bottom split if you will so assuming i have all of this code correct i'll zoom back out so that was all the code for e shell vterm and vterm toggle i'm going to do a colon w to write in this space h r r and hopefully the config reloads without errors and install a few packages for us it's asking us do we want to compile vterm why for yes all right then space bp for buffer previous and let's space w w to get over into the window where we compiled vterm space w c space w c to close that window it doesn't look like our key bindings are working in this window which control w c work yeah so now that we have that let's first check on the e shell so space w v once again to get a vertical split i'm going to do meta x and just type e shell and this is the e shell and you can see our config file our e shell profile file works just fine because remember i added color script random right and we get that or my alias is working yes that's my ls command right that's i'm not crazy about the color scheme but you know we'll deal with that at another time but the e shell does appear to be working if i escape to get into normal mode and space w c to close that window it goes away now let me do a meta x vterm there is the vterm terminal it's a standard terminal emulator the shell it's running is the fish shell so it's using my fish config i to get into insert mode there is my ls command which is aliased as well let me escape space w c to close and now let's check on vterm toggle so meta x vterm dash toggle and it toggles vterm on if i do a meta x and vterm toggle again now it hides the vterm right it goes away so let's go ahead and add some key bindings for e shell vterm vterm toggle i'm going to do a gg to get to the top of the document and i'm just going to click on general key bindings to get to the key binding section here zoom in first thing i'm going to do is i'm going to add a couple of important e shell key bindings even though space e was evaluate right it's actually we're going to add some e shell key bindings with e as well so actually we'll do e shell slash evaluate so these e key bindings will either be e shell commands or e val commands and the two e shell commands i'm going to add is space e s will now launch the e shell we'll use e shell enough it just needs a key binding to where i can quickly open it and then i'm also going to do space e h for counsel remember counsel was part of ivy and it counsel has a e shell history command which loads the e shell history kind of like your bash history or your fish history i'm going to do space e h for e shell history and then for vterm it's going to be the vterm toggle command so i had t for all the toggle key bindings i'm going to do space tv for toggle vterm and let me do a colon w space h r r to reload our config and now space bp for buffer previous and let's see if space es launches the e shell space e s takes us to the e shell and it's that buffer still open from before because i didn't kill that buffer remember i closed the e shell window the e shell buffer but i didn't actually kill it so we can always come back to this buffer space bp for previous buffer now let's check out the e shell history key binding so let's actually go to the e shell to actually get the history so space es gets us back to the e shell buffer space e h list the history there's only one command we've ever run in the e shell that was the ls command that i ran earlier so that's the only thing in the e shell history right now so let me escape to get out of that and now i'll do space bp for buffer previous and finally let's do the toggle vterm command space tv toggles vterm on space tv toggles vterm back off and remember evil mode is running in the e shell in the vterm so you do have to type i to get into insert mode to actually type your commands and then you if you want to close buffers or move things around escape to get into normal mode to do things like space wc to close the window and finally one last thing i want to do one of the most important things people have been asking is you know about theming so let's go ahead and talk about theming for emacs so the easiest way to theme your emacs is actually to use the theme creator i'll link to this github but theme creator it's this is the source code for a website but go to the website and here you can go ahead and fill in some colors and at the end it will actually generate the elisp code the elisp color scheme for you and that's kind of what i did i use the theme creator if you want to you can start with some samples so you know start with a color scheme that you like maybe you like this really light color scheme here but you can play with the values and when you think it's just right for you then do theme download and it will download that theme name it some name dot el for elisp so i've already done all of this off camera i've actually worked on a theme for a couple of hours a few days ago so what i'm going to do is i'm going to add a theme section probably should go right before witch key right alphabetically well i'll just paste this here once you've created your elisp file or your theme what you want to do is this simple block of code add to list custom theme load path so where are all your emacs color schemes all the themes i'm going to put them in dot config slash emacs slash themes and then the next important line is load dash theme name of theme without the dot el right even though the file itself will have el so i created my file it's called dt max dot el that's my color scheme file so let me do space period for the fine file command and go into dot config slash emacs slash themes slash dt max dash theme dot el so i named this file dt max dash theme dot el and then we've got some licensing information and this was auto generated from the theme creator the emacs theme creator which i linked to here in the comments but it gave me this very rough outline of some default color settings that we could play with right it's a very lengthy file actually and this is much smaller than probably it will eventually be because as you install more and more emacs programs you're going to want to theme them as well with various colors they'll have color variables within each of the programs or has a lot of color variables the mode line will have a lot of color variables yada yada yada and if you actually wanted to see what these colors are we should actually install a package called rainbow mode because that's one of the most important packages that i love to install rainbow mode will take any hex color value and actually show you the color of it as the background so i'm gonna scroll up i'll create a section for rainbow mode i'll put it right here above reload emacs space that out a little get rid of that line so rainbow mode uh this here use package rainbow dash mode and then colon hook org mode and prog mode so anytime i'm in a org mode document rainbow mode should be turned on anytime i'm in a programming mode document like a elisp file rainbow mode should also be turned on so so colon w and then space hr r to restart emacs or reload it and space bp well here is my theme right so it reloaded emacs using my color scheme it did not launch rainbow mode but i could turn it on manually assuming it installed it it did there is rainbow mode turned on so you could get the hex values here and essentially what you're doing here is you're assigning these variables you know foreground one two three four five six background one two three four whatever it happens to be a built-in keyword constant comment so this is for your programming stuff right you know keywords should be one color comment should be another color function name should be another color a variable name should be a different color you get the idea you got a couple of warning variables and then you can go in the actual code here let me close that window and just change what you want to change for example i wanted my top level org headers so org level one i wanted that to be colored as the built-in color so if i go back to these variables at the top of the page one of them is built in right so that is this blue color so space bp or so that took me to the completion buffer that's not where i wanted to be define file config.org you can see my org level one headers or that blue color you know i set my second level headers to be a green color yada yada yada so that is the theming again we could go into a lot more detail on that but for sake of time i would suggest having one auto created for you with the theme creator now start with some generic theme that's already been created modify it to your needs and then download the file put it in dot config slash emac slash themes you know put it in that directory and then just make sure your config file points to that theme so i go to the theme section here load theme name of theme and the name of theme by the way we should talk about that so let me go back to the dt max dash theme dot el file where is that name of theme if i go to the end here you can see provide dash theme dt max so even though the file name is dt max dash theme dot el the name of the theme when you are actually loading it i'm gonna just shorten it to dt max so that is how that works and i had a few other things i wanted to cover on this video today but i think i'm gonna have to wait on those because this video i know is going to run very very long we've already went on forever on this video but we got a lot done with council and ivy and key bindings shells and terminals including being able to toggle v term on and off and of course we got our custom theme working as well so i'm going to go ahead and upload the configs i'm going to go ahead and put this on my git lab over at git lab dot com slash dwt one slash configuring emacs look for the configuring emacs repo and you'll be able to find these configs as well as my example theme here that i spent a couple of hours creating so and you can see it's mostly a kind of dark blue greenish kind of colors which are kind of easy on my old eyes now before i go i need to thank a few special people i need to thank the producers of this episode gave james max and my homies to bald matt mimichael paul royal west armor dragon bash potato chuck commander ringery george lee marstrom metho snater yon paul peace archimdore polytech realities for less red profit rolling tools debiler williams and a bit these guys they're my highest tiered patrons over on patreon without these guys this third video in the configuring emacs series would not have been possible the show is also brought to you by each and every one of these fine ladies and gentlemen all these names you're seeing on the screen right now these are all my supporters over on patreon i don't have any corporate sponsors i'm sponsored by you guys the community if you like my work want to see more videos about free and open source software like emacs subscribe to distro tube over on patreon peace now this thing's starting to look like a real editor