Org-mode, literate programming in Emacs



so welcome to this presentation which I called or mode literate programming Emax and this is a recording of a talk I had the other week and I would just start by saying that I'm using Emacs version 27 and I'm using a configuration called doom and it's available when github it's an Emacs configuration for the stubborn Martian Beamer so it has a lot of support for for evil and the usage of VI emulation in Emacs so the in case I've mentioned any key bindings some of them might be native Emacs key bindings some of them could be VI just Reno and actually odd mode was the the thing that brought me to Emacs and I started using it advanced note-taking program so hopefully we will see why but if you're not familiar with Emacs I would start to say that Emacs has these different modes and some of them are called major modes so if you open a C++ file for example there will be the C++ mode which kicks them provides you with the syntax highlighting or completion statements etc and or move them naturally yes activate it when you open work files so work files are these special files and I thought book starts by looking at the content of one of these files so here I have the content of an order filed and in the right bottom corner you will see fundamental that indicates that I mean fundamental mode and now I'm actually just just seeing plain text here because that's that's what an org file is and we're using these asterisks to signal that this is a heading we can include links to to decide at least like this weekend on a numbered list tables etc and the fact that it's plain text makes it very easy to work with it's easy to grab for content or open it in another editor or your version control for example so so this is the this is what it actually is but I will activate all the holder and now I've got everything got folded here so here's the top heading I press shift and it will expand press shift again and we'll close the D content like this then move to the to the link I'll press ENTER and it will open up linkie browser here go back the subheading there's list press meta answer I turn my turn next one meta answer again over some new maybe I want to add another heading you know I press control enter this gives me a new heading I can press tab to denote the adding shift to either a table containing some text so time heading the mom's heading shift time adding promotes hanging content there you know I think we got too long again but of course email solstice for us so it's just tab and will correct the the table for us enter sweet we can move to the top here these guys the Emax and one more here that's tags tagging headings could be can be useful for fine or filtering content later I can change this heading to to do and now I think I've gone through like the basics here I mean one thing to know is that the org movement is massive it's really this huge universe of possibilities so these are your summary and rudimentary basics that that you can do but now when I have this to do adding I can just press enter and it will mark it as done and I will get a timestamp to where I closed it this is nice if we now look at the mode line at the bottom here we can see the number 978 and then there's this symbol with two arrows pointing inwards and that indicates that I've actually narrowed the content of this file called live presentation of org so we're not seeing the whole buffer here I can use the command item and here's the presentation as it was there all along but I was hiding it and that's not a great feature because makes it much easier to focus you know I say yeah let's go to the next one versus a literate program and obviously it's now yeah so now sub-tree control xns so here's little programming and I will start by saying that there's a lot of great content out there a lot of good ideas to watch on YouTube for example so I'm really inspired by the work of Howard Abrams I like the presentation of normo by harris warts mike Szymanski's video series or the Emacs rock video series as well as your some of the interesting content out there but I think it's always interesting to see other people's workflows and the usage of this tool because it's it's really massive I mean sometimes it's in axis mention as a text editor and that's a huge understatement I mean it transcends what a text editor is it's I think some are calling it almost like a list machine and these machines were popular computers back in the eighties where they were completely hackable so you could hack the operating system while I was running and everything everything was built on Lisp now it's not fully that but he's much closer to that for me than a text editor and that takes some time to wrap your mind around because I wasn't used to thinking about a tool like this so it's more like this massive programming environment where everything is programmable so hopefully you will find this some finds I mean new inspiration from this presentation but if you focus on literate programming this is for me the great thing is that you can you can mix code and regular text so it makes it very easy to like if you do something for the first time just you know document what commands you're using and what they're actually doing or if you're digging into like some programming construct or or an algorithm you can can have blocks of code and notes associated to it so what makes it possible to bring the context together you can have the code and you can have the notes now in work mode little programming is provided by an extension called Babel so and we can create source code blocks and then us type less than s tab and create these beginning as first and SRC and everything perhaps at a node so before doing terminal now this source code box we can actually specify the language the simplest and I think changed a bit but that's not the only thing here it actually makes this code block executable so if I press ENTER it will actually run these commands and take the output and put it in this result over here so that's really awesome I mean Quranic man automatically get it documented what it did and of course it supports other languages as well so let's look at this please so and that's a at least dialect that's really one of the cool features of Emacs is that is written in any list so I couldn't write some examples out there and run Python supreme but the resource is not and that's because some language is by default it doesn't really there are some there are some settings here that we unset and the default wonderful person is that results will show a value so what we need to do is actually turn around and then we get hello there however this is this is not really showing what print does in Python so instead we can undo this part and I can change this to value and then you get it quick let's take a look at another language like six plus specifies a CPP and of course I need to type some water and I find it more comfortable to write to do in something like there's a we can press control-c and single point and that brings the content up in this pop-up to the buffer and here I will have the crate syntax highlighting and I have that as well but I could have access to to the formatting or snippets if I'd like to use that etc so that's really useful yeah it's all very for example here I got some expected function body off the fraction decorator so it is it's limiting the code for me so that's nice of course we can work with the wind more advanced examples as well we're not only restricted to to something yet a CCS and I know they're so let's have a look at how that could work so here I have the C++ and here pass something an argument flags and here can specify like two paths to see the library hi again I can specify the version that the compiler should use so C dot plus 17 and I'm including some stuff here I again I created matrix and creating a vector multiply the matrix and vector just run this code I get some numbers so what not only it have we support here for it for four simple simple blocks but we can make them quite advanced as well now I will provide in a presentation again and go to the next country this is chaining acoustics this is another important feature to know and that is if if we have this for example can we create a variable called name and we echo the value but let's say we are totally beginner if we really want to document what what happens in different steps we need to split up the code so we can do that we can create a variable and first around that block and then we have some more tapes and the next box unfortunately though the the output is something because this variable minor him that's not set in this block and in these blocks are not connected in any way so that's what's missing here and then enclosed a whole session so that's a head of argument so if you give this block our session and the session name session shall chain the first execute this then moved and we lurk and we can see in background that's we have this system fishin shall chain that need something same and so here's here's the deer running shell obsession she's running there in the background so we can write the new box and execute in the same sort of like environment and we have support for for under languages as well which have these sort of like rebel based like Python which has the ipython so you can start Python and work interactively Sara have some Python code it is create a function called calculate sum and in the next block I want to use this some calling calculate sum over here but I don't have a session command specifically so I need to do that for each block and instead of doing it for each bug I can do using the same terminology here so execute this command throw something warning there that I haven't looked into so that seemed to work I can press ENTER on this block and it can actually call the calculation so this is a really really nice feature for languages which supports this argument or work for shells I mean it comes naturally but that's not this true for all languages so what other things do we have in our toolbox we can do some composing of blocks is that so there is a feature called in a know web so we can take a look at the previous Python example if so I guess the function again and here's the other block the one has changed here is that I've given it a name so this block has the name – calc and that makes it possible for us to reference that block in other blocks another key feature is to enable this know web and here is the syntax – its reference not a block so less than less than PI some job great to anchor it down yeah and that's actually what will happen here is test you will take the decode from the other block and in line it's behind the scenes in this block so pressing enter here will execute now another feature of this which I personally find very cool is that we can actually also mix languages with some some restrictions so we can do something like this so we mix price on and here this code now this block is very similar to to the one out there we're including title calc but when we enter it in the numbers here we are actually calling the illest code now of course these code can be inlined hirako start not run in Python but when we had the trans diseases to the to the name we are not in line in the code that in lining the result of the other block so this block for example evaluates to 74 therefore this one which is a much larger number because here's the sum becomes much bigger than before because we were using the Forex in range 20 before now it's in 74 so that's that's a way to to actually mix languages as well I found it useful sometimes actually otherwise yeah so I'll stop here note-taking well obviously mixing mixing code and you know words it's really great here and this makes also for me at least or more to be a super great tool for for learning for learning new things especially if you're if you're studying a program for example because then you might have might have some man a book that you're following and there might be things that you wanna take notes on examples that you wanna play around with yourself I mean you can learn a lot by like experimented with examples and see what happens it should change something right so it makes it natural for that and I can show you some notes that I've taken so here's our not cool thing in normal I have a link here and that is a link that links me to another another file so when I press enter here it brings me from live presentation another word into a file called hacking notebook and you brought me into this if special form and that because when I was here I actually took and when I store a link and then later reference it it will bring me back to an exact position as well so it brings me back to this section because this is where I took the link so I could for example like evaluate although one thing that I realized was that we were missing one piece of the puzzle here because to really grasp the the notes are missing the context of where I took it if I would have access to the page where a word that has extra context which makes the send the code makes more sense now in in or mode there is a great package so this package called or notor that you can install and here org Noctor has added some metadata for me so it added the path to the to the book an introduction to e list which these notes comes from and since I have that here as a property I can just call it and it opens up the the PDF on the left hand side and my notes on the right hand side so I can I can navigate through the document here and it will go through my notes it will expand and contract the notes on the right hand side as we go through them and I could go here and go somewhere else and say sync to to this location and it synchronizes the the left hand side and said and I can jump between the different headings the left-hand side so that's a great tool for for taking notes just back and the around its presentation in yellow so it's easy to like navigate around I mean if this doesn't matter that the the files are located in different paths we can create links and Link the information together now linking to a specific file that's as informative of course but usually you're interested in like a small section of five so and that's where organic capture can actually be used so in Emacs all functions are globally defined and we can use something called find function so I can jump to order maybe to the insert heading and it takes me to where this is the factor and I maybe I think that this part is interesting the two times here so I want to you know create the notes whether goes to this part so I can open up one capture and specify code snippet now this is a template which I got from Howard Abrams his his excellent blog so two times is way too long in Emacs and I mean that's also one great text control C twice the note is stored but where is restored well it's actually stored in steepest so here's our example of Duff do times and I will have the name of the function where the statement was taken from I'll have the highlight that I did link to the actual source code and press enter here it brings me back to the starting line of maja lighting and you can see that the line 5 3 6 is how about in the dark so that was the end of my highlight now another cool feature of course in in the Maxis that we can just ask Emacs what what the assists so help me with this one do x doesn't back row so you loop a certain number of times okay good to know back to the presentation so we were captured makes it easy to light also automatically create these links extract snippets now for the next next thing I was thinking of an example where we want to document something so we want to know how to build our own doctor image and the first thing we need to do is start the doctor service because here I'm running arch linux and doctor I haven't enabled a strong start start up I mean so I need to I need to start it and I need to have a elevator wants to do it so I will need to use the sudo command and we can do that in sort of a box as well if you specify is pseudo has this now if I execute the block do something if it works on the lab access to the doctor commander and I have now there are no doctors running at the moment about we'll get to that so build an image we'd like to build an image and should should have Python 3 will be a minimal in the Python 3 environments the first thing we need to do is specify something called requirements so there should be some requirements that needs to be installed in these in the story image now having them here is great of course but we will need to specify an actual file on the on the computer which we can use in the in the build step so we could do manual work and copy the content of this block into an actual file etc yeah that's as to manual so we can use another header argument which is called back and we tango we can specify a path the pathway specify here will be will be relative to to the ordinal document so I can open up D read that's the director editor in Emacs so here here we are now the thing is we want to create it inside a folder called docker image now to make that work and I added had an argument here which is M Kentucky and that makes it so that it creates all the necessary directories that is needed to tangle this file enough to take only this this block I first control press control U and then tangled one code block from my present to you okay now T read and hear stiphu right word doc that's the next to complete okay here's the step or the content of doctor file now how many times sure what everything does so I will like to have an example of that it's my cellphone so this content appear I decided to split it it's the first I creates I'm from and specifically that is coffee run and come on now I can create this occupy over here where I used nice to know when simplex data so before you reference these are the blocks and of course no web can be combined with tangled so when I tangle this file their souls becomes this that's perfect then the application is a very simple application so it's just a little Python for loop which prints the value of the loop and inch cells around the docket builder command it's successfully built we can verify we have a talkative magical minimal Python yeah we do I haven't changed it since I built it the first time so I guess that's why it has the timestamp here and now let's execute the minimal Python and as we saw in the doctor took a file it will when we start the doctor will run the command Python followed by a papaya so all right we have an error so the error is due to the invalid syntax and that's because our application was written with Python 2 and we expect that history was Python 3 environment so that's why it doesn't work now it would have cost be easy for us to go back to the home block and make some changes tangle again rebuild and verify let's say we run into some problems that is bigger than this then this moved for just like trying something new becomes a little bit tedious if we need to do it a lot of times right so we want something want something else here right so the first thing I will do is that will create a block which starts the image and keeps it running because it's running in a session so that will be alive start at one and have any output we can verify with dr. PS it's actually running and it seems to be doing that we have mean about passing there and it's called it has the name currently romantic slice strange one now we could actually in Emacs there's something called trap this transparent remote access multiple protocols and and that's a feature that makes it possible for us to is for example edits remotes on edit files on a remote computer and there is a package called docker trend and that makes it possible to actually edit files that is running that exists in a running docker image that sounds like something and that's useful right now so I can use fine file remove everything here then I use a syntax and here's the form yeah we're actually openly and they file that remote we could also do something like this we could spit a window here and opening a shelf it's not a regular show it's a show so you might've heard about the hash of the seashell I mean she sure is really awesome khadeem access something called Isha performance-wise might be lacking when it comes to like having large amount of text output etc but the really cool thing is here that we have access to everything that team access all the functions and everything are recordable from the command line so we can do something like this we could CD and then say that we wanna see the into talk and then we serve and here is all the completes this one and now I'm actually here inside there there's my requirements yeah that's this that's all great but now we're we're focusing on man haul road so how can we make our mounts in with the medaka as well well we can actually just buy deer and use tram pair as well so we're going to say that yes yeah so this block is running remotely in the in the docker image now one thing here the holder is a bit problematic is that I needed to specify the nickname sort of of the image and when I will restart the or start the image later you will get a non nickname so hard coding here might not be the smartest thing so I want like a more general approach to it so for that I wrote some illest code which we have here and that's two functions the talk imagine walking path over here I'm calling dr. path with the name of our image which is minimal person and you won't get me this tramp compliant doctor name I mean the output really looks like what was inside these quotes here – now we'll see another cool feature of of org-mode and of Emax in general and that's the users of helix so we can make a book here which face secession associate evident in directory and then we're actually calling code inside these parentheses now this my doctor path that's the kind of doctor path we saw about but I've installed it on my on my Emacs in my configuration so now I just need to run this it just worked and now I have a running running sessions that other folks can just connect it you know so let's let's solve the the syntax right here it was so I can actually use this function again and provide the image and name and application and you sit inside tangled this is a hopefully a solution untangled and now we have tangle it into the running local image so now we just want to create a another session block which uses the session token' agent and try out our solution now when I originally held this talk there was a great question at the end which was if I would like to create a new block which uses the same session as a previous block can I do that and that's something that I would like to show how that can actually be done because if we look here you can see that it's not that simple cuz right now we're our cursor is the previous block is a Python block and it doesn't have a session so we don't want that block but the doc before that one is a shell dog and it has the session that we were after so we would like to use sort of like the same name as that block so how can we do that again solution used to write some code so here I have a function and what difference does is that a it goes from from where the cursor is moves backwards in the buffer through only source code blocks and once it finds a block that has the decision argument it will return that session name together with the language that it uses so if I execute this block you can see that it finds this previous block Twist was using shell and had a session session document right that's perfect light but it will be really cool if we can actually use it in some kind of snip that way because when we create the block in general we just write less than s I won't take the solution as well for this and the solution registered like this so it will use the less than SS instead and begin associate associate right but really for provides here and most think that languages uses some kind of templating and I mean that can be powerful but it's not as powerful as here in Emacs because in Emacs we can get a snippet that actually embed in code so here we can call my and just by writing like this it will extend and creates a block like we want so less than SS of course I would need to install a snippet and I've done that before expands to this previous session now any words so now we we know that our code is working in the in the doctor environment that is so now we can safely tangle and give the new image now I have one more example and I've done an example here where we want to do some performance analysis of often algorithm and of course we don't have time to generate actual algorithm and get some real data so how will you synthesize the data and synthesize to here just a minute as well so I have this simple algorithm in mind we just have a 1 dimensional signal we want to track that out we say that we have some algorithm that does that and now we want the true data and we want the estimated data so to do that I'll create this sort of block which contains Emacs Lisp code and I'll specify that the helpful result should be put in a table so the first called meager that contains the true value the second one is the estimated it's it's following but it's very bit off but looking at the table here don't really mean the squad numbers and if I go back later I might like wonder okay but which data was what so can I improve that well I can break its other block here so that's also you max this build and I go to my previous one at a post argument and then I reference my new adder block and pass this in a post command will run after the cool puppies evaluated but before the results are actually printed so it will take you out with from this block and go back down here and it will add a horizontal line and add the label to if an estimate and a horizontal line and Danny will come back so running it will show me that's much better I'll also estimate all right looking at the data this way I mean it makes sense but I also find it very useful to be sure I said of course so I don't know how to do that in Exodus but I don't and I do know how to do that in Python so I can use this block here I create a variable called data which has the value of T table as the truth table now the results here will be a farm so if R on this the output is a broken link comes read as open D read I'm missing the folder I'm trying to write it so just execute it and the image is transferred back YouTube into our buffer here which is pretty close now I can do something else as well I could for example use that so that's this is great I mean have we 10 we can use the power of other languages to visualize what we want here i well i ever tried to make some kind of a table a year we read the data and we saw earlier in the beginning of the presentation that tables are pretty awesome at least it has this also feature of auto adjusting the boundaries but it has also the possibility to table formulas so by pressing ctrl c and c a quote we bring up this field and range for winners pop up and first one we see here it takes the data from the remote remote table as tooth data and copies it over here same goes for estimate error however and calculates the the first column – the second one this same taxes called emails calc syntax and this block however uses Emacs Lisp code so here we're calling the ABS function the it is absent and the – function so that is the absolute error this one uses against and illest codes you calculate the length of list here so it gets us number values then I want to calculate the mean error and for some reason I'm referring to something called me so what's that so here I have an electrical box column beam and that's the calculations which is a mean value the returns it so here we can actually call another block to make that work perform a calculation for us now I also calculate the or MSE I would mean square and use this is a box with Python code and using numpy and if I go back to the table formula press control-c twice and it actually performs all the calculations and gets me narrow and I see another thing which is seriously cool so it's yeah you can really do a lot of things with these these tables I have actually no idea that they were that powerful now I would like to describe the flow that we have had here in our investigation so far that I will be using thank you well and I collect we evaluate this block of Pangea barcode and we'll get this image back so it describes how we firstly synthesize the data with Emacs Lisp and then improve this results with the post command we use Python to slice the data we process the data through our table formulas which uses email elese the Emacs calc and old blocks and we initialize the flow we plant you now that's really nice caption now I mentioned that there was something called Emacs calc and at first I just thought that I'll just simple like that windows calculator or something of course I was wrong turned out to be much more powerful so we can do some not only can we use it in in formulas in tables but we can also use a source of course because threes one some reason the default seems to be degrees since the freedoms for business setting somewhere what about equation yeah and simplifying actually the equation there but what we actually can do is to solve it so we can call F with respect to X and then we get to matter X it'll also take an equation like the square root of x this with regards to this it makes an abbreviation this is what I found fascinating with Oakland it's like how how easy it is to like what if this is true so can I do this and then usually you can wear if you can't you can write some Emacs Lisp code that it makes you it makes it possible so my my fault when I saw this was that okay but if if that is actually possible then I should be able to create a table long signal a table okay like this and I should be able to survive it to calculate the derivatives so I could say that you know the second color should be the derivative of 2x it just makes it so common somewhere that the Emacs calc is really a formal mathematical probably that's a more accurate description rather that but it's the Emacs equivalent to two windows calculator but now I have a well a lot of things here and it would be really nice if we could could share the results you know with with others and unfortunately we live in a world where not everybody has a world so we would need some kind of other documenter shadow right you what could you look smart down it's easy to export org to march down but again that's a bit limited so what lots for for PDF Excel and PDF and that's nice but this is a bit technical so ideally it would be using PDF right so that's what I want and I would use here we have some command call or ability to export to PDF or or upon or export to Matic PF right and a PDF was produced can watch it here yeah yes however there is something that that haunted me when I was sleeping through those commands yeah there is panic version as well and there was a pen operation that had and opened and that's really what I want I mean I want to create PDF and have it automatically opened or at least had the option to it so let's see through that and I don't want to export this one I will do so here I've written some tea like this but it's um it's a function called Orlick export to PDF and open which is what I want and it figures out the the file name and cause the whole attic export yes and then opens the mp4 what I need to do to be able to use this in my Emacs now is to evaluate this function and now it becomes part of this running list machine as we have here oh it's here I run it and I guess the outputs so here we have the performance analysis we have the cold if we use the under-18 data it has simplex highlighting more color we see looks highlighting there's a table it's our tracking performance the bother our flow there's something examples off of town our table over there yeah of course you can you can do some tweaking of the these things to get the results they basically know if you want like take questions we can just write them in plain plain text here export him there will be correctly formatted in the PDF summary yeah and for the summary I think it's a good opportunity to show that we can if we can go beyond org as well for for our presentation to this one so order meat export to HTML and browse will take that part of my document and create HTML presentation so here's the summary of what we have seen or mode a major program I think one of the things here that we've seen is context so or mode and Emacs makes it easy to bring everything into context you can have nodes together with your PDF files together with the code you can have links that makes it easiest transition to other files and actually are not located nearby on the computer but logical sense and it also makes documentation easy because you know documenting the steps that you take for example well maybe a darker image we don't need to have that much extra work in order to actually have something that makes our repeatable and these for ourselves maybe we'll add some more notes to describe it for others but that's easy to do means use text and another great feature here that we've seen is that old mode is part of Emacs and Emacs is really this tool which is not only something that works for you what's wrong around can you make it work for you so if there is something that we don't like or a song feature that we are lacking I can just you know easily extend it we write some more Emacs Lisp code and that's just super easy to install into into a running session you know and then of course exporting features so this really makes it easy for you as a user to attend a flight not needed to use as many as many applications or we can remove some of that this restructure these limitations so and there the concert great benefits of tying things together because of the context you know as we can just explore you to marked PDF or HTML etc super useful yeah so that was all thanks for listening I only got one more thing to show you though so let's go back to the presentation there was something at the end of the picture the insurance' and that's blogging so let's turn something of what we have made international blog post so I'll go through this link into my Emacs based God and what we'll do is start firefox and here's actually the content of 50 or more files yes they will move out here's statically and generated website so let's look at how we can actually create a new blog post so I would like to generate a new entry which will show how to Emacs attack with Emacs should be unique oh wow did you see that I saved and it popped up here so here is you got the tags the Emax nice and just text save pops up there and then the code that I wrote and now it's exported here and we got cold block syntax highlighting showcasing the so that's nice and actually I need to do is I need to mark this one is to do and then we need to just spam and then it will be treated as Melissa draught which it would be if it had the the to do island but when it's done it will get this time stamp it will get yeah he considered an action post driver it's not on the actual site yet because I'm running this localhost here push it so era was using Manjit another great feature of Emax super easy to work with get their customers now if I look here I have Sanskrit of the glory if this works I should be able to see I would have expected it to show out take some time still and there it is it's a blog post automatically open PDF on exports perfect citation that's it thanks for watching

15 thoughts on “Org-mode, literate programming in Emacs”

  1. Hey Niklas! Great video. I've been using orgmode for a while but decided to install doom because of your video :).

    I had a question for you. I noticed the default shortcuts for orgmode don't work on doom. For example, alt+enter does not create a new bullet point. Do you mind telling me how I can set these keybinds to default?

    Thanks in advance.

  2. Thanks for the great post Niklas! It would be very nice if you do something like that for writing code in elisp. Good tutorials on elisp almost don't exist on YouTube.

  3. This is great presentation for Emacs and Doom. I'm using Emacs org mode as my note taking,but the result is not even close to what you've shown here. I really enjoyed this video. However, if you had possibility to create this presentation as developing detailed video or even online course with all .init and .el setting plus key stroking on screen would be rock! 🙂

  4. Note that the easy template expansion has changed in the latest emacs https://emacs.stackexchange.com/questions/40571/how-to-set-a-short-cut-for-begin-src-end-src. "<s" is now "C-c C-, s"

  5. Increadible presentation, really open up my eyes for literate programming and org-mode! Going to dive into it now. I would love to see more content!

  6. i actually can not believe how I was fortunate enough to find that video, content seems to be what I unconsciously was looking for to doing with emacs but was not sure it was possible so I had almost forgotten I was looking for it…crazy

  7. Hi Niklas,

    Thank you and what a great presentation! I've been using emacs and doom for a while now, yet I didn't knew quite a bit of what's shown here. As for the presentation, one thing I noticed is that the keyboard clicks are very prominent when listening over headphones/earphones (Nice keyboard btw :).

    Also, if I may ask, it would be great to have a presentation about doom itself. You seem to have a good understanding of it's design and on how to extend it. It would be of great help for me and hopefully for others who wants to start using doom.

    Thanks again and have a great day.

  8. Wonderful presentation! I would love to be able to give similar live demos in emacs. How did you pull in your examples into the buffer while giving the presentation without having to type everything?

  9. Hi Niklas,

    Very thorough and informative org-babel demonstration.

    Could you please let me know what tiling manager do you use.
    I am particularly interested in the RUN command popup @ 1:17:36.

    Also what package do you use for static html generation for the blog.

    Thanks

  10. Wow ! Such an impressive demo ! Few questions :
    1. How do you get syntax highlighting while exporting to pdf ?
    2. How did you configure Eshell to recognize git repositories ? "[master]"
    3. You seems to use an extension like "Tridactyl' or "Vimperator" in your web browser, is it correct ? Which web browser is it ? (If it's firefox I wonder how to hide tab and address bars ! 😉 )
    Thank you very much !

    Hope to see other video like this (managing mails for instance) 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *