 All right, how many e-max users are there other than gave a kid that makes two of us Oh three, okay Okay It's uh, yeah Emacs the I mean you guys know the editor so Emacs comes with this excellent Plug-in coincider that does the closure Sort of integration I was actually intending to have a nice VM where you guys can try this all out in it didn't work out too well because What happens is that this ancient emacs config my emacs? I've been using emacs for a couple of years now, so not a couple of years couple of decades now It's nearly old enough to put in the general election at this rate Ah So I didn't want to confuse that with what is the actual side of functionality But at some point I gave up because I couldn't recreate my suitable configuration anymore Those of you go use emacs long enough to recognize the problem So my my emacs config that I use for stuff of closure is mostly on this right-hand side But you find that so I go through the demo. I'll be using some stuff that isn't down here The main one of course is cider And it has a bunch of nice functionality The it plugs into closure using this interface for nRuffle, which is the same thing that the Vim one uses and I think the Eclipse also uses Normal stuff syntax highlighting all that It ties it plugs into most of the common emacs code completion So you get it all the fancy drop-downs. It has the test square to test integration I'll show these off later But basically a whole bunch of nice functionality, but there's some stuff. It doesn't cover Refactoring it doesn't cover. So actually I'm going to show also refactoring integration I'm going to show the the little templates integration of course part of it is the Structured editing mode for which I think Vim also has some nothing and a lot of them Relation for that. So those start out in closure I don't have a fancy project to show off unlike the rest of the folks. Unfortunately, no closure related workflow anything of that sort What I'm going to use is actually the pedestal demo So crap So what happens is that for this you the integration happens It's Sider jack-in I already jacked in so it's it's going to complain So that connects you to that launches the raffle and connects you since I'm connected. It's it's there I can do these standard stuff which is I can send I can evaluate this buffer I can send it over to the raffle. I can run it I Can let's see. I'm going to find a test test test test is here I Can load the test I can run the test I've been around the test test pass. You can see at the bottom there So for test pass If I make the test feel The closure is good Now test feel I can go jump to the failing tests What is I think different Unusual unexpected for people who have a new c-max is just the level of integration here So let's say like how many of you used the closure for more the nice alone Yeah, so that is basically a nice online set of documentation here It's it originally started as a closure cheat sheet and then it kind of evolved from there to more or less here is a Contributions Yeah, it's community documentation more than the standard Closure documentation you can see the standard closure documentation at the bottom of the screen now with this for deaf and it's it's There that's how you use deaf and if you want more information You can go for the grimoire documentation it loads it up using the e-max browser and Yeah, this shows you okay. Here's the example. Here's Some tips and all that how you use it Yes, it's it's far more accessible than any any any doc string that you get from Especially for the more complicated functions We're just the names of the variables don't help Standard stuff you get a template completion. It's it's a pretty complete set of templates here So here's the auto completion it shows okay here all the functions. You see little letters here indicating whether it's a bar or Yeah macro and all that So let's say I want to complete deaf or I can complete deaf and it's actually more exciting So here I can complete my function Doc string is Yeah, I'm just hitting tap to go to all the various places, right? So this is I mean this is the templating from not from cider but from another it's Library called yet another snippet Why a snippet which is again based off the text main snippets? um So I can evaluate this in the Ripple you can see the result there. This is this is the basically the result evaluation box up there Let's see refactoring I've actually a complete set of refactoring tools here It's going to be hard. I don't want to show all of them Demo all of them the list. Let's see. So this is not part of cider. Also. It's a separate plugin This is basically the list of available refactoring here whole bunch of stuff that you find in the standard ID so I can What would be good? Let's see I can go to Server let's say I want to refactor create server, right? So Refactor renames First I So actually I have another plugin which shows a bunch of the keystrokes so I can actually hear in this case It's unfortunately I am in a bad state I don't want to restart my rebel because that may create disaster, but I can rename I can find usage Sorry, I don't know what state it's in right now So I'd prefer not to do that. Let's see what I can try them on a file to refactor I'll try on service file service file has not been good to me for refactoring Yeah So refactor usage screw that I'm going to kill the ruffle What can go wrong Let's wait for the ruffle to come back maybe eventually for those who aren't familiar with With the assume how many of these he familiar part it and then the keystrokes are not familiar part it Familiar familiar everybody is part of that simple structure that they think part. It's pretty cool of the structured editing Where is part of this so I mean it's a standard stuff like I mean you want to move up between the various levels of Expressions you can navigate there you can combine to adjacent expression split them up you want to to Surround one part of your code with parenthesis and it's basically just it's it's since This is more or less. You're operating on the syntax tree. It's it's just it's just moving things around in syntax tree. Okay It doesn't look good, but it doesn't look too good, but I think it's better than before Load it up Let's try to refactor now. It's in this crappy state Okay, so no demo refactoring What else I want to show? Oh, yes rainbow delimiters. I don't know if this is a bit harder to see But you can see that as I move through the various levels I can see the little the colors change or the parenthesis and then for bright red slightly darker red all the way out So I can see which which block I'm in level one And the usual navigation around this is sloping up the stuff there is actually a Squiggly closure which just shows the this is the flight is what we call an emacs fly check It runs a bunch of the closure checkers. These are more or less Core type is the core type checker and then there's east wood which is more of a style checker and basic basic It combines all these together and have it run inside her Unfortunately on my installation right now. It's bought I find it's bought half the time so I cannot really recommend it So but it's when it works, it's it's pretty nice Yeah, magic is probably one of the best Kit goodies, I don't know how to show that Okay, so here I have to change files. This is magic the Integration for for emacs. So this is basically the main the main page the status page for magic You can you can view the changes here? I can stage I can stage the changes Let's see I can actually stage partial changes. So I am in server and now let's change something else Let's I can stage partial changes and all that which is useful compared to some of the GUI tools So I can just stage this part here The history is also it has basically it exposes the entire A lot of good functionality through a reasonable GUI. So here's a day the get log It's This is pop up here Let me expand it. This is for basically the first level menu and then you can drill down so you can do everything cherry picking bisecting it and then Submodules loading rebasing the rebasing and the and the Diffing and the cherry picking merging is excellent because then if you're used to eat emacs You get that you can do the three-way merge all within using the standard emacs tools So really nice Um, let's see How many you guys used to get and then and then and what would you how do you use it through most of the time command line usage? Source tree, okay All command line So I mean the nice things. Let's say like the the ref log I don't know the refs on this. It's Yeah, if I had another project, I can show you the it's nice to cherry picking from across branches ref logs The the tree that lists here is it's quite straight But I mean you can see that it shows that the branching structure and all that it shows that the tags version tags Now I can probably show what happens when I try to revert something So here I've Unmerged read me So I can I can see the differences here. I Highlighted read green, whatever these are the changes If I want to merge it So this is the emacs three-way merge excuse the tiny font size up there, but you can see the list of merge commands I can go through it. So this is the left side is the Original which sides which left sides original That's it's original right side is the Sorry left side right side is original left sides new and then the the bottom is to the current merge So Yeah, this one's a boring rich What's cool about this, I think it is That if you learn if you understand the max all of these different modes You can leverage what you know about the max and I use it, right? So all the keyboard commands I don't think my hands on the keyboard Tools they look nicer, but I don't find myself as efficient in them because I Yeah, I mean it's it's as he pointed out the this that was intelligent right with the list of Of commands the pop-up list of commands and I mean it's for emacs everything is tied to become It's it's a command that can be used. So normally the Joke about emacs users is and that's why I'm showing the shortcuts in the corner. It's just which It doesn't matter of pressing control all in some letter or something And but there is a whole list extensive list of commands that we That's available and the oldies like here open line is mapped to control Not not every command is mapped to a key Not everything is also available on the menu. So this is basically how you would navigate that so for stuff like the refactoring commands, for example They're all CLJR and CLJR namespace and you can see these are the list of refactoring commands, too Yeah, the nice stuff which are also somewhat broken because I haven't done closure development in a while So slam-ham is an excellent tool for those who don't know it Yeah, so slam-ham Should be familiar to William Gibson fans. Um slam-ham does the the So if you have I mean It was in the IntelliJ demo right where you have let's say like you start using a function. It's not really important in your namespace So slam-ham would basically try to find it and then would suggest the imports at a point of time So there is integration for that into emacs also a bit if the slam-ham It comes in two parts one is a command line tool and the other one is the emacs integration The command line tool works great the emacs integration keeps breaking because of the way it tries to tie in with the sider But the command line tool I recommend it. I think it works with them as well. I don't know what other integration it has Deepugger I wanted to show the debugger. I don't think anybody I showed closure debugging yet So that would be nice. Let me see what I can debug here Service So Yeah, that's because That's probably the reason why everything is busted right now, but that's because I did an update on one side without the other So sider comes in two parts the emacs side Which is written in the emacs list and then the n-reql side which is a plug-in for for line and is a plug-in for Boots as well. Anybody using boot actually Nobody nobody uses good. It looks like the greatest thing ever, you know, it's it's like yeah But the problem for me if a boot is set it's just start line You can just in it create a project and it's just right out of box boot is Okay, you start with a blank file now. What um, I'm really not getting this Let's see whether that works Okay Okay Yeah, I mean it ran by the the instrumentation the debug instrumentation didn't take Okay, sorry, you know debug them up. Unfortunately, my sider n-reql session is busted Okay, I think I've covered everything I want to imagine projectile Part of it was your refactor. Yep. Okay Oh, yeah Yeah, which I don't even remember which library I use for that anymore, it's it's another it's not part of my standard closure Configuration What you're seeing here, for example, the lambda that shows up from Even in Emax list, but yeah, I could get the same in here. If I do a fun Function also get that No, it doesn't so same that I can I mean it's for here if I back up you start seeing that I can actually go through Yeah It's it's it's yeah, it's just say a visual representation similar to the new lines and whatever else is If it's that same it's a library that actually it can if I there's several levels to it You can turn it on just for these lambdas you can actually turn it on for stuff like Equality symbols of this if I turn it on to a higher level it will actually convert this to the fancy whatever Yeah, the math symbol and all that so it actually looks very nice in certain languages Haskell it looks really nice and Haskell Doesn't I mean for full list and all that is usually the lambdas that show up Looks very nice in JavaScript to if you if you have a certain style of JavaScript Let me see what else Company more completions I showed that okay, I think that's all I have All right, thanks guys