Emacs Org-mode - a system for note-taking and project planning

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments

"A system for note-taking and project planning" undersells it. Org-mode is the gateway drug for a lot of new Emacs users. Org-mode is the killer feature.

Org-mode is a way of life.

👍︎︎ 10 👤︎︎ u/WallyMetropolis 📅︎︎ Aug 24 2016 🗫︎ replies

This was the talk that convinced me to try Org Mode and Emacs again, after several failed attempts through the years. There must have been a perfect storm of package maturity on OS X and availability of the right kinds of documentation, but it stuck, and I switched away from Vim after 16 years and now use Emacs daily.

With Evil Mode, of course. When people at work see me using Org Mode (which I use to organize and document everything), they get the same look on their faces that people would when they saw me use Vim. That expression of "is this magic?" and "but magic isn't real..."

👍︎︎ 4 👤︎︎ u/bakuretsu 📅︎︎ Aug 25 2016 🗫︎ replies

It's an incredible project. Extremely wide ranging and powerful; if embraced it can be useful in an extraordinary range of circumstances.

Without wanting to damage the project, does it really make sense for something this diverse to be included in core emacs? Wouldn't it be easier to maintain emacs with many more things stripped out and available as community maintained add-on packages, especially now we have sane package management and installation etc. It would also make development of org-mode easier if contributors didn't have to abide by FSF rules concerning signing rights etc.

👍︎︎ 2 👤︎︎ u/Merops7 📅︎︎ Aug 25 2016 🗫︎ replies

I used emacs for about 20 years mainly as a LaTeX editor (with auctex and reftex) and not once did I ever use org-mode. I've used lots of other features - dired was a big one. I briefly looked at org-mode a while back, but I couldn't see any killer feature adaptable to my work flow.

👍︎︎ 2 👤︎︎ u/amca01 📅︎︎ Aug 25 2016 🗫︎ replies
Captions
>> RAMAN: Thank you for coming everyone. I'm happy to introduce Carsten Dominik, the author of Org-mode for Emacs. Org-mode actually means a lot of things to a lot of people. You can use it as a very nice getting things done day planner/organizer, which is what a lot of us on our internal Emacs users' lists have talked about it. Now Org-mode also has another interesting aspect to it which is ease of authoring. Take it from me, I'm someone who's authored markup LaTeX html by hand for the last 15 years. The last three years after I discovered Org-mode, I've stopped writing html by hand. That should actually tell you something. So, without taking any more of Carsten's time, so that we get the best of his time here, I'll hand it over to you Carsten and take it away. Thank you. >> DOMINIK: Yeah, thank you very much Raman for this nice introduction and I'm, of course, very happy to be here and to introduce to you my Org-mode package and tell you the--a few technical things about it and I'll also give a short introduction to the package itself. I would like to start asking by are there any people are not Emacs users sitting here? And are there any people who have not use Org-mode before and just--are just here to find out about--okay that's actually very good, so. It will make sense to have a bit introduction. Well, Emacs Org-mode is a package which I started writing in 2003, it's an open sourced project which is also now part of Emacs. Since Emacs 22, it's part of Emacs, and so distributed to [INDISTINCT] Emacs. So, there's a webpage here if you want to get the latest version you can grab from this--from this site and find lots of other--other information. But first of all, working with text files in the--in the 3rd millennium, do we still do this? Why--well, does it still make sense to work with text files for example organizing your stuff, for writing little things? And of course we are not all Raman who really has a big advantage of using text files, but there are many other [INDISTINCT] but I still think that text files are the only truly portable format for files so it can write things down and read it anywhere, read it on a small device, read it on a big device, on any computer; Linux, Windows, on a Macintosh, whatever. You can read it truly anywhere, that data will never get lost. So, 20 years from now, you will still be able to read these files which you wrote. You can, of course, use grep and other UNIX tools to process such files, to search through them. Or you can use something like perl or python to just run through them, extract information which you would like to have and do that. Another interesting thing is that it's very easy to get a history if you use a version control system on these text files, you can always go back, look at what the exact state of these files was in an earlier time have very little diff--yeah, I'll put off the diff programs to exactly see what has changed and when it has changed, things like this. And another thing which I've only found out recently is that you can actually use version control system with text files to do synchronization. So, I actually have my old files on a couple of different computers at home and on my laptop and on my work computer, and I just use a git repository to just push back and forth and pull to--in order to synchronize. So, for a small set up, that actually really works well. Another reason to use these kind of files. Okay. The idea for writing Org-mode started really from--from a moment when I decided I had to organize my notes better, because I had been--I'm an astronomer, I work at a university, and I sit in meetings all the time, I have to make notes and write things down. And so the idea was--I wanted to organize my notes and I wanted to organize what I had to do. And one problem was basically all the getting things done and [INDISTINCT] and similar tools around. One form I see is that they really put a task, it's essential item of these programs. And for me this is not necessarily the right approach because for me if I start a new project, if I discuss with people, everything actually starts with notes. So you have brainstorming, you make some notes, you put these notes into an outline [INDISTINCT] then you organize them, and think about them over--think them over. And in this process, what happens is that a tasks develop, so the task then, come to be. And I think it's the most natural thing to actually--in your notes file, mark a line and say, "Well, this is actually a task, somebody has to act on this. This is something that has to be done." And so the idea is to have a notes file where note taking really is a fundamental action. So you write--in a text file you write everything you think about, every--all ideas which you have, everything you might want to do. And then you just mark in their place what you think is a task that should done at some point. And so I really wanted to avoid separate tools for notes and planning because I think it's stupid to go just back and forth between two programs just do to these two basic tasks. The other thing is, of course, once you have done a task, you actually have to make a note in your notes file to say, "Well, okay this is done. Let's move on to the next thing." So it really makes you move back and forth, and I don't think that's a useful way of dealing with things. That was the idea, to start Org-mode. Well, I'm an Emacs user and--so most Emacs users really love to live in Emacs and really don't want to leave it, so am I. So I decided--I wanted to start with Outline-Mode. Also, I think, outlines are really great way to organize your thoughts because you can have categories and then go to the small details in a very nice way. You can really organize your thoughts. Outlines is a good representation of how humans think, I think, so that works really well. However the Emacs Outline-Mode, I don't know if anyone of you has ever used it, I think it's really broken. It's just a disaster. Technically, it works internally, so it has actually a nice implementation. The old implementation was really bad, was just basically replacing all the new lines with the--with the... >> [INDISTINCT] >> DOMINIK: Yes. And the control r and then just hiding the text of the new implementation internally [INDISTINCT] is much better, much easier to program. But there's two problems with it. So this is one of those Emacs outlines. [INDISTINCT] see each outline note has one star or two stars or three stars in front of it, and then you can just put some text below all of these headings, that's--that's how it works. And this works reasonably well if you write a book, so if each of these headlines is some section title also. But if you also want to use this for--in a more list like approach, this is really much harder to read that an ordinary outline where you have proper indentation. So the first thing that I tried to change was making these outlines more readable in a way that we actually--we still actually keep the stars here in order to mark things which are an outline note, but they are hidden and they are just actually--they get a font which--a face which is invisible or almost invisible in this case, you can still see the little shadow. And yes, so proper indentation and now this outline actually is much more a normal outline, this structure. Okay, so that looks better, you can do list with this, but the place where Outline-Mode really is broken, is the user interface. So these are the commands which you use to operate Outline-Mode and it's just a list of--I think, it's twelve commands. Each of these commands has two different--has two keys which you have to press--the letters which have been chosen are pretty bad so I never was able to remember what these commands are. And I just said it's really--I just thought it's really ridiculous to be able--to have to remember all these commands only in order to fold my outline. If you take another outline program like [INDISTINCT] for example, basically all you do is really open and close a note, and then you can dig into this outline. That's nice. It's also nice to have a command to really see everything [INDISTINCT] but that's all you need. You don't need all these complicated other programs, other commands do this. And so the next step that was happening while I was writing Org-mode was [INDISTINCT] compress this entire outline functionality into one or maybe two commands. And the process of which you use now to dig into an outline I call "cycling"--visibility cycling. So there's really only two actions. One is cycle the visibility of a subtree and then there's another command, cycle the visibility of the global outline, really, everything. And so if you now look at it, it'll--outline here, this is basically--the outline is totally folded down now to the top level headings, and now we use these keys in order to cycle tools, so I'm going to press three times tab and then I'm going to press three times shift tab to just cycle [INDISTINCT] so this is the first one. If you have--the [INDISTINCT] on this first headline. So, with one tab, you get just the direct children of this--of this [INDISTINCT] and if you want, you can now move the cursor down here and dig deeper, or you can stay on that headline and press that same key again, and then you just get the entire subtree folded open, [INDISTINCT] all the text and--below it. That's it. You press it a third time and you are back to the folded state. So it's really on top of--it's very fast, you just [INDISTINCT] if you use the global cycling, one of the first step actually gets you to something which looks like a table of contents. So it shows you all the headings but all the text below any headings is hidden. And then the next time you press it, you just see the entire file, everything is shown. And the third time, you just go back to this initial thing. It's really all you need, and it makes it much easier to [INDISTINCT] to remember these commands, and so I think that already helps a lot. The next thing which is important, if you use an outline to organize your though, is that you need to be able to restructure it because an outline starts as a brainstorming process. You just sit down, you [INDISTINCT] everything you can think of into that outline and in the end you will want to organize it in a--to sort of--it makes more sense that you can derive the actions from this. So you need to evenly--easily--to be able to do this. And then Org-mode you do this by just holding down the Meta or Meta and shift keys and then you just use the cursor keys. So, if you press up then the entry is moving up, it's going to be swapped with the entry above it, with the sibling above it. If you move it--move it down, it will move down, and you can promote and demote. And that's simpler than any outline program I know, in order to restructure these things. And that's basically already the setup which you need for a note taking application. And then there's lots of little tiny helpful things inside Org-mode which makes it really easy to write notes. So, one thing of course, it improves greatly the standard text- and outline-modes. I don't use text-mode anymore. Org-mode is my fundamental mode, my standard mode, so any file which doesn't have a specified mode will be an Org-mode, just because it's a nice and easy text-mode. There's support for editing unordered and ordered lists, so not outline notes but just internally you can have a list with numbers, you can read it easily, edit them. There's a big part which is hyperlinks, so can link inside the document for one headline to the next or something like this. And you can also link internally, so for example, if you are working in an email or in an [INDISTINCT] in gnus, you can easily create a link to that message and put it into your Org file which will be a clickable link. If you click it, you are taken back into gnus to exactly use that message. And it works for all the Emacs mail programs I know of. It works for the Big Brother's Database, for gnus, links to files, webpages, to ERC, unix man pages, info pages, and it's extensibles. So, if you have anything else you would like to link to, that's easily done. For external--so, for html for example, it will fire up your browser and to make you look at it, the file. Then there is a plain-text table editor and spreadsheet, I'm going to say a little bit more about this. This is sort of my favorite tag in the whole program. I had the most fun writing this. Another interesting thing which I'm not sure how much that it's interesting for people but it is for where I come from, I come from a university, we have to write lots of scientific texts with lots of formula, and creations and everything. And so note taking with the computer is really a pain unless you can use something like LaTeX which is a type setting system that is used by many mathematical and--other scientific journals. And Org-mode actually makes it very easy to write LaTeX, actually in a very sloppy way. You don't have to put in all the math markers, you can basically very easily just write little snippets, you just write [INDISTINCT] in order to mean the Greek letter alpha and everything, that's an easy way to type. And then you can transform this later to PDF file and print your notes in a nice and pretty way. So, that's--that's what you need for note taking application and that's what Org-mode gives you. >> RAMAN: So for the record, table-mode was what finally made me switch from writing HTML by hand to using Org-mode. >> DOMINIK: Yes. Tables--writing tables by--in HTML is a--is a mess. By the way, [INDISTINCT] any question, any time. I mean, I don't need to go through this talk without questions. We can have the questions during the talk. Okay, and then the--then the next step is what I hinted to earlier. Now you are in your notes files, you have written down note, you have started to organize it. Now you can identify task--tasks and then happens by over laying Meta data over this outline. So, here's just a section from a buffer where I have put in all the possibilities for Meta data in this. So, the first one is what we call the TODO keyword, it's just a keyword, the first keyword in a headline. And in a normal task--in a normal GTD application, this would be basically a checkbox. You can check it off once it's done. In Org-mode, it's actually a little word and that means you can have multiple states. So, many people, you only use TODO or done so that's a checkbox on off but again also [INDISTINCT] states for example, you can say waiting and that will indicate that you are waiting for the reply from somebody else before you can continue working on it. It means you have already started working on it but now you are waiting. Or you can say cancel, that means you haven't done this but you don't actually want to do it, you just cancel it. So, this is a single word which can have one of many states, and you are completely free to define what kind of states you want to use here. The next one is a priority cookie--I actually never use this myself, I never really understood the purpose of priorities but since everybody wants priorities I put it in. But I actually never use it myself because and--I think you spend more time assigning priorities than it's really worth--worthwhile, the sorting you get from it. Okay, the next one is tag text so at [INDISTINCT] at the end of [INDISTINCT] line, you get a number of strings separated by colons and you are completely fine to define what this means. So if you are working in a GTD environment this might be context, for example, at computer, at phone, at home, the usual GTD context. But you can also use names or, yeah, I've used fry--buy--something I want to buy and I want to buy that fries, so I put it here, and this is something for work, so you can just put a number of tags and it's later useful to find these things back. Then you can have time planning information and that's asked by a little keyword. Anywhere in this entry, you are free to put it wherever you want, usually it's the first line after that headline. And so, there you can have DEADLINE that means you define the deadline, you can have SCHEDULE that means you want to work on this on a certain date, it can be CLOSE and it will indicate when this actually was finished, this item. So next, it is a time stamp, here just a time indication or of the date. And then we have PROPERTIES, which is just a little drawer which starts with the word PROPERTIES and ends with END, and in between you can have keyword, [INDISTINCT] pairs as many as you want, freely defined. The Meta Data in a--it--remember that we are working in an outline. So, this is a Hierarchical Document and that means it makes sense to talk about Meta Data in a hierarchical way, and Org-mode [INDISTINCT] in two ways. So, there's downward propagation and that's just a different word for inheritance. So if you assign a tag to some outline level, then all the children can inherit this tag. You can also configure it to not do so but by [INDISTINCT] it will--all the children will inherit the tag. And also the same works with properties, properties can also be inherited down into a tag. And there is also upward propagation for properties, so you can have properties being the sum of all the children's values of the same property. In order to set Meta data and to edit it and to change it, Org has a--Org-mode has a couple of special interfaces which are designed to be really fast, so, that you can do with very few keys, you can actually change all this Meta data. There's a couple of these interfaces. I'm mentioning a few here. There's actually a few more that what is--for example, there's a one key per tag interface. So if you--if you switch on the tag interface you can toggle [INDISTINCT] with a single key per tag. So, that goes really fast. There's of course completion, Emacs would not be Emacs without completions, so whenever it's useful to complete [INDISTINCT] that you complete. For example, I you type a tag name, it will give you completion on all the tags in file and in any other circumstances as well. There's also a date--date/time reading function and I would like to challenge you to show me one way you can actually enter faster a date or a time. This is really I think the fastest and easiest way to specify a date and a time, what we have implemented here in Org-mode. And then we have a column view which is a fast tabular way to--in order to edit Meta data. So, just to show you the data/time interface, what happens whenever you have to enter a date and time, there's a little calendar which you--which is put up that you can click but you can also very easily use the keyboard, control this calendar, and just jump to a different date. And you can type something like this here which is +2Sun 2pm and that means two Sundays from now at 2 PM. So, it's just a very short way, if you're a fast typer and then you get the state, insert it. And that you can use for setting deadlines and for scheduling items and things like this. And here's the other interface I wanted to show, that's the column view, so you have an outline with a top level and then top level things, which are a couple of to do items and below these items, you may have property drawers. You don't see them right now, they are hidden, but they may be there. And if you want to edit many of these properties in an organized way, then you just switch to column view and that gives you a little table of--but you see the outline structure of this entire file but then as table columns you get all these different properties, like the text or the TODO state priority and these are properties which are define further down. You can then easily edit them from this view. So, if you, for example, have used only outliner I think that's like the column view and on the outliner, it's a similar concept. And you can also then see numbers which aren't being edit up here, it also works in the column view. Okay, these are the special interfaces. Well, then the next step is--one important part if you try to organize the tasks which you have to do, is that you have an easy way to capture, that's a very important part of--part of getting things done of--anyway of planning, that you have an easy way to capture. You get a phone call, somebody [INDISTINCT] walks into your office and shows an idea [INDISTINCT] it just pops to your head. You have a fast idea, you want to write it down so that you don't loose it, but you also don't want to be interrupted. It's an--a very important part. And for this we use the remember package by John Wiegley which is designed exactly for this, so it will pop you into a buffer where you can make a note and file it away and put you back into the original environment. So, that's a very nice tool by--which John has written and which we just use. They extended it a little bit because you can actually define a couple of templates so for--for different kinds of notes, for a task--for a task which has to do with an email, for a journal entry, just set up a couple of templates which make it--makes things easier. And the templates can define like a--that it should be a TODO keyword or what kind of a state it should have. It can contain an automatic link. So, if for example, if you make or create a task from a certain source file--source code file [INDISTINCT] and then this little buffer can contain a link to that location and the source code files. If you, for example, notice a [INDISTINCT] which you can't work on now, you just make a link, that you will go back to this and work on it later. And that the template also defines a target location. So, unlike in the original, remember, where everything goes to a single file, you can actually select a couple of files, or a couple of locations in your Org files, where you would like to put the note which you get. So let--let's just say [INDISTINCT] let's assume what happens to me daily, several hours that I'm working on Org-mode and sitting here in my little Emacs lisp buffer and working on something. And then there's an idea for example, I get an email from Raman, he wants me to send the title and the abstract for this talk here. And so my--it's on a Macintosh laptop so my email application is open as well and the message from Raman is [INDISTINCT] one, I select that one. I press at a template and I get a litter buffer which contains a link here. This is a link to that email. When I click this, Apple mail will open and show me that email again and it--I already know what to do. I can fill in some information like what is this about, I can put a deadline and a scheduling timestamp and some more information where I want. I press--I press control C twice and that message is filed away in my inbox, where I'll grab them later, go to deal with it. That's capturing with Remember. It's a very fast and efficient way, I think. Many people actually use this for many different ways. For example, I have people on--or a mailing list who [INDISTINCT]customers often, so we'll get often calls which I then can bill. So what I do is I have a special remember buffer which pops up and immediately starts a clock and when they file away, this remember buffer as a clock is closed and so that time will automatically be billed to that customer. So one of the things I'm actually not going to talk about, that Org-mode has a full clocking system in there. So you can clock all the time which was spent on task and get a table about this, I'm not going to show this in detail but it's available. >> RAMAN: So for the Google audience, another [INDISTINCT] interesting use of remember in Org is when you're doing Google searches. Why, I actually wrote myself templates where--rather than maintaining a web browser [INDISTINCT] you can actually make notes for yourself using remember as your search and build up a very rich file of searches and what you read. It's a very, very nice way of doing it. >> DOMINIK: Okay, That's, I guess, it works best if you use a browser which inside Emacs [INDISTINCT] yes, exactly. >> Why would you not [INDISTINCT] >> DOMINIK: Well, yeah, not everybody does, but yes, of course. Okay, so step number six, we're already at step number six in this development. The next one--the next thing is of course Collects and Display because the problems of course with this approach, we have decided to make a note file and put all the task into notes and they will be widely scattered. It will give us several files with notes, some for projects at home, some for projects at work, notes from certain meeting, and these all will contain little notes that say something is a task which has to be acted upon. And so now, the important task is to actually get these things, fill that out, collected and displayed in a certain way. Yeah, so task can be in special list, they can be [INDISTINCT] scattered over many large files. How to find them? And so Org-mode let's you define queries in a couple of ways and it has two main ideas on how to display these. And these are called Sparse Trees and Agenda View. A Sparse Tree is only for single file and has the idea that you still use the outline tree which you have in that file but--that you hide as much as possible of the contents and only show images. And the direct hierarchy above it so that you still know some context. I'm going to show an example in a minute but it's a very nice way of finding things which are deeply hidden in an outline tree and still have something--some information about the context. And the other possibility is an Agenda View and that's actually a flat projection, so even though all your documents are [INDISTINCT] the documents, this view will actually collect any task or whatever you have selected as your query, and put into a flat list which does not really remember where in the tree it was. So you can have--you have the deep outline you can have on level 25, you can have--define a little task, and that searched will actually pull it out and put it into your flat list of task which you have to do. So, let's take a little example here, [INDISTINCT] a little example file, it's just a single file to make things easy. You have some home task like clean the garage, I only picked this because David Allen always cleans his garage when he talks about getting things done. You have some work tasks, for example, prepare Google Tech Talk, of course you can define if this is work or not, let's call it work. Then I have--I have a list where I collect ideas for presents. If I want to gift something, a person, and I have an idea, I put it in that list so that--so that I don't forget. And some media, for example some books I want to read, some DVDs I want to watch, things like this, this is what you can put on here. And then you can just start your searches. For example you can make a sparse tree looking for buy. This is for the--for the tag buy and then this whole file looks like this, you see in home and in work as every thing is folded down. But in ideas for presents for my kids there I actually see little things which I want to buy. So, this is a list which you can take with you when you go shopping next time. And also there's a book on there that also shows up. Well, then you can go to the Agenda View, this is what we call the daily or weekly agenda. This is a weekly agenda where there are seven days. This plate for the current day, there's actually a little time [INDISTINCT] and then you have a schedule of my work of--actually there's a waiting tasks which means I have to make a phone call in order to get the garbage container to clean my garage. It's basically listed--listed in here. And then there's also the other task that I have to do something, I have to build--build [INDISTINCT] there's a deadline in 19 days coming up. So, it's just a pre warning that you have to get started about this because it's only 19 days from now. And then of course here on Tuesday there will be the Google Tech Talk it's also in this table. So, this is just a daily--the weekly agenda you can also focus in on the just on the day, that's only limited to a single day. And then you can move forward quickly from day to day, it's just like a normal calendar. The other Agenda Views actually look at--search for something, for example here's a search for all the TODO keywords so all the task which are not done in that list are now collected here. So, there's this waiting task and then there's also the TODO task which I just [INDISTINCT] all you can do is search for all task with buy and now with in this flat list, it's no longer in this outline but it's in the flat list, they just see all the things which--which you wanted to buy. and you can just--and the Agenda View allows you to work from the agenda so if you--let's say you start working on this, you actually go ahead and buy a small tent for hiking or something like this. Then you can actually tic the task off from this list. So, you don't have to go back to the original buffer where it is. You just say here it's done and then it will be change here in this list and also back ends the original file. Okay, that's basically what I wanted to say about this [INDISTINCT] and not a big area of [INDISTINCT] I'm not going to talk too much about today is exporting and publishing. So, you can export and publish all the content of an Org-mode file as HTML and as LaTeX. These are the both--the main back ends which we have implemented right now. So, LaTeX is a gateway to PDF, that make a nice, pretty scientific documents. HTML, and among other things we have--we have some JavaScript support in there which actually gives you a very nice way of--read a large document on the web. It's very much Emacs Info. So, if you work in Emacs and you have the info documentation where you can just--by pressing single case--single keys, zip through the entire info documentation in a very fast way, this JavaScript actually, it does something like this for working in a web browser. It's a very nice thing written by Sebastian [INDISTINCT] one of the people who help me with this kind of stuff because I have no clue about JavaScript. But you can look at an example [INDISTINCT] the file of changes you can try this out if you want. LaTeX [INDISTINCT] is also an ASCII back end which is just basically takes the Org-mode file which already is pretty readable but make it even more readable so that it's very nice to send an email, or send to people. It's just a very straight and easy look of that thing. And you can also define whole projects, a publishing project where you link any number of Org files and then just publish this at the whole--as a whole website in the linked pages. It's a sub--a subsystem of Org-mode, which works like this. Okay? Then I wanted to talk a little bit about a few tricks which you can do with Org-mode and which are a lot of fun. And one thing is there's a table editor in there. Of course, editing tables in ASCII is normally a big hassle because after each letter you have changed, you have to change all the rearrangements and things like this. In Org-mode you basically can start writing a table by just writing--starting the line with a vertical bar--with a vertical bar. That character means this is part of a table. And then you just write the different fields and when you press stop you actually in--in a little table. There's a separator line here and then you can just go in and fill in all these different fields. And so, if you start writing a name, for example Pete, it's actually Peter which I want to type here, so until here it fits. And one of the interesting things already that--Org actually doesn't shift these out while it writes Pete. So, it actually automatically switches to an overwrite mode while in a table field. And I'm going to say a little bit more about this later. It's a context dependent behavior of keys, and actually Org makes--Org makes extensive use of this idea for many--for many of its features. So, if I type the R now, of course then the rest of the line will be pushed out because it has to be spaced. But next time you press tabulate in order to move into the next field, the table will be fixed and it will look nice again. And then you can just go ahead, just fill it in and put in a couple of people, put in their phone numbers, room numbers, anything like this. And for example, you will notice that the room numbers here are aligned to the right hand side, so it automatically--automatically checks if it's--if it's a column where there are mostly numbers, it would just right align it. If it's mostly words, it will left align it. So just these little things make it easy to look at. And then there are very fast ways to edit this tables. So, for example if we decide we actually want to swap the columns of room and phone number and actually want to put this last line first, so we just put the cursor here, we hold on the meta key [INDISTINCT] left and twice up and then this table will be rearranged and just--so it's very easy to swap columns around, I think much easier than any application--other application I know. So that's just kind of fun but the real fun start a little later. I don't know who of you knows the Emacs calculator package? The calc package which to--in my opinion is really--absolutely the most amazing program that has ever been written for Emacs, just totally amazing. It's a [INDISTINCT] mathematica and Emacs lisp. >> RAMAN: It's been running since 1991... >> DOMINIK: Yes. >> RAMAN: ...is what is most amazing about it. >> DOMINIK: Yes. And it's a beau--it's really beautiful program. And so, the Org-mode tables actually have a link back into the calc package and you can, if you want, write in a field [INDISTINCT] equation, for example here I've a couple of columns which is a function and then an N for the degree of the Taylor polynomial which I want to develop it. And then it's a location at X or X=0 or 1, and then here in this column I just write yes, okay I want the Taylor expansion of this function $1 with respect to the position X and then of degree N, that's $2. And I want to have the numbers which come out with--there's an accuracy of three digits. And if you put this in an equation [INDISTINCT] will actually be valid for the entire column. So you actually don't have to go down and pull it, if you write it like this, it will be for the entire column and it will just fill in these little things, all in an [INDISTINCT] table. Which is of course, this application is kind of funny but if you just want to add a couple of numbers or do a couple of small calculations or calculates the efficiency of a computer while you have a table which has some running times and things like in here, it's very useful to be able to this right there in your [INDISTINCT] notes. Another trick which you can do with table is something which we call Radio Tables. And so the way this is works--this works is you can actually--you're allowed to embed an Org-mode table into any mode. That uses the same trick of having context dependent functionality of keys. I will explain a little minute how that actually works. So you can put it in any--into any mode, like into C mode, JavaScript, LaTeX file, whatever you want. And then you can define--it's a single line, you define a translation on how to convert this table into the correct syntax, and to define a location where the transformed should be inserted. And then you can just edit the Org-mode table and the translated table will be changed too. So let me take an example. This is--for this JavaScript which we use to quickly view webpages, this is just a little table which define which keys do what. This is a table which we display in html and since this is--this is JavaScript, of course, somewhere in your JavaScript you have a location where you define the table. And it's a--JavaScript actually have to have little strings which you'll string together here in order to make this little table. As you see it looks totally ugly, you don't see a thing. So, you don't see if the table is correct or not correct, if you have missed something. It's really very bad. But you see that there's two comment lines here, BEGIN RECEIVE ORGTBL and END RECEIVE ORGTBL. And the table has the name Shortcuts, so you can actually have many such tables in a file. And then at some other location you can choose wherever you want, we have--in another comment, in a comment block, we just have a little Org-mode table which defines this table in a very clear way, you can just easy look at it. And it just says ORGTBL SEND Shortcuts and then there's a--there's a transformation step. And so whenever you change this table, the other table will be changed too. And that can be used in any circumstances and I find it extremely useful. For example, when I make exercises for my students, I write those in LaTeX and I do little calculations and I have a little table in the end. I always do it like this because the table calculates, [INDISTINCT] I can do all the exercise calculations just in that table and have it as a solution in the same documents, [INDISTINCT] very efficiently. Yes, I want to explain one internal technical thing for the people who are actually, maybe, Emacs hackers and know a little bit more about it, and this is about these Context-sensitive Keys of which Org-mode makes really extensive use. So, many of the keys work different depending on where you are. For example, if you hold on the Meta key and use a cursor it depend on where you are. If you are on a headline, that will do structure editing of your outline. So it will demote, promote, move something up or down. If you are in a table, it will actually change, swap columns and rows, these exact--exact same keys. The extreme example is the key ctrl-c ctrl-c which I use, I think, in 12 different ways so depending on context, this always means look and update, for example, in a table it means, well, realign this table and redo all the calculations, something like this. And in other circumstances that means similar things but different in every case. The tabulator, for example, it does visibility cycling in the headline, it does motion evaluations in tables, and it does LaTeX template expansion also. And then even all printing character use the same thing because they switch automatically to overwrite mode in tables. And the way this is implemented is--well, in Org-mode itself of course, no problem I can just bind any key to any function which will locally look for the context and do the right thing. But the interesting part is if I allow an Org-mode table to be embedded in C-mode for example, then it gets more interesting because, of course, all keys have some functionality in C-mode which you want to be able to use. And so you export the table functionality as a minor mode, and the way this works is that you bind the keys in the minor mode in--to a wrapper, the wrapper checks for the context MI in an Org-mode table even though I'm in a Java file, for example. When I am in the desired context then the Org-mode command is executed and that's it and if not then what the wrapper does is actually turn off that minor-mode and do a key lookup, well, what should I really be doing in this mode? And so, in this way you can actually project this functionality into any mode in a completely automatic way. So, here's just a little bit of lisp pro-code for those of you who understand it. So, this is just one of those functions which is an interactive function. So it's a command of course, and it does a check, well MI, at the table. It's just a little function which checks if there's a table. Looks--does it look like a table? If yes, then I call for example org-table-eval-formula. If not, then there's a let binding form which actually sets the value of orgtbl-mode to nil which means the minor mode is switched off--switched off. And then in this--in the dynamic scope of this let statement, there's actually a key look up, you look up which key--what should I actually, normally be executing and then this function is executed. And so, there's actually two--two such minor mode, one for the structural commands and one for the table commands which use this functionality to project these functions into any major mode in Emacs. Another technically interesting thing is also that we have multibuffer undo. So for example, if you have an agenda file then--and we do something, we can undo it both in the current file and in another buffer. That's another interesting thing, but I haven't really worked this out, to show you this in detail. Ask me questions about it if you want later. Okay, I'm getting to the end. So, how Org-mode is--how's Org-mode use today? In many different ways; of course, it's being used for taking notes by many different people I think. Then it's being used for tasks and planning but in many different ways. So, some people use is as a simple TODO list manager, so not as a notes file at all, it's just a list file and they just have all their TODO tasks, you know, that's it. It can be used like a day planner, and a day planner means you have a page for every day and you put all your tasks on a certain day. So that means you immediately schedule every task. It can be use like this and a couple of people have used it like this. For example, John Wiegley who actually wrote Planner himself, it's a different software, but that's more like a planner--Emacs planner work--way of using this program and so you can do it like this. Or you can do it like Getting Things Done a la David Allen. So, you have TODO states for the main GTD list, for example, the next action could be a TODO state or waiting or names, agendas for people. And you can just use the tags for contexts and agendas and whatever you want. The thing is it's completely free, I'm not forced to use this in any way you can just decide how you want. You can also do detailed time planning and accounting as I said. Some people use this as a small data base, just use the properties and all that to store some data and use it as that. There's quiet a few people who actually use it as a way of writing html and constructing web pages, writing little manuals, technical documents, it's a very pleasant way of doing this, I think. Or making drafts, for example. Very often, when I have to write a scientific paper which has to be LaTeX in the end, I start in Org-mode, write a draft and when I'm reasonably satisfy and need to go to the files minor details, then I just export it as a LaTeX file and take it from there. But it's not really all--basically people use it a Swiss army knife because it does many different things and you can just apply it to many different things. But Org-mode is not, well, Org-mode is not fiddle-free. So it keeps you fiddling with your system because it allows you to change your system but on the other hand, Emacs users, I guess if you're all Emacs users, we like this because we like our computer to work exactly as it should be. We don't want to have it a little bit off, we want to have it exactly right. And so, I want to fiddle and that's why I allow you to fiddle with Org-mode. It's probably not for the masses because it's only Emacs users and we are still a reasonably small fraction of the human population, I think. >> RAMAN: Quality [INDISTINCT] >> DOMINIK: Yes, it's not for VI users, sorry folks, but I don't think we have any here. Only few people switched to Emacs because of Org-mode but some do. I have now a few cases where this has happened. Then I want to [INDISTINCT] one final slide. There's a few remarks about Evolved Software because Org-mode is a pretty bad example for Evolved Software. It started in 2003 as a very small project so the original scope was really, take notes, define a few tasks and that's it. Of course I put it out on the Web and created a web mailing list for it and there's a whole [INDISTINCT] of wishes and ideas of whatever comes. Ninety five percent of the features were added later which were not in the original design, just added later. And as you--probably all of you know, who write codes, this can be very difficult, [INDISTINCT] complicated because you try to be [INDISTINCT] compatible and things like this. You don't get a fresh start, you don't get a clean look at an original design. So that can be very bad, in fact. What I've tried to do is to use two over ruling principles. And the first one is to really keep the simple core intact. So the basic idea, it's--you can still takes note with it, you can still [INDISTINCT] a few things as being a task and if that's all you want to do, that's fine, you can only do this. So I'm trying very hard to never impose complexities. So the idea is that you can start using Org-mode in an extremely simple way and as you go along, you can add the little things. But if you stop--stay at the small things, you will never be punish for using a big complex program. And I think that's very often the case with design software. So, if people think about it and they have a big plan of all the stuff which can be done, then very often, you are faced with an input window which ask you for a lot of information which you don't even want to specify because you are not interested in this. And that is what--something which we try to avoid. So, Org-mode doesn't really--it doesn't really offer a finished and closed solution for whatever you want but what it tries to do is to facilitate a learning and development process. So that you sit down and develop and learn your own way of getting things done or planning or whatever. This is where I want to stop. There's a few acknowledgements. First of all, the people on the mailing list emacs-orgmode@gnu.org which is really a great community, I'm laughing around there and talking to these guys. Lots of enthusiasm, some criticism and a constant stream of ideas which is really what has kept this program alive. Particular thanks to Bastien Guerry, who's a French guy who has really been the second man on the ship for a long time, implemented a lot of things and helped me with many details. And I would also like to thank Andrew Hyatt and T.V. Raman, and Google for giving me the opportunity to talk here. Thank you very much. And of course I'm taking to--I'm ready to take any questions. >> So I have a question. >> DOMINIK: Yes, I know. >> Actually, maybe I'll go for two here so. >> RAMAN: You got to use the mic. >> Hello, so I was wondering if there's any function--one of the things I constantly wish for Org-mode to do because I love to use Org-mode but unfortunately, some of my colleagues are not so enlightened and, you know, so we--and, you know, I basically have to collaborate a lot with them on like wiki pages and stuff like that, and you know, with [INDISTINCT] is there any--is there any way or any anticipated way to like have a back and forth translations so I could export it to a wiki page and then like when I go edit that wiki page again, I could retranslate it back to Org-mode? >> DOMINIK: Well, I mean, I don't really have that use for it so I haven't plan--don't have plans to make it but I think it's easy to do because it's just a simple plain text structure. I think it's pretty easy to do. And there's also, there is some code from Bastien actually, which we have, which does a complete analysis of the file. So it actually passes an Org file into a structured list. And what--I think it should be very easy to turn that list into whatever format you want... >> Okay. >> DOMINIK: ...and to turn whatever format you want back to that list and then all you miss is a little routine which writes it back as an Org-mode file. So there are actually plans for this but they're not really very concrete. >> Okay, cool. >> RAMAN: The problem with that particular issue is with Wiki. Wiki is sort of deceptively simple in the sense that they claim it's a simple text-base mark up and sometimes Org also is that. But how many spaces make up a list is different in every Wiki I know. And, so you know, which one do you pick and how do you do that transform [INDISTINCT] >> [INDISTINCT] for each... >> RAMAN: For each Wiki and then you have to know it and then there are surprises. >> DOMINIK: Yes. Oh, there's this idea to have sort of a gentle back and forth for translation into any kind of format where people [INDISTINCT] can write their own specification. But that has not materialized yet. And I'm not sure how quickly something like this will be done. >> RAMAN: And the question is, what [INDISTINCT] in terms of complexity because Org is [INDISTINCT] >> DOMINIK: Yeah, no, I mean the idea would really be to basically go through--go to an intermediate format, like this list structure, and only communicate through this. Yes. Yes. I don't want to make the basic format of Org more complex, I think that's complex enough. Other questions. I think I saw a hand over there, somewhere, no? I guess no more questions. If you ask questions, if you finally have questions, just get to our mailing list and ask me the question there, I will be happy to answer. >> RAMAN: [INDISTINCT] any hard core Emacs hacker join Carsten and us for lunch. We are going out to [INDISTINCT] after. >> DOMINIK: Thanks.
Info
Channel: Google TechTalks
Views: 285,915
Rating: 4.9372406 out of 5
Keywords: google, techtalks, techtalk, engedu, talk, talks, googletechtalks, education, GTD, Getting Things Done, Emacs
Id: oJTwQvgfgMM
Channel Id: undefined
Length: 46min 56sec (2816 seconds)
Published: Wed Jul 16 2008
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.