 Welcome to video four in a series of videos. I have entitled configuring Emax configuring Emax It's I started with vanilla genu Emax, and I've slowly transformed it and customized it We've been working on a configuration file now for a number of weeks, and we've really got something special going on So for those of you that want to follow along in this journey of configuring Emax I have created this repository over on my GitLab at gitlab.com slash dwt1 look for the repo configuring Emax and in it I have a directory for each video in the series video one video two video three after I finish this video I will add video four as a directory and if you click on these Subdirectories here and you will find all of the config files as they existed at the end of that particular video So what are we doing today? We've already added the LPAC a package manager. We've got evil mode working We've added a lot of key bindings. We've tweaked org mode a little bit We've played around with shills and terminals We've also played around a little bit with the color scheme today We're actually going to do a lot where we're gonna cover a lot of territory very quickly And some of it will be for fun because a lot of the first three videos were things that we really needed to focus on today We're gonna have a little fun and we're gonna do some things that aren't necessarily Required to make Emax usable, but one of the things I did the other day I posted on my community tab over on YouTube Emax as a run launcher question mark And I showed you a little screenshot of me using Emax essentially as a run launcher kind of like D menu or Rofi and yes, we are going to cover that today So let me close the browser. Let me open up Emax So this is Emax as it existed at the end of video number three if I do spacefc or find myconfig.org Spacefc here is the configuration at the end of video three Now the first thing we want to do is let's go ahead and add that run launcher now on the last video I installed IV and council as well council as a program. That's part of the IV package So IV is a generic completion mechanism for Emax and council is a collection of IV enhanced versions of common Emax commands Including things like meta x council. So my meta x program This is actually meta x council is the name of this particular program gives me the nice all the icons It gives me the nice Descriptions for all of the programs that are listed as well council has a million different programs Available in it, but one of them is council dash Linux dash app And if you run that that is essentially a run launcher It is listing pretty much anything that has a desktop file attached to it as far as on my Linux installation So anything that's a desktop application It is listing including a lot of app images here at the beginning I scroll down Then you get other things like Pabu control known just alacrity Now pretty much again anything that has a dot desktop file So we can use that particular program as a run launcher council dash Linux dash app So I'm gonna do gg to go back to the top of the document That's a standard vim command also works evil mode in Emax, of course And so I'm gonna go to all the icons So I'm gonna click that with my mouse there and right after the all the icons top level header Let's go ahead and add a new top level header. I'm gonna call it app launcher Let's go ahead and create a source code block And let's make it Emax lisp, of course now in order to use council dash Linux dash app as a run launcher We need to be able to launch it as a mini buffer only You know so just this mini buffer and not the rest of the Emax frame Otherwise it's just gonna look odd right because you'll have something like the scratch buffer or your start page or whatever Every time you try to launch the council Linux app program You'll get a full screen Emax window with two frames essentially You'll have a like a scratch buffer and you'll also have that run launcher But all we want is the run launcher. So I found this code on the internet I did some searching around and there were several reddit threads on how to use the council Linux app as a standalone window and that window only Displays the mini buffer. So explaining some of this rather quickly D fun. We've mentioned this in a previous video This is defining a function in Emax lisp We're gonna call this function Emax dash council dash launcher And then after that you have a description that you could add So when you do a search for Emax council launcher using meta X for example, you'll get a little description And then it's an interactive function if you don't add interactive It's not available using meta X But because we have that when I do meta X I should be able to find Emax council launcher Using meta X and then everything after that in this block here with selected frame make frame So this is all about the frame the window and we want it to be mini buffer only So that is very important. We do not want it to be full screen That's also very important because I want this window to float. I can set floating Window rules for my tiling window manager for example. I don't want it to be Decorated so undecorated is true that removes the title bar and all of that You got some other settings that I could have used but I've got them commented out because for me I don't need these we're also gonna set a border width so think of this as padding around the window I'm also gonna set the width and the height and then finally. What are we actually running in this frame that we've created here We're gonna run council Linux app So let me go ahead and do a colon W to write that I'm gonna do space H or R To reload my new config, right? So Lpaka the package manager was searching for programs to install It didn't need to install anything for that new code that we added So I'm gonna do space BP for buffer previous to get back to this buffer now I'm gonna do a space WV for a vertical split and I'm gonna navigate to my X Monad config now This will differ depending on what particular window manager you are using but for me right now at least for purposes of this video I am using X Monad So if I zoom in a little bit here and I go to This section here manage hook So this is the rules for various windows as far as floating and you know which workspace Certain applications should appear on and you can see I added this line here It's gonna search for a window with the title emacs dash run dash launcher And if it finds a window with that name it's going to force it to be a floating window manager again Every desktop environment or window manager will have different ways to force a window to float or not to float You'll just have to do some research on your own depending on which window manager you happen to be using now this title I specified in my config.org that the name of that frame has to be emacs dash run dash launcher So for sure the window will have that title and when it finds it it will float that window now One thing to note is I defined this function emacs council launcher That's the name of the function, but I'm titling the window emacs run launcher and I'll show you why I did that in a second It's because I'm actually gonna show you a different way to do this run launcher in a second But let's see if this actually works. So let's run the emacs council launcher program. So let me open a terminal Zoom in a paste this command here We're gonna run emacs client and pretty much all I ever use emacs as is emacs client window So I've always got the emacs server running in the background the emacs daemon. So every time I launch emacs It's a emacs client window. That's why my emacs is fast, right all the windows. They just open up rather quickly It's because emacs is always running We're just opening up new windows every time we do a emacs client And if you're gonna use emacs as a run launcher, you especially need to run it as emacs client Otherwise your run launcher is going to take a little time to load because every time you run the run launcher It's loading a new Process of emacs right instead of just using the emacs server. That's always running in the background So emacs client dash lowercase c capital f lowercase c means create a new window create a new frame capital f are frame parameters the frame parameters are visibility dot nil nil is false Remember t is true nil is false. So visibility false. So what this is is when we do the run launcher It's not going to show us that default scratch buffer that would normally be created, right? So it's just going to be the run launcher window without a second window Which would be like a scratch buffer or maybe a messages buffer, whatever it happens to be and then finally dash e for a val Evaluate and it's going to evaluate the command emacs council launcher So that function that we defined emacs council launcher. Let's see if this works. So if I hit enter That doesn't look like that would work. So let me get back into the config here And let me do meta x and let's see if emacs council launcher. It is not here So did I not colon w space h or r? I might need to kill the emacs server and restart it So might be the problem here. Yeah, because emacs council launcher is not showing up here So what I'm going to do is I'm going to kill that window Then I'm going to run a kill all emacs So that kills the emacs server that was running and then I'm going to run emacs space dash dash Damon I'm going to do the full path to the emacs binary user been emacs space dash dash Damon Because I have my emacs command a list and it looks like there is an error the error in the config dot el So yeah, there is definitely something going on with our config Let's get into config.org Well, let's see what the problem is typically the first thing I would check are the parentheses. Yeah But the parentheses are not correct because I have an opening parentheses When I click on it yet highlight it you can see nothing is blinking down here because you click on a parentheses There's the opening for that one, but I need at least one more parentheses here So that is typically the first thing I would check anytime You have something like this and then I'm going to click the button here to save and we're going to close that and Now let me try to start the emacs Damon again It's unable to start the Damon another instance was running So I guess the previous instant that kind of failed was still running. So let's kill all emacs up arrow Start the emacs Damon again, and now it started successfully Now my emacs is working again. I'm going to go back to the terminal I'm going to up arrow and now let's try to run this emacs client Window running the emacs council launcher function that we created and there we go. There is our run launcher So it's essentially how you saw it in the emacs frame except now It's the mini buffer only in its own window and you could search for anything for example Let me make sure I'm highlighted here if you search for my brave browser or PC man fm or whatever it happened to be I hit backspace too many times now That's one thing to know about this here is if you want to close the window At least in my config right now escape three times always get you out of a mini buffer So if I just hit escape three times that kills the mini buffer and kills that window The other thing I could do is instead of typing something I could just backspace because I'm already there's no characters here A single backspace will also kill that window Let me close that terminal and let me get back into my config now I'm going to do a space period to get the fine file command So I'm in a backspace and navigate to dot config slash X-mone ad again I got to get into my X-mone ad config Because I don't want to have to open a terminal and enter that very lengthy emacs client command to get my run launcher Right. I'm gonna add a key binding. I'm gonna go to my key binding section here in my config I'll zoom in a little bit so you guys can see this right now. I have super shift enter running essentially D menu I'm gonna comment that out then I'm gonna uncomment this line It looks a little weird because at the formatting of syntax here using Haskell is a little screwed up here I should actually install Haskell mode so we get proper syntax highlighting and all of that in Haskell documents We may do that in just a second But I'm gonna change my config to no longer super shift enter runs D menu now super shift enter is going to run The emacs client command that we showed in the terminal a minute ago, right? So emacs client dash C capital F visibility nil dash E for a val emacs dash council dash launcher If I do a colon W to write I'm gonna do meta X because I need to run a org babble Tangle on my X-mone ad config and now I need to restart X-mone ad give it a second now that I've restarted X-mone ad now super shift enter should launch that emacs council launcher, right? So how cool is that? So that will be my new run launcher emacs is my run launcher D menu is in the past. So let me do a space BP for buffer previous to get back to my config.org now that's one way to do the run launcher, but there's actually another Probably better way to do the run launcher. So let me Scroll down here to the app launcher heading that we had So I'm actually going to make this code block a second level header. So under app launchers I'm going to have council linux dash app, which is that first code block and then I'm going to create a second header here and this one will be called app Launcher Because this is another program that we could use here There is actually an emacs program called app dash launcher. So what I'm going to do is I'm going to paste this here So this particular program app dash launcher, it's hosted over on github and to install it You can't install it with elpa or melpa because it doesn't exist in those particular repositories You have to give it this special character here the colon elpaka means with elpaka You can use this host as github right and look in the repo or this particular address That's all that is all it's going to do is tell elpaka to go to github to this particular repo and install app dash launcher So let me write that and then space hr r To restart and elpaka didn't have to install that because I had actually installed it off camera But now if I do a meta x I should have app launcher Yeah, there is app dash launcher dash run dash app And hit enter and very similar to council dash linux dash app Searches your dot desktop files. Although it is a little cleaner It gives you the actual title as it exists as it's defined in the dot desktop applications So the names look a little better. They make a little more sense. You get a lot of generic names though So sometimes you'll be searching for a particular program and it's not named as the executable binary Sometimes it's named as a more generic name that said I do think this is a little cleaner look and you can even add icons To this particular application with all the icons and I'll show you how to do that right now Because now that we've got that installed I'm going to create a function very similar To this one that we created up here a matter of fact, it's going to be Pretty much exactly the same will name the function something different, of course And other than that instead of running council dash linux dash app in that mini buffer only window We're going to run app dash launcher dash run dash app So we're just going to run that other program that we just installed So I just did a quick copy and paste now. I'm defining another function using defund So this function will actually be called emacs dash run dash launcher instead of emacs dash council dash launcher So two different run launchers available for you depending on which one you you prefer because they Are a slightly different they they both aren't perfect But you know, there is some slight differences between the two and now that I've done that I'm going to colon w space h r r and l packa doesn't have anything to install space bp for buffer previous Once again, I'm going to open a terminal I'm going to up arrow back to that previous command that I did in the terminal Except this time instead of running emacs dash council dash launcher Let's run emacs dash run dash launcher now this will Instead of using the council program It will use the app launcher program that we just installed Same kind of window right a window That's only the mini buffer and we could search for something for example pc man fm There is file manager pc man fm So I actually just searched for file manager for example again some of the generic descriptions You know, it'll search for that as well And in fact, I would say this is probably a better run launcher Than the council linux app launcher But I'm going to leave the code for both of these in my config that way you guys can check it out So now we have this new heading out launchers and two second level headings council linux app and app launcher Very similar pieces of code Whichever one you want to use just add some kind of shortcut in your window manager and make sure your window manager floats The window that is titled emacs run launcher. You can see I named the windows the same In both of the functions. I think the next thing I want to add once again something a little bit for fun for show I want to add the dashboard to my emacs config So dashboard is essentially a fancy start screen that you can add to emacs So I'm going to go to fonts because dashboard begins with a d so right before fonts I'm going to add this here this new section here that I've titled dashboard I'll zoom in a little bit so you can read some of what is going on But we're going to use package dashboard and then we're going to do colon and yet So these are things that need to be set Before dashboard actually runs and I want to explain all of this But essentially you have options to show icons. So if you're using all the icons, which we already installed all the icons I think on the second video that I did you can specify a banner logo, which will appear at the top of the screen you can also specify a Image that will also appear at the top of the screen in the dashboard And then you can set The number of recent files that the dashboard will show i'm going to show the last five recent files Last five agenda items the last three bookmarks the last three projects and the last three Registers so these are things that are copied to a register. You can think of it as a clipboard So that is the dot a knit section here in use package So these things have to be set before dashboard ever runs and then finally colon config and these are things that will happen once dashboard runs And we're going to do dashboard dash setup dash startup dash hook So let me colon w and then space h r r to reload our config lpaca will install Dashboard and it's like I get an error message here. I'm not sure what that is about But I'm pretty sure the code is correct. So I think that error is not critical So let me do a meta x and do search for dashboard Dash open so this should be the dashboard screen There is an error. It's uh, no such file or directory projectile So dashboard by default shows recent items agenda items bookmarks projects and registers projects So to have projects within emacs, you need a program called projectile to also be installed So let's go ahead and install projectile that way dashboard works I'm going to gg to get to the top of the document and Projectile begins with a p so I'll put it right before rainbow mode here And then I'm just going to paste this bit of code here for projectile And this will be very simple. All we're going to do is a use package projectile and then colon config So I want projectile dash mode to be set to one one positive one Means turn it on projectile mode is running if it was set to negative one Then projectile mode would be disabled other than that The rest of this is just a nice little description of what projectile is That's a project integration library for emacs. You can think of it as a way to manage projects Projects for those of you that are not in the programming world development world like, you know, I I'm not a programmer or developer But what these are projects are typically get repositories, right? It's a directory that's under some kind of version control Now I will go ahead and tell you that I made this very lengthy comment because before I added this comment I just added the code and I was having some real serious issues The projectile program was not functioning correctly I was getting a lot of errors in my emacs and for whatever reason a lot of the projectile Programs that are part of that project have a real issue with me having fish set as my shell for vterm And because projectile does not like me having vterm my shell set to fish What I'm going to do is I'm going to go down to the shells and terminal section of the config where I Add vterm here and you can see set q shell dash file dash name is set to slash bin slash fish I'm going to set that to slash bin slash sch Now slash bin slash sch on my system Is the fish shell because I have set my user default shell, which is a alias for sch That is actually set to the fish shell on my computer So I will still be using the fish shell But oddly enough when I set it to slash bin slash sch Projectile and everything in emacs works just fine. But setting it hard coding it to slash bin slash fish Causes some issues. So I'm going to do a colon w to write space h r r And let's see if now it reloads without errors Yeah, no errors this time. So now space bp for buffer previous. I'm going to do a meta x once again I'm going to search for dashboard dash open And this is the emacs Dashboard and you can see all the icons are working. We've get our recent files agenda items bookmark items We get our projects because my awesome window manager Config I guess is part of a project and then registers. So this is things that were copied To the clipboard to the register essentially including that projectile Source block that I pasted just a second ago that was in a register And you can see it is using the logo title that I specified and it is using a image that I specified that image By the way, I do space period. So I'm in dot config slash emacs I created a images folder if I go into that I created two images one of them emacs dash dash Dot ping is that image space bp for buffer previous I also created This logo as well dt max because that was the name I gave to my color scheme dt max I might actually use the dt max logo in my dashboard. I'm Undecided about that, but I will do space fc to get back to my config dot org So now we have our cool run launcher that works, you know emacs as a run launcher Now we have dashboard by close that particular emacs windows and I do a super e here in emacs You know, I will launch my emacs client window all my emacs client windows now We'll launch the dashboard as their start page But I want to get into recent files here at the top I could do r and now just navigate down to the recent file I want to get back into config dot org in this case and that is how the dashboard works Next I want to add some more general key bindings So I'm going to go to the general key bindings section here and it seems like I add key bindings Several key bindings every time I do one of these videos because we're going to end up with literally hundreds of key bindings by the end of this So this is going to get rather Lengthy here, but every time I use my new emacs config It seems like there's something missing in this config that I had in doom emacs So I want to add those same key bindings that run those same programs And I I don't have any easy key bindings for Doing some of the org mode stuff that I used to do Inside doom emacs. So I'm actually going to create a new block here. So I created actually three New blocks here. So these particular key bindings will all begin with m Just because that's all the org mode related key bindings and doom emacs begin with m So I'm just using the same key bindings that I was familiar with you can see if I do space m It's just going to give us a description These are org related key bindings and you can see I've added key bindings for org agenda It's going to be space ma for agenda a very important one is the org babble tangle key binding I run org babble tangle all the time and having to meta x org babble tangle was getting annoying So I'm going to do space m capital b for org babble tangle Some other important ones would be space mi to toggle an item Then I'm also going to do some space m b bindings for anything related to tables I'm going to do space md bindings for anything related to date and deadlines and of course all of these are org mode related commands Now let me show you these in action. So colon w space h r r L pack I shouldn't have to install anything. So let me space bp for buffer previous and now let me do space m And now which key gives us these org mode related key bindings here. Now one thing I don't like here if I do space m again Which key is not displaying all the items some of them are running off Off the page here. So that is interesting. I wonder if we can figure out what is the cause of that So I'm gonna capital g to get to the last section here of my config which key and let's see what we've got going on here Which key allow imprecise window fit is set to true Well, what if I set that to nil would that fix the problem? So I'm going to write that space h r r That seems like the variable that should fix the problem right imprecise window fit So now let me do space m for those org mode related Which key bindings right and now it actually Fixes that problem. So again a lot of times on these videos You know, I just kind of wing it but usually we figure these things out You know, that's a lot of problem solving and I like showing this kind of problem solving on camera to You know, you can see I don't get frustrated at these things. I when I encounter something that's an issue I always solve it, right? We just stay calm and in the end it pretty much always Works out now before adding any more key bindings We just added some of the org mode related key bindings that reminds me. Let's go into the org mode section of the config because there are some annoying things that bother me with org mode for one thing the Random indentation that sometimes happens inside the source blocks within an org mode document They kind of Annoy me a little bit So one of the things that we did in a previous video were we disabled electric indent mode Which was it really creates some weird indentions But you notice the source code blocks they always default to spacing over two times in a source code block even if it's the first line of You know, you're defining a function or something. Why does it need to be spaced over two times? I guess for readability to make these source code blocks a little more readable But for me, I find that very annoying that it adds that spacing So what I'm going to do is I'm going to do a sick cue. There's is this org mode variable org dash edit if I can spell dash source dash content dash Indentation and we're going to set that to zero So how many times should you indent the default value is two two spaces? That's just the way emacs has it set as a default. I want that to be zero So let's space hr r and now space bp for buffer previous and let's see if this works So I'm going to get into insert mode I'm going to hit enter and you can see before if I would have done that It would have indented all of these lines over two spaces for the default org source content indentation Right, but now we've got that set to zero, which I think is Probably the behavior most emacs users would expect to be the default So I'm going to definitely leave that in the config now I'm going to go back into my general key bindings because there were some key bindings now that I've got the org mode Related stuff added and there were a few other key bindings that I wanted to add One thing I wanted a better key binding for meta x meta x works. There's nothing wrong with it But I'm going to paste this line. How about space space the leader keys already space I'm going to do space space to run the council dash meta dash x program Let's write that space hr r and then space bp for buffer previous And now if I do space space, there is meta x right or council meta x is what it defaults to I think that is a lot easier to hit because my thumb in my case is already on the space bars Probably already on the space bar on your keyboard as well. Just space space That gets that meta x program up and running rather quickly The last thing I want to do today is let's start talking about some of the language support and by language support I mean the programming language support so many of you guys have been asking about Some of that because a lot of you guys that are interested in Emacs are interested in using it as a IDE for programming and development work I am not in those lines of work. I'm not in those fields. So I've never used emacs As as a real IDE. I don't spend that much time programming or scripting Even though I know some of these languages. It's not something I really enjoy doing. So I've never really Gave that deeply into some of these areas But let's go ahead and get some basic language support up and running So I created this new top level header language support and I've got this description here This description was just ripped straight from the emacs documentation Emacs has built-in language support for many languages. It has of course built-in language support Obviously for emacs list Common lisp as well and scheme which is another very popular lisp variant But it also supports a lot of other things as well Including a lot of the standard scripting languages that you would use on Linux and other unix like operating systems. So things like alch for example It also has support for shell scripting bash scripting Also has support for python for those of you that are neckbeards and still script and pearl Right. That's sort of here pass school is also here. That's a really interesting for tran So in some of the compiled languages, we've got for tran here We've also got support for c and c plus plus, which is obvious why that is the case But while it has built-in support for several languages here There's literally hundreds of scripting and programming languages out there And obviously not all of them are going to have that built-in support typically what you're going to have to do is you're going to have to install a Programming language mode for whatever language that doesn't already have built-in emacs support For example lua, it doesn't have built-in support for lua So i'm going to do a use package and i just happen to know that there is a package called lua dash mode available And i'm going to copy that line and paste it I'm actually while i'm thinking about it because we were in that high school document earlier My x-mone ad config you notice it didn't have syntax highlighting and you know It just didn't look good looking at my x-mone ad config So let's go ahead and use package haskell dash mode as well What this will do will give us good syntax highlighting in these particular languages space h r r And alpaca didn't have to install those packages because i had installed them previously off camera Let me do a space w v for a vertical split and let me do space period And get back into my x-mone ad config just to verify that now we have Syntax highlighting and we do see this actually looks Much better, right? This is a much more readable Document than what we were looking at before which was nothing but plain white text on a black background Let me do space period for fine file. I'm going to navigate to my awesome window manager config as well And you can see lua documents also now have nice Syntax highlighting meant to close that split not to open another one now that we've got some basic language support here And some languages that i use you'll you guys will use other languages And you'll just have to do a search for whatever programming modes you need for whatever languages you work in and then just Add those packages so you get your syntax highlighting for the languages that you work in One thing i want to add is i want to add the fly check program So i'm going to add this section here for fly check. What is fly check? It is a syntax checker Essentially fly check will tell you if there's something wrong with the code you just type Whether it was a misspelling or you defined a variable, but you didn't use it whatever it happens to be It'll give you some information. So this is pretty easy to install once again We're just going to use use package fly check as far as some of the configuration options colon and knit is global fly check mode So that turns fly check on globally that's important because you probably want it running all the time But the other interesting thing is colon diminish what is diminish it means i don't need This particular minor mode to be listed in the mode line You see all of these modes that are running org mode projectile mode indentation mode rainbow mode witchkey mode Council mode ivy mode. We've got some indentation mode some line wrapping modes as well You know the more we add to this config we're going to have a million things Minor modes that are going to be displayed in this mode line. Most of these i don't need to know about I need org. I need to know that this is a org document. I really don't need any of the rest of this So if you add diminish right fly check will not show up as a mode here But you have to have the diminish program installed. So diminish is a emacs program So right before fly check i'm going to add this block here for the diminish program. All this is is use package diminish Let's see if this works. So i'm going to write space h r r and Now i'm going to space bp for buffer previous and let's see if fly check Works. So let's open up some kind of script or programming file So i'm going to do space wv for a vertical split You guys remember the find recent files command that we added in a previous video space fr for find recent files Let me go to my xmoned dot hs I'll go to the top and now we've got these little squiggly lines under some things And it's going to give me this message could not find module xmoned dot stack set So basically you can think of these as errors or warning messages Now not all of these are things that need to be addressed some of these for example It doesn't like that I imported xmoned because it can't find the module called xmoned But that is necessary to have an xmoned config file if you don't have that line the config is broken So, you know not all of these are necessarily things that need to be addressed But some of them will be some of them, you know, i'm importing modules But I never actually use them things like that. So let me do a space wc to close that split One thing with fly check for fly check to work in some programming languages You're going to need to install some third party packages and by third party packages I mean not emacs packages packages from your linux distributions repositories For example for fly check to work on lua documents. You need to install a program called lua check So on arch you need to do a sudo pacman dash capital s lua check And that's the name of the program and now fly check will work with lua for python related programs You need to do a sudo pacman dash capital s python dash pilant It's the name of the program the linting program that fly check will use for those of you that are doing haskell You typically don't need to do this if you're already working with haskell You're going to have the haskell compiler installed on your system But if for some reason you don't haskell dash ghc Needs to be on your system for fly check to work with haskell And of course if you're working with other programming languages You'll need to do a little bit of research to see what you need to get fly check to work with those languages And the other thing we installed was diminish now fly check that mode that minor mode is running, right? It's pretty much running all the time. We turned it on globally Let me go to you know this file here where it would definitely be running, but I don't see it listed down here So let me do a space wc. So the diminish does work in these use package statements So i'm going to yy to copy that line and i'm actually going to go ahead and diminish I think i'm going to diminish the projectile mode the indentation rainbow mode witch key mode So I went through many of the use package blocks and if they were installing something and enabling a minor mode I tried to remove them. So for example, here's the witch key block I have now added colon diminished that to that particular use package block And if I did this most of these minor modes listed in the mode line should go away So let me space hr r to reload this config and now let me space bp for buffer previous And now you can see the mode line. You know, I got rid of a lot of that stuff. I still have org and projectile I also have the line wrapping feature here as well If I do space tt to toggle off truncated lines Remember that was a key binding I added a while back you can see wrap Which was listed here wrap mode is gone space tt turns back off the truncated lines And you can see we've got wrap back here in the mode line If I wanted to I could I could hide all of this really if I wanted to and we may hide more things as we go But I definitely Added diminish to about five or six use blocks because that mode line was just getting a little bit too busy for my taste One final thing we're going to add this kind of goes along with language support fly check We're going to add a package called company. I've already added this top level header. What is company? This is a completion framework for emacs. The name stands for complete anything So company and we're going to do this use package block use package company We'll install company and then I've set some various Variables assign some values to some various variables other than that We're going to install alongside company another program called company dash box Which just makes company look a little nicer You can see we're going to add this hook here for company mode So anytime company mode is running where it's actually going to be this company Box mode and let me show you this in action. So colon w space hr r to reload the config L packer will have to install company. I've already installed it though off camera So now let me go to a programming File. So let me maybe open up something in python. Have I opened up my q-tile config lately? Yeah So it is listed in my recent files. I'll zoom in. You can see fly check is working because I have Um, the little squiggly lines. It's giving me for example import re. That's the regular expression library. It says unused Import so I've imported regular expressions, but I never actually used it in this config So I should delete that import, but I'll do that at a later date Let's see if we get some completion suggestions. So let me start typing import Yeah, you can see I get suggestions for Import right so I could actually tab complete that if I wanted and hit enter on what it suggested If I started typing from yeah, what about define for define a function? Yeah, and I've also got default float rules Which is a function. I think I'd already defined in this document before so that is company So very cool. I know a lot of you guys were asking about Fly check and syntax language support and the company completion mechanism. So we've got some of that now We've also got our run launcher Now we also have our dashboard as well So every time you open up a new emacs client instance, you'll start with the emacs dashboard Now I'm going to go ahead and push this config file over to my git lab to the configuring emacs repo for video 4 And you know, let me know in the comments down below for those of you that have been following along with this video series What would you like to see on the next video because I'm We still got so much more to add to this config But now we're getting to the point where our emacs is very usable So we're kind of flexible in where we can go from here So I'd love to hear from you guys what you're interested in seeing on video 5 now before I go I need to thank a few special people I need to thank the producers of this episode and I'm talking about gay james matt paul royal west armor dragon commander angry george lee meadowsnate ur yon paul peace archimador realities for less red profit roland tools devler War gen 2 and a boon 2 when willy these guys Man these names you guys are killing me, but these guys they're my highest tier patrons over on patreon without these guys Episode 4 of configuring emacs 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 Do you like my work and want to see more videos about linux and free and open source software like emacs Subscribe to distro tube over on patreon. All right guys. Peace