Merge from emacs--rel--22
[bpt/emacs.git] / man / org.texi
CommitLineData
891f4676
RS
1\input texinfo
2@c %**start of header
25afa2cf 3@setfilename ../info/org
6a04ed1c 4@settitle Org Mode Manual
891f4676 5
fecda3e8 6@set VERSION 5.03
386477e3 7@set DATE July 2007
891f4676
RS
8
9@dircategory Emacs
10@direntry
06341a67 11* Org Mode: (org). Outline-based notes management and organizer
891f4676
RS
12@end direntry
13
14@c Version and Contact Info
15@set MAINTAINERSITE @uref{http://www.astro.uva.nl/~dominik/Tools/org/,maintainers webpage}
0730c539 16@set AUTHOR Carsten Dominik
891f4676 17@set MAINTAINER Carsten Dominik
86f46920
CD
18@set MAINTAINEREMAIL @email{dominik at science dot uva dot nl}
19@set MAINTAINERCONTACT @uref{mailto:dominik at science dot uva dot nl,contact the maintainer}
891f4676
RS
20@c %**end of header
21@finalout
22
23@c Macro definitions
24
02d166dc 25@c Subheadings inside a table.
891f4676
RS
26@macro tsubheading{text}
27@ifinfo
28@subsubheading \text\
29@end ifinfo
30@ifnotinfo
31@item @b{\text\}
32@end ifnotinfo
33@end macro
34
35@copying
36This manual is for Org-mode (version @value{VERSION}).
37
06341a67 38Copyright @copyright{} 2004, 2005, 2006, 2007 Free Software Foundation
891f4676
RS
39
40@quotation
41Permission is granted to copy, distribute and/or modify this document
bc07911a 42under the terms of the GNU Free Documentation License, Version 1.1 or
891f4676
RS
43any later version published by the Free Software Foundation; with no
44Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
45and with the Back-Cover Texts as in (a) below. A copy of the
46license is included in the section entitled ``GNU Free Documentation
47License.''
48
49(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
50this GNU Manual, like GNU software. Copies published by the Free
51Software Foundation raise funds for GNU development.''
52@end quotation
53@end copying
54
55@titlepage
56@title Org Mode Manual
57
58@subtitle Release @value{VERSION}
59@author by Carsten Dominik
60
61@c The following two commands start the copyright page.
62@page
63@vskip 0pt plus 1filll
64@insertcopying
65@end titlepage
66
67@c Output the table of contents at the beginning.
68@contents
69
70@ifnottex
71@node Top, Introduction, (dir), (dir)
72@top Org Mode Manual
73
74@insertcopying
75@end ifnottex
76
77@menu
78* Introduction:: Getting started
6bef8c45 79* Document structure:: A tree works like your brain
891f4676
RS
80* Tables:: Pure magic for quick formatting
81* Hyperlinks:: Notes in context
56c91423 82* TODO items:: Every tree branch can be a TODO item
26ca33ed 83* Tags:: Tagging headlines and matching sets of tags
4d1daf59 84* Properties and columns::
219513ac 85* Timestamps:: Assign date and time to items
6bef8c45 86* Agenda views:: Collecting information into views
a1f058c6 87* Embedded LaTeX:: LaTeX fragments and formulas
891f4676 88* Exporting:: Sharing and publishing of notes
8ef8f2e6 89* Publishing:: Create a web site of linked Org-mode files
891f4676 90* Miscellaneous:: All the rest which did not fit elsewhere
a1f058c6
CD
91* Extensions and Hacking:: It is possible to write add-on code
92* History and Acknowledgments:: How Org-mode came into being
891f4676
RS
93* Index:: The fast road to specific information
94* Key Index:: Key bindings and where they are described
95
96@detailmenu
97 --- The Detailed Node Listing ---
98
99Introduction
100
101* Summary:: Brief summary of what Org-mode does
22a616f7
CD
102* Installation:: How to install a downloaded version of Org-mode
103* Activation:: How to activate Org-mode for certain buffers.
fb1556f0 104* Feedback:: Bug reports, ideas, patches etc.
891f4676 105
8ef8f2e6 106Document Structure
891f4676
RS
107
108* Outlines:: Org-mode is based on outline-mode
109* Headlines:: How to typeset org-tree headlines
bc07911a 110* Visibility cycling:: Show and hide, much simplified
891f4676
RS
111* Motion:: Jumping to other headlines
112* Structure editing:: Changing sequence and level of headlines
225ff037 113* Archiving:: Move done task trees to a different place
891f4676 114* Sparse trees:: Matches embedded in context
86f46920 115* Plain lists:: Additional structure within an entry
4d1daf59
CD
116* Drawers:: Tucking stuff away
117* orgstruct-mode:: Structure editing outside Org-mode
891f4676 118
a1f058c6
CD
119Archiving
120
121* ARCHIVE tag:: Marking a tree as inactive
122* Moving subtrees:: Moving a tree to an archive file
123
56c91423
CD
124Tables
125
126* Built-in table editor:: Simple tables
26ca33ed 127* Narrow columns:: Stop wasting space in tables
31e5288c 128* Column groups:: Grouping to trigger vertical lines
56c91423 129* orgtbl-mode:: The table editor as minor mode
06341a67 130* The spreadsheet:: The table editor has spreadsheet capabilities.
7837f272 131
06341a67 132The spreadsheet
7837f272 133
06341a67
CD
134* References:: How to refer to another field or range
135* Formula syntax for Calc:: Using Calc to compute stuff
136* Formula syntax for Lisp:: Writing formulas in Emacs Lisp
137* Field formulas:: Formulas valid for a single field
138* Column formulas:: Formulas valid for an entire column
139* Editing and debugging formulas:: Fixing formulas
140* Updating the table:: Recomputing all dependent fields
fb1556f0 141* Advanced features:: Field names, parameters and automatic recalc
56c91423
CD
142
143Hyperlinks
144
26ca33ed
CD
145* Link format:: How links in Org-mode are formatted
146* Internal links:: Links to other places in the current file
147* External links:: URL-like links to the world
67cb614c 148* Handling links:: Creating, inserting and following
86f46920 149* Link abbreviations:: Shortcuts for writing complex links
8ef8f2e6
CD
150* Search options:: Linking to a specific location
151* Custom searches:: When the default search is not enough
56c91423
CD
152* Remember:: Org-trees store quick notes
153
26ca33ed 154Internal links
6bae0337
CD
155
156* Radio targets:: Make targets trigger links in plain text.
06341a67
CD
157
158Remember
159
160* Setting up remember:: Some code for .emacs to get things going
161* Remember templates:: Define the outline of different note types
162* Storing notes:: Directly get the note to where it belongs
6bae0337 163
891f4676
RS
164TODO items
165
166* TODO basics:: Marking and displaying TODO entries
891f4676 167* TODO extensions:: Workflow and assignments
5b69c9ca 168* Priorities:: Some things are more important than others
31e5288c 169* Breaking down tasks:: Splitting a task into manageable pieces
86f46920 170* Checkboxes:: Tick-off lists
891f4676
RS
171
172Extended use of TODO keywords
173
174* Workflow states:: From TODO to DONE in steps
175* TODO types:: I do this, Fred the rest
31e5288c 176* Multiple sets in one file:: Mixing it all, and still finding your way
891f4676
RS
177* Per file keywords:: Different files, different requirements
178
219513ac
CD
179Tags
180
181* Tag inheritance:: Tags use the tree structure of the outline
182* Setting tags:: How to assign tags to a headline
183* Tag searches:: Searching for combinations of tags
184
4d1daf59 185Properties and Columns
386477e3
CD
186
187* Property syntax:: How properties are spelled out
188* Special properties:: Access to other Org-mode features
189* Property searches:: Matching property values
190* Column view:: Tabular viewing and editing
191* Property API:: Properties for Lisp programmers
192
193Column View
194
195* Defining columns:: The COLUMNS format property
196* Using column view:: How to create and use column view
197
4d1daf59
CD
198Defining Columns
199
200* Scope of column definitions::
201* Column attributes::
202
891f4676
RS
203Timestamps
204
205* Time stamps:: Assigning a time to a tree entry
206* Creating timestamps:: Commands which insert timestamps
31e5288c 207* Deadlines and scheduling:: Planning your work
91d85d5f
CD
208* Progress logging:: Documenting when what work was done.
209
86f46920
CD
210Creating timestamps
211
3a401219 212* The date/time prompt:: How org-mode helps you entering date and time
31e5288c
CD
213* Custom time format:: Making dates look differently
214
215Deadlines and Scheduling
216
217* Inserting deadline/schedule::
218* Repeated tasks::
86f46920 219
91d85d5f
CD
220Progress Logging
221
5aafad2e 222* Closing items:: When was this entry marked DONE?
06341a67 223* Tracking TODO state changes:: When did the status change?
91d85d5f 224* Clocking work time:: When exactly did you work on this item?
891f4676 225
8ef8f2e6 226Agenda Views
891f4676 227
d2eaec4d
CD
228* Agenda files:: Files being searched for agenda information
229* Agenda dispatcher:: Keyboard access to agenda views
06341a67 230* Built-in agenda views:: What is available out of the box?
86f46920 231* Presentation and sorting:: How agenda items are prepared for display
891f4676 232* Agenda commands:: Remote editing of org trees
86f46920 233* Custom agenda views:: Defining special searches and views
891f4676 234
06341a67 235The built-in agenda views
891f4676 236
06341a67
CD
237* Weekly/Daily agenda:: The calendar page with current tasks
238* Global TODO list:: All unfinished action items
386477e3 239* Matching tags and properties:: Structured information with fine-tuned search
06341a67
CD
240* Timeline:: Time-sorted view for single file
241* Stuck projects:: Find projects you need to review
86f46920
CD
242
243Presentation and sorting
244
d2eaec4d
CD
245* Categories:: Not all tasks are equal
246* Time-of-day specifications:: How the agenda knows the time
d2eaec4d 247* Sorting of agenda items:: The order of things
891f4676 248
86f46920
CD
249Custom agenda views
250
251* Storing searches:: Type once, use often
252* Block agenda:: All the stuff you need in a single buffer
253* Setting Options:: Changing the rules
31e5288c
CD
254* Exporting Agenda Views:: Writing agendas to files.
255* Extracting Agenda Information for other programs::
86f46920 256
a1f058c6
CD
257Embedded LaTeX
258
dbdd7534 259* Math symbols:: TeX macros for symbols and Greek letters
a1f058c6
CD
260* Subscripts and Superscripts:: Simple syntax for raising/lowering text
261* LaTeX fragments:: Complex formulas made easy
262* Processing LaTeX fragments:: Previewing LaTeX processing
263* CDLaTeX mode:: Speed up entering of formulas
264
891f4676
RS
265Exporting
266
d9f6d794
CD
267* ASCII export:: Exporting to plain ASCII
268* HTML export:: Exporting to HTML
8ef8f2e6 269* XOXO export:: Exporting to XOXO
d9f6d794
CD
270* iCalendar export:: Exporting in iCalendar format
271* Text interpretation:: How the exporter looks at the file
2b642957 272
06341a67
CD
273HTML export
274
31e5288c 275* Export commands:: How to invoke HTML export
06341a67
CD
276* Quoting HTML tags:: Using direct HTML in Org-mode
277* Links:: How hyperlinks get transferred to HTML
278* Images:: To inline or not to inline?
279* CSS support:: Style specifications
280
d9f6d794 281Text interpretation by the exporter
2b642957 282
d9f6d794 283* Comment lines:: Some lines will not be exported
31e5288c
CD
284* Initial text:: Text before the first headline
285* Footnotes:: Numbers like [1]
d9f6d794
CD
286* Enhancing text:: Subscripts, symbols and more
287* Export options:: How to influence the export settings
891f4676 288
8ef8f2e6
CD
289Publishing
290
291* Configuration:: Defining projects
292* Sample configuration:: Example projects
293* Triggering publication:: Publication commands
294
295Configuration
296
297* Project alist:: The central configuration variable
a1f058c6 298* Sources and destinations:: From here to there
8ef8f2e6
CD
299* Selecting files:: What files are part of the project?
300* Publishing action:: Setting the function doing the publishing
301* Publishing options:: Tweaking HTML export
302* Publishing links:: Which links keep working after publishing?
303* Project page index:: Publishing a list of project files
304
305Sample configuration
306
307* Simple example:: One-component publishing
308* Complex example:: A multi-component publishing example
309
891f4676
RS
310Miscellaneous
311
312* Completion:: M-TAB knows what you need
313* Customization:: Adapting Org-mode to your taste
a1f058c6 314* In-buffer settings:: Overview of the #+KEYWORDS
d9f6d794 315* The very busy C-c C-c key:: When in doubt, press C-c C-c
5b10c9c4
CD
316* Clean view:: Getting rid of leading stars in the outline
317* TTY keys:: Using Org-mode on a tty
891f4676 318* Interaction:: Other Emacs packages
891f4676
RS
319* Bugs:: Things which do not work perfectly
320
8ef8f2e6
CD
321Interaction with other packages
322
8ef8f2e6
CD
323* Cooperation:: Packages Org-mode cooperates with
324* Conflicts:: Packages that lead to conflicts
325
a1f058c6 326Extensions, Hooks and Hacking
5aafad2e 327
a1f058c6 328* Extensions:: Existing 3rd-part extensions
06341a67 329* Tables in arbitrary syntax:: Orgtbl for LaTeX and other programs
a1f058c6 330* Dynamic blocks:: Automatically filled blocks
06341a67 331* Special agenda views:: Customized views
386477e3 332* Using the property API:: Writing programs that use entry properties
06341a67
CD
333
334Tables in arbitrary syntax
335
336* Radio tables:: Sending and receiving
337* A LaTeX example:: Step by step, almost a tutorial
338* Translator functions:: Copy and modify
5aafad2e 339
891f4676
RS
340@end detailmenu
341@end menu
342
6bef8c45 343@node Introduction, Document structure, Top, Top
891f4676
RS
344@chapter Introduction
345@cindex introduction
346
347@menu
348* Summary:: Brief summary of what Org-mode does
22a616f7
CD
349* Installation:: How to install a downloaded version of Org-mode
350* Activation:: How to activate Org-mode for certain buffers.
fb1556f0 351* Feedback:: Bug reports, ideas, patches etc.
891f4676
RS
352@end menu
353
a1f058c6 354@node Summary, Installation, Introduction, Introduction
891f4676
RS
355@section Summary
356@cindex summary
357
386477e3 358Org-mode is a mode for keeping notes, maintaining TODO lists, and doing
891f4676
RS
359project planning with a fast and effective plain-text system.
360
361Org-mode develops organizational tasks around NOTES files that contain
c3c04119
CD
362lists or information about projects as plain text. Org-mode is
363implemented on top of outline-mode, which makes it possible to keep the
364content of large files well structured. Visibility cycling and
365structure editing help to work with the tree. Tables are easily created
386477e3 366with a built-in table editor. Org-mode supports TODO items, deadlines,
c3c04119
CD
367time stamps, and scheduling. It dynamically compiles entries into an
368agenda that utilizes and smoothly integrates much of the Emacs calendar
369and diary. Plain text URL-like links connect to websites, emails,
370Usenet messages, BBDB entries, and any files related to the projects.
371For printing and sharing of notes, an Org-mode file can be exported as a
2b642957 372structured ASCII file, as HTML, or (todo and agenda items only) as an
8ef8f2e6
CD
373iCalendar file. It can also serve as a publishing tool for a set of
374linked webpages.
891f4676 375
c3c04119 376An important design aspect that distinguishes Org-mode from for example
06341a67 377Planner/Muse is that it encourages to store every piece of information
c3c04119
CD
378only once. In Planner, you have project pages, day pages and possibly
379other files, duplicating some information such as tasks. In Org-mode,
380you only have notes files. In your notes you mark entries as tasks,
381label them with tags and timestamps. All necessary lists like a
382schedule for the day, the agenda for a meeting, tasks lists selected by
383tags etc are created dynamically when you need them.
86f46920 384
ebfe0a9c 385Org-mode keeps simple things simple. When first fired up, it should
8ef8f2e6
CD
386feel like a straightforward, easy to use outliner. Complexity is not
387imposed, but a large amount of functionality is available when you need
4d1daf59 388it. Org-mode is a toolbox and can be used in different ways, for
06341a67 389example as:
891f4676
RS
390
391@example
06341a67
CD
392@r{@bullet{} outline extension with visibility cycling and structure editing}
393@r{@bullet{} ASCII system and table editor for taking structured notes}
394@r{@bullet{} ASCII table editor with spreadsheet-like capabilities}
395@r{@bullet{} TODO list editor}
396@r{@bullet{} full agenda and planner with deadlines and work scheduling}
397@r{@bullet{} environment to implement David Allen's GTD system}
4d1daf59 398@r{@bullet{} a basic database application}
06341a67
CD
399@r{@bullet{} simple hypertext system, with HTML export}
400@r{@bullet{} publishing tool to create a set of interlinked webpages}
891f4676
RS
401@end example
402
06341a67
CD
403Org-mode's automatic, context sensitive table editor with spreadsheet
404capabilities can be integrated into any major mode by activating the
405minor Orgtbl-mode. Using a translation step, it can be used to maintain
4d1daf59
CD
406tables in arbitrary file types, for example in LaTeX. The structure
407editing and list creation capabilities can be used outside Org-mode with
408the minor Orgstruct-mode.
70745859 409
5aafad2e 410@cindex FAQ
70745859 411There is a website for Org-mode which provides links to the newest
5aafad2e
CD
412version of Org-mode, as well as additional information, frequently asked
413questions (FAQ), links to tutorials etc. This page is located at
70745859
CD
414@uref{http://www.astro.uva.nl/~dominik/Tools/org/}.
415
70745859
CD
416@page
417
06341a67 418
22a616f7
CD
419@node Installation, Activation, Summary, Introduction
420@section Installation
891f4676 421@cindex installation
22a616f7
CD
422@cindex XEmacs
423
06341a67 424@b{Important:} @i{If Org-mode is part of the Emacs distribution or an
22a616f7 425XEmacs package, please skip this section and go directly to
06341a67 426@ref{Activation}.}
22a616f7
CD
427
428If you have downloaded Org-mode from the Web, you must take the
429following steps to install it: Go into the Org-mode distribution
430directory and edit the top section of the file @file{Makefile}. You
431must set the name of the Emacs binary (likely either @file{emacs} or
432@file{xemacs}), and the paths to the directories where local Lisp and
433Info files are kept. If you don't have access to the system-wide
434directories, create your own two directories for these files, enter them
435into the Makefile, and make sure Emacs finds the Lisp files by adding
436the following line to @file{.emacs}:
437
438@example
439(setq load-path (cons "~/path/to/lispdir" load-path))
440@end example
441
442@b{XEmacs users now need to install the file @file{noutline.el} from
443the @file{xemacs} subdirectory of the Org-mode distribution. Use the
444command:}
445
446@example
447@b{make install-noutline}
448@end example
449
450@noindent Now byte-compile and install the Lisp files with the shell
451commands:
452
453@example
454make
455make install
456@end example
457
458@noindent If you want to install the info documentation, use this command:
459
460@example
461make install-info
462@end example
463
464@noindent Then add to @file{.emacs}:
465
466@lisp
467;; This line only if org-mode is not part of the X/Emacs distribution.
468(require 'org-install)
469@end lisp
470
471@node Activation, Feedback, Installation, Introduction
472@section Activation
473@cindex activation
891f4676
RS
474@cindex autoload
475@cindex global keybindings
476@cindex keybindings, global
477
06341a67
CD
478@iftex
479@b{Important:} @i{If you use copy-and-paste to copy lisp code from the
4d1daf59
CD
480PDF documentation as viewed by Acrobat reader to your .emacs file, the
481single quote character comes out incorrectly and the code will not work.
482You need to fix the single quotes by hand, or copy from Info
483documentation.}
06341a67
CD
484@end iftex
485
22a616f7
CD
486Add the following lines to your @file{.emacs} file. The last two lines
487define @emph{global} keys for the commands @command{org-store-link} and
488@command{org-agenda} - please choose suitable keys yourself.
891f4676 489
9bc3d124
CD
490@lisp
491;; The following lines are always needed. Choose your own keys.
492(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
493(define-key global-map "\C-cl" 'org-store-link)
494(define-key global-map "\C-ca" 'org-agenda)
495@end lisp
891f4676 496
8ef8f2e6
CD
497Furthermore, you must activate @code{font-lock-mode} in org-mode
498buffers, because significant functionality depends on font-locking being
22a616f7
CD
499active. You can do this with either one of the following two lines
500(XEmacs user must use the second option):
8ef8f2e6
CD
501@lisp
502(global-font-lock-mode 1) ; for all buffers
503(add-hook 'org-mode-hook 'turn-on-font-lock) ; org-mode buffers only
504@end lisp
505
891f4676 506@cindex org-mode, turning on
22a616f7
CD
507With this setup, all files with extension @samp{.org} will be put
508into Org-mode. As an alternative, make the first line of a file look
509like this:
891f4676
RS
510
511@example
512MY PROJECTS -*- mode: org; -*-
513@end example
514
515@noindent which will select Org-mode for this buffer no matter what
5b69c9ca 516the file's name is. See also the variable
26ca33ed 517@code{org-insert-mode-line-in-empty-file}.
891f4676 518
22a616f7 519@node Feedback, , Activation, Introduction
56c91423
CD
520@section Feedback
521@cindex feedback
522@cindex bug reports
523@cindex maintainer
524@cindex author
525
526If you find problems with Org-mode, or if you have questions, remarks,
0730c539 527or ideas about it, please contact the maintainer @value{MAINTAINER} at
56c91423
CD
528@value{MAINTAINEREMAIL}.
529
530For bug reports, please provide as much information as possible,
531including the version information of Emacs (@kbd{C-h v emacs-version
26ca33ed
CD
532@key{RET}}) and Org-mode (@kbd{C-h v org-version @key{RET}}), as well as
533the Org-mode related setup in @file{.emacs}. If an error occurs, a
86f46920
CD
534backtrace can be very useful (see below on how to create one). Often a
535small example file helps, along with clear information about:
26ca33ed 536
56c91423
CD
537@enumerate
538@item What exactly did you do?
539@item What did you expect to happen?
540@item What happened instead?
541@end enumerate
26ca33ed 542@noindent Thank you for helping to improve this mode.
56c91423 543
86f46920
CD
544@subsubheading How to create a useful backtrace
545
546@cindex backtrace of an error
547If working with Org-mode produces an error with a message you don't
548understand, you may have hit a bug. The best way to report this is by
549providing, in addition to what was mentioned above, a @emph{Backtrace}.
550This is information from the built-in debugger about where and how the
551error occurred. Here is how to produce a useful backtrace:
552
553@enumerate
554@item
555Start a fresh Emacs or XEmacs, and make sure that it will load the
556original Lisp code in @file{org.el} instead of the compiled version in
557@file{org.elc}. The backtrace contains much more information if it is
558produced with uncompiled code. To do this, either rename @file{org.elc}
559to something else before starting Emacs, or ask Emacs explicitly to load
560@file{org.el} by using the command line
561@example
562emacs -l /path/to/org.el
563@end example
564@item
565Go to the @code{Options} menu and select @code{Enter Debugger on Error}
566(XEmacs has this option in the @code{Troubleshooting} sub-menu).
567@item
c3c04119 568Do whatever you have to do to hit the error. Don't forget to
86f46920
CD
569document the steps you take.
570@item
571When you hit the error, a @file{*Backtrace*} buffer will appear on the
c3c04119
CD
572screen. Save this buffer to a file (for example using @kbd{C-x C-w}) and
573attach it to your bug report.
86f46920
CD
574@end enumerate
575
6bef8c45 576@node Document structure, Tables, Introduction, Top
891f4676
RS
577@chapter Document Structure
578@cindex document structure
579@cindex structure of document
580
581Org-mode is based on outline mode and provides flexible commands to
582edit the structure of the document.
583
584@menu
585* Outlines:: Org-mode is based on outline-mode
586* Headlines:: How to typeset org-tree headlines
bc07911a 587* Visibility cycling:: Show and hide, much simplified
891f4676
RS
588* Motion:: Jumping to other headlines
589* Structure editing:: Changing sequence and level of headlines
225ff037 590* Archiving:: Move done task trees to a different place
891f4676 591* Sparse trees:: Matches embedded in context
86f46920 592* Plain lists:: Additional structure within an entry
4d1daf59
CD
593* Drawers:: Tucking stuff away
594* orgstruct-mode:: Structure editing outside Org-mode
891f4676
RS
595@end menu
596
6bef8c45 597@node Outlines, Headlines, Document structure, Document structure
891f4676
RS
598@section Outlines
599@cindex outlines
600@cindex outline-mode
601
602Org-mode is implemented on top of outline-mode. Outlines allow to
603organize a document in a hierarchical structure, which (at least for
604me) is the best representation of notes and thoughts. Overview over
605this structure is achieved by folding (hiding) large parts of the
606document to show only the general document structure and the parts
607currently being worked on. Org-mode greatly simplifies the use of
608outlines by compressing the entire show/hide functionality into a
609single command @command{org-cycle}, which is bound to the @key{TAB}
610key.
611
6bef8c45 612@node Headlines, Visibility cycling, Outlines, Document structure
891f4676
RS
613@section Headlines
614@cindex headlines
615@cindex outline tree
616
26ca33ed 617Headlines define the structure of an outline tree. The headlines in
31e5288c 618Org-mode start with one or more stars, on the left margin@footnote{See
fecda3e8
CD
619the variable @code{org-special-ctrl-a/e} to configure special behavior
620of @kbd{C-a} and @kbd{C-e} in headlines.}. For example:
891f4676
RS
621
622@example
623* Top level headline
624** Second level
625*** 3rd level
626 some text
627*** 3rd level
628 more text
31e5288c 629
891f4676
RS
630* Another top level headline
631@end example
26ca33ed 632
5b10c9c4
CD
633@noindent Some people find the many stars too noisy and would prefer an
634outline that has whitespace followed by a single star as headline
635starters. @ref{Clean view} describes a setup to realize this.
891f4676 636
31e5288c
CD
637An empty line after the end of a subtree is considered part of it and
638will be hidden when the subtree is folded. However, if you leave at
639least two empty lines, one empty line will remain visible after folding
640the subtree, in order to structure the collapsed view. See the
641variable @code{org-cycle-separator-lines} for modifying this behavior.
642
6bef8c45 643@node Visibility cycling, Motion, Headlines, Document structure
891f4676 644@section Visibility cycling
cfbc5709 645@cindex cycling, visibility
891f4676
RS
646@cindex visibility cycling
647@cindex trees, visibility
cfbc5709
CD
648@cindex show hidden text
649@cindex hide text
891f4676
RS
650
651Outlines make it possible to hide parts of the text in the buffer.
8ef8f2e6
CD
652Org-mode uses just two commands, bound to @key{TAB} and
653@kbd{S-@key{TAB}} to change the visibility in the buffer.
891f4676
RS
654
655@cindex subtree visibility states
8ef8f2e6 656@cindex subtree cycling
891f4676
RS
657@cindex folded, subtree visibility state
658@cindex children, subtree visibility state
659@cindex subtree, subtree visibility state
660@table @kbd
661@kindex @key{TAB}
662@item @key{TAB}
31e5288c 663@emph{Subtree cycling}: Rotate current subtree among the states
26ca33ed 664
891f4676
RS
665@example
666,-> FOLDED -> CHILDREN -> SUBTREE --.
667'-----------------------------------'
668@end example
26ca33ed 669
8ef8f2e6
CD
670The cursor must be on a headline for this to work@footnote{see, however,
671the option @code{org-cycle-emulate-tab}.}. When the cursor is at the
672beginning of the buffer and the first line is not a headline, then
673@key{TAB} actually runs global cycling (see below)@footnote{see the
674option @code{org-cycle-global-at-bob}.}. Also when called with a prefix
675argument (@kbd{C-u @key{TAB}}), global cycling is invoked.
891f4676
RS
676
677@cindex global visibility states
8ef8f2e6 678@cindex global cycling
891f4676
RS
679@cindex overview, global visibility state
680@cindex contents, global visibility state
681@cindex show all, global visibility state
682@kindex S-@key{TAB}
683@item S-@key{TAB}
8ef8f2e6 684@itemx C-u @key{TAB}
31e5288c 685@emph{Global cycling}: Rotate the entire buffer among the states
26ca33ed 686
891f4676
RS
687@example
688,-> OVERVIEW -> CONTENTS -> SHOW ALL --.
689'--------------------------------------'
690@end example
26ca33ed 691
06341a67
CD
692When @kbd{S-@key{TAB}} is called with a numerical prefix N, the CONTENTS
693view up to headlines of level N will be shown.
891f4676
RS
694Note that inside tables, @kbd{S-@key{TAB}} jumps to the previous field.
695
696@cindex show all, command
697@kindex C-c C-a
698@item C-c C-a
699Show all.
86f46920
CD
700@kindex C-c C-r
701@item C-c C-r
702Reveal context around point, showing the current entry, the following
703heading and the hierarchy above. Useful for working near a location
704exposed by a sparse tree command (@pxref{Sparse trees}) or an agenda
06341a67
CD
705command (@pxref{Agenda commands}). With prefix arg show, on each
706level, all sibling headings.
707@kindex C-c C-x b
708@item C-c C-x b
709Show the current subtree in an indirect buffer@footnote{The indirect
31e5288c
CD
710buffer
711@ifinfo
712(@pxref{Indirect Buffers,,,emacs,GNU Emacs Manual})
713@end ifinfo
714@ifnotinfo
715(see the Emacs manual for more information about indirect buffers)
716@end ifnotinfo
717will contain the entire buffer, but will be narrowed to the current
718tree. Editing the indirect buffer will also change the original buffer,
719but without affecting visibility in that buffer.}. With numerical
720prefix ARG, go up to this level and then take that tree. If ARG is
721negative, go up that many levels. With @kbd{C-u} prefix, do not remove
722the previously used indirect buffer.
891f4676
RS
723@end table
724
7837f272 725When Emacs first visits an Org-mode file, the global state is set to
525f4f90
CD
726OVERVIEW, i.e. only the top level headlines are visible. This can be
727configured through the variable @code{org-startup-folded}, or on a
728per-file basis by adding one of the following lines anywhere in the
729buffer:
730
731@example
d9f6d794 732#+STARTUP: overview
5b69c9ca 733#+STARTUP: content
d9f6d794 734#+STARTUP: showall
525f4f90
CD
735@end example
736
6bef8c45 737@node Motion, Structure editing, Visibility cycling, Document structure
891f4676
RS
738@section Motion
739@cindex motion, between headlines
740@cindex jumping, to headlines
cfbc5709 741@cindex headline navigation
891f4676
RS
742The following commands jump to other headlines in the buffer.
743
744@table @kbd
745@kindex C-c C-n
746@item C-c C-n
747Next heading.
748@kindex C-c C-p
749@item C-c C-p
750Previous heading.
751@kindex C-c C-f
752@item C-c C-f
753Next heading same level.
754@kindex C-c C-b
755@item C-c C-b
756Previous heading same level.
757@kindex C-c C-u
758@item C-c C-u
759Backward to higher level heading.
760@kindex C-c C-j
761@item C-c C-j
762Jump to a different place without changing the current outline
763visibility. Shows the document structure in a temporary buffer, where
31e5288c
CD
764you can use the following keys to find your destination:
765@example
766@key{TAB} @r{Cycle visibility.}
767@key{down} / @key{up} @r{Next/previous visible headline.}
768n / p @r{Next/previous visible headline.}
769f / b @r{Next/previous headline same level.}
770u @r{One level up.}
7710-9 @r{Digit argument.}
772@key{RET} @r{Select this location.}
773@end example
891f4676
RS
774@end table
775
6bef8c45 776@node Structure editing, Archiving, Motion, Document structure
891f4676
RS
777@section Structure editing
778@cindex structure editing
779@cindex headline, promotion and demotion
780@cindex promotion, of subtrees
781@cindex demotion, of subtrees
782@cindex subtree, cut and paste
7837f272
CD
783@cindex pasting, of subtrees
784@cindex cutting, of subtrees
785@cindex copying, of subtrees
cfbc5709 786@cindex subtrees, cut and paste
891f4676
RS
787
788@table @kbd
789@kindex M-@key{RET}
790@item M-@key{RET}
538f77b9 791Insert new heading with same level as current. If the cursor is in a
6bef8c45
CD
792plain list item, a new item is created (@pxref{Plain lists}). To force
793creation of a new headline, use a prefix arg, or first press @key{RET}
794to get to the beginning of the next line. When this command is used in
795the middle of a line, the line is split and the rest of the line becomes
796the new headline. If the command is used at the beginning of a
8ef8f2e6 797headline, the new headline is created before the current line. If at
6bef8c45 798the beginning of any other line, the content of that line is made the
86f46920
CD
799new heading. If the command is used at the end of a folded subtree
800(i.e. behind the ellipses at the end of a headline), then a headline
801like the current one will be inserted after the end of the subtree.
5b69c9ca
CD
802@kindex M-S-@key{RET}
803@item M-S-@key{RET}
804Insert new TODO entry with same level as current heading.
891f4676
RS
805@kindex M-@key{left}
806@item M-@key{left}
26ca33ed 807Promote current heading by one level.
891f4676
RS
808@kindex M-@key{right}
809@item M-@key{right}
26ca33ed 810Demote current heading by one level.
891f4676
RS
811@kindex M-S-@key{left}
812@item M-S-@key{left}
26ca33ed 813Promote the current subtree by one level.
891f4676
RS
814@kindex M-S-@key{right}
815@item M-S-@key{right}
26ca33ed 816Demote the current subtree by one level.
891f4676
RS
817@kindex M-S-@key{up}
818@item M-S-@key{up}
ebfe0a9c 819Move subtree up (swap with previous subtree of same
26ca33ed 820level).
891f4676
RS
821@kindex M-S-@key{down}
822@item M-S-@key{down}
26ca33ed 823Move subtree down (swap with next subtree of same level).
bc07911a 824@kindex C-c C-x C-w
5b10c9c4 825@kindex C-c C-x C-k
bc07911a 826@item C-c C-x C-w
5b10c9c4 827@itemx C-c C-x C-k
891f4676 828Kill subtree, i.e. remove it from buffer but save in kill ring.
bc07911a
CD
829@kindex C-c C-x M-w
830@item C-c C-x M-w
891f4676 831Copy subtree to kill ring.
bc07911a
CD
832@kindex C-c C-x C-y
833@item C-c C-x C-y
5b69c9ca 834Yank subtree from kill ring. This does modify the level of the subtree to
891f4676
RS
835make sure the tree fits in nicely at the yank position. The yank
836level can also be specified with a prefix arg, or by yanking after a
837headline marker like @samp{****}.
06341a67
CD
838@kindex C-c ^
839@item C-c ^
840Sort same-level entries. When there is an active region, all entries in
841the region will be sorted. Otherwise the children of the current
842headline are sorted. The command prompts for the sorting method, which
843can be alphabetically, numerically, by time (using the first time stamp
844in each entry), and each of these in reverse order. With a @kbd{C-u}
845prefix, sorting will be case-sensitive. With two @kbd{C-u C-u}
846prefixes, duplicate entries will also be removed.
891f4676
RS
847@end table
848
849@cindex region, active
850@cindex active region
851@cindex transient-mark-mode
852When there is an active region (transient-mark-mode), promotion and
853demotion work on all headlines in the region. To select a region of
854headlines, it is best to place both point and mark at the beginning of a
855line, mark at the beginning of the first headline, and point at the line
856just after the last headline to change. Note that when the cursor is
857inside a table (@pxref{Tables}), the Meta-Cursor keys have different
858functionality.
859
6bef8c45 860@node Archiving, Sparse trees, Structure editing, Document structure
225ff037
CD
861@section Archiving
862@cindex archiving
863
7837f272 864When a project represented by a (sub)tree is finished, you may want
a1f058c6
CD
865to move the tree out of the way and to stop it from contributing to the
866agenda. Org-mode knows two ways of archiving. You can mark a tree with
867the ARCHIVE tag, or you can move an entire (sub)tree to a different
868location.
869
870@menu
871* ARCHIVE tag:: Marking a tree as inactive
872* Moving subtrees:: Moving a tree to an archive file
873@end menu
874
875@node ARCHIVE tag, Moving subtrees, Archiving, Archiving
876@subsection The ARCHIVE tag
877@cindex internal archiving
878
879A headline that is marked with the ARCHIVE tag (@pxref{Tags}) stays at
880its location in the outline tree, but behaves in the following way:
881@itemize @minus
882@item
883It does not open when you attempt to do so with a visibility cycling
86f46920
CD
884command (@pxref{Visibility cycling}). You can force cycling archived
885subtrees with @kbd{C-@key{TAB}}, or by setting the option
886@code{org-cycle-open-archived-trees}. Also normal outline commands like
887@code{show-all} will open archived subtrees.
a1f058c6
CD
888@item
889During sparse tree construction (@pxref{Sparse trees}), matches in
890archived subtrees are not exposed, unless you configure the option
891@code{org-sparse-tree-open-archived-trees}.
892@item
893During agenda view construction (@pxref{Agenda views}), the content of
894archived trees is ignored unless you configure the option
895@code{org-agenda-skip-archived-trees}.
896@item
897Archived trees are not exported (@pxref{Exporting}), only the headline
898is. Configure the details using the variable
899@code{org-export-with-archived-trees}.
900@end itemize
901
86f46920 902The following commands help managing the ARCHIVE tag:
a1f058c6
CD
903
904@table @kbd
905@kindex C-c C-x C-a
906@item C-c C-x C-a
907Toggle the ARCHIVE tag for the current headline. When the tag is set,
908the headline changes to a shadowish face, and the subtree below it is
909hidden.
910@kindex C-u C-c C-x C-a
911@item C-u C-c C-x C-a
912Check if any direct children of the current headline should be archived.
913To do this, each subtree is checked for open TODO entries. If none are
914found, the command offers to set the ARCHIVE tag for the child. If the
915cursor is @emph{not} on a headline when this command is invoked, the
916level 1 trees will be checked.
86f46920
CD
917@kindex C-@kbd{TAB}
918@item C-@kbd{TAB}
919Cycle a tree even if it is tagged with ARCHIVE.
a1f058c6
CD
920@end table
921
922@node Moving subtrees, , ARCHIVE tag, Archiving
923@subsection Moving subtrees
924@cindex external archiving
925
926Once an entire project is finished, you may want to move it to a
927different location, either in the current file, or even in a different
928file, the archive file.
929
225ff037 930@table @kbd
06341a67
CD
931@kindex C-c C-x C-s
932@item C-c C-x C-s
225ff037
CD
933Archive the subtree starting at the cursor position to the location
934given by @code{org-archive-location}.
06341a67
CD
935@kindex C-u C-c C-x C-s
936@item C-u C-c C-x C-s
a1f058c6
CD
937Check if any direct children of the current headline could be moved to
938the archive. To do this, each subtree is checked for open TODO entries.
939If none are found, the command offers to move it to the archive
940location. If the cursor is @emph{not} on a headline when this command
941is invoked, the level 1 trees will be checked.
225ff037
CD
942@end table
943
944@cindex archive locations
a1f058c6
CD
945The default archive location is a file in the same directory as the
946current file, with the name derived by appending @file{_archive} to the
947current file name. For information and examples on how to change this,
948see the documentation string of the variable
06341a67
CD
949@code{org-archive-location}. There is also an in-buffer option for
950setting this variable, for example
951
952@example
953#+ARCHIVE: %s_done::
954@end example
955
956@noindent
957You may have several such lines in the buffer, they will then be valid
958for the entries following the line (the first will also apply to any
959text before it).
225ff037 960
6bef8c45 961@node Sparse trees, Plain lists, Archiving, Document structure
891f4676
RS
962@section Sparse trees
963@cindex sparse trees
964@cindex trees, sparse
965@cindex folding, sparse trees
966@cindex occur, command
967
968An important feature of Org-mode is the ability to construct
969@emph{sparse trees} for selected information in an outline tree. A
970sparse tree means that the entire document is folded as much as
971possible, but the selected information is made visible along with the
d2eaec4d 972headline structure above it@footnote{See also the variables
06341a67
CD
973@code{org-show-hierarchy-above}, @code{org-show-following-heading}, and
974@code{org-show-siblings} for detailed control on how much context is
975shown around each match.}. Just try it out and you will see immediately
976how it works.
891f4676
RS
977
978Org-mode contains several commands creating such trees. The most
979basic one is @command{org-occur}:
980
981@table @kbd
982@kindex C-c /
983@item C-c /
984Occur. Prompts for a regexp and shows a sparse tree with all matches.
985If the match is in a headline, the headline is made visible. If the
986match is in the body of an entry, headline and body are made visible.
987In order to provide minimal context, also the full hierarchy of
988headlines above the match is shown, as well as the headline following
8ef8f2e6 989the match. Each match is also highlighted; the highlights disappear
06341a67 990when the buffer is changes an editing command, or by pressing @kbd{C-c
86f46920
CD
991C-c}. When called with a @kbd{C-u} prefix argument, previous highlights
992are kept, so several calls to this command can be stacked.
891f4676 993@end table
d2eaec4d
CD
994@noindent
995For frequently used sparse trees of specific search strings, you can
996use the variable @code{org-agenda-custom-commands} to define fast
997keyboard access to specific sparse trees. These commands will then be
998accessible through the agenda dispatcher (@pxref{Agenda dispatcher}).
26ca33ed
CD
999For example:
1000
d2eaec4d
CD
1001@lisp
1002(setq org-agenda-custom-commands
1003 '(("f" occur-tree "FIXME")))
1004@end lisp
26ca33ed 1005
d2eaec4d
CD
1006@noindent will define the key @kbd{C-c a f} as a shortcut for creating
1007a sparse tree matching the string @samp{FIXME}.
891f4676 1008
8ef8f2e6 1009Other commands use sparse trees as well. For example @kbd{C-c
891f4676
RS
1010C-v} creates a sparse TODO tree (@pxref{TODO basics}).
1011
77ef352e 1012@kindex C-c C-e v
525f4f90
CD
1013@cindex printing sparse trees
1014@cindex visible text, printing
1015To print a sparse tree, you can use the Emacs command
1016@code{ps-print-buffer-with-faces} which does not print invisible parts
7837f272 1017of the document @footnote{This does not work under XEmacs, because
67cb614c 1018XEmacs uses selective display for outlining, not text properties.}.
77ef352e 1019Or you can use the command @kbd{C-c C-e v} to export only the visible
8ef8f2e6 1020part of the document and print the resulting file.
525f4f90 1021
386477e3 1022@node Plain lists, Drawers, Sparse trees, Document structure
6bef8c45 1023@section Plain lists
ebfe0a9c
CD
1024@cindex plain lists
1025@cindex lists, plain
cfbc5709
CD
1026@cindex lists, ordered
1027@cindex ordered lists
ebfe0a9c 1028
86f46920
CD
1029Within an entry of the outline tree, hand-formatted lists can provide
1030additional structure. They also provide a way to create lists of
1031checkboxes (@pxref{Checkboxes}). Org-mode supports editing such lists,
1032and the HTML exporter (@pxref{Exporting}) does parse and format them.
ebfe0a9c 1033
5b10c9c4
CD
1034Org-mode knows ordered and unordered lists. Unordered list items start
1035with @samp{-}, @samp{+}, or @samp{*}@footnote{When using @samp{*} as a
1036bullet, lines must be indented or they will be seen as top-level
1037headlines. Also, when you are hiding leading stars to get a clean
1038outline view, plain list items starting with a star are visually
26ca33ed 1039indistinguishable from true headlines. In short: even though @samp{*}
31e5288c 1040is supported, it may be better not to use it for plain list items.} as
5b10c9c4
CD
1041bullets. Ordered list items start with @samp{1.} or @samp{1)}. Items
1042belonging to the same list must have the same indentation on the first
26ca33ed 1043line. In particular, if an ordered list reaches number @samp{10.}, then
5b10c9c4
CD
1044the 2--digit numbers must be written left-aligned with the other numbers
1045in the list. Indentation also determines the end of a list item. It
1046ends before the next line that is indented like the bullet/number, or
31e5288c 1047less. Empty lines are part of the previous item, so you can have
386477e3 1048several paragraphs in one item. If you would like an empty line to
31e5288c 1049terminate all currently open plain lists, configure the variable
386477e3 1050@code{org-empty-line-terminates-plain-lists}. Here is an example:
ebfe0a9c
CD
1051
1052@example
67cb614c 1053@group
ebfe0a9c 1054** Lord of the Rings
86f46920
CD
1055 My favorite scenes are (in this order)
1056 1. The attack of the Rohirrim
1057 2. Eowyns fight with the witch king
1058 + this was already my favorite scene in the book
1059 + I really like Miranda Otto.
1060 3. Peter Jackson being shot by Legolas
1061 - on DVD only
1062 He makes a really funny face when it happens.
1063 But in the end, not individual scenes matter but the film as a whole.
67cb614c 1064@end group
ebfe0a9c
CD
1065@end example
1066
22a616f7
CD
1067Org-mode supports these lists by tuning filling and wrapping commands to
1068deal with them correctly@footnote{Org-mode only changes the filling
1069settings for Emacs. For XEmacs, you should use Kyle E. Jones'
3a401219 1070@file{filladapt.el}. To turn this on, put into @file{.emacs}:
219513ac 1071@code{(require 'filladapt)}}.
8ef8f2e6 1072
8ef8f2e6
CD
1073The following commands act on items when the cursor is in the first line
1074of an item (the line with the bullet or number).
ebfe0a9c
CD
1075
1076@table @kbd
7b93e84b
CD
1077@kindex @key{TAB}
1078@item @key{TAB}
1079Items can be folded just like headline levels if you set the variable
1080@code{org-cycle-include-plain-lists}. The level of an item is then
8ef8f2e6
CD
1081given by the indentation of the bullet/number. Items are always
1082subordinate to real headlines, however; the hierarchies remain
7b93e84b 1083completely separated.
219513ac
CD
1084
1085If @code{org-cycle-include-plain-lists} has not been set, @key{TAB}
1086fixes the indentation of the curent line in a heuristic way.
538f77b9
CD
1087@kindex M-@key{RET}
1088@item M-@key{RET}
6bef8c45
CD
1089Insert new item at current level. With prefix arg, force a new heading
1090(@pxref{Structure editing}). If this command is used in the middle of a
1091line, the line is @emph{split} and the rest of the line becomes the new
1092item. If this command is executed in the @emph{whitespace before a bullet or
1093number}, the new item is created @emph{before} the current item. If the
1094command is executed in the white space before the text that is part of
1095an item but does not contain the bullet, a bullet is added to the
1096current line.
8ef8f2e6
CD
1097@kindex M-S-@key{RET}
1098@item M-S-@key{RET}
10afd8e1 1099Insert a new item with a checkbox (@pxref{Checkboxes}).
8ef8f2e6
CD
1100@kindex S-@key{up}
1101@kindex S-@key{down}
1102@item S-@key{up}
1103@itemx S-@key{down}
1104Jump to the previous/next item in the current list.
ebfe0a9c
CD
1105@kindex M-S-@key{up}
1106@kindex M-S-@key{down}
1107@item M-S-@key{up}
1108@itemx M-S-@key{down}
1109Move the item including subitems up/down (swap with previous/next item
cfbc5709 1110of same indentation). If the list is ordered, renumbering is
ebfe0a9c
CD
1111automatic.
1112@kindex M-S-@key{left}
1113@kindex M-S-@key{right}
1114@item M-S-@key{left}
1115@itemx M-S-@key{right}
1116Decrease/increase the indentation of the item, including subitems.
1117Initially, the item tree is selected based on current indentation.
1118When these commands are executed several times in direct succession,
1119the initially selected region is used, even if the new indentation
1120would imply a different hierarchy. To use the new hierarchy, break
1121the command chain with a cursor motion or so.
1122@kindex C-c C-c
1123@item C-c C-c
10afd8e1 1124If there is a checkbox (@pxref{Checkboxes}) in the item line, toggle the
219513ac
CD
1125state of the checkbox. If not, make this command makes sure that all
1126the items on this list level use the same bullet. Furthermore, if this
1127is an ordered list, make sure the numbering is ok.
386477e3
CD
1128@kindex C-c -
1129@item C-c -
1130Cycle the entire list level through the different itemize/enumerate
1131bullets (@samp{-}, @samp{+}, @samp{*}, @samp{1.}, @samp{1)}).
1132With prefix arg, select the nth bullet from this list.
ebfe0a9c
CD
1133@end table
1134
4d1daf59 1135@node Drawers, orgstruct-mode, Plain lists, Document structure
386477e3
CD
1136@section Drawers
1137@cindex drawers
4d1daf59 1138@cindex visibility cycling, drawers
386477e3
CD
1139
1140Sometimes you want to keep information associated with an entry, but you
4d1daf59
CD
1141normally don't want to see it. For this, Org-mode has @emph{drawers}.
1142Drawers need to be configured with the variable @code{org-drawers}, and
1143look like this:
386477e3
CD
1144
1145@example
1146** This is a headline
1147 Still outside the drawer
1148 :DRAWERNAME:
1149 This is inside the drawer.
1150 :END:
1151 After the drawer.
1152@end example
1153
1154Visibility cycling (@pxref{Visibility cycling}) on the headline will
1155hide and show the entry, but keep the drawer collapsed to a single line.
1156In order to look inside the drawer, you need to move the cursor to the
1157drawer line and press @key{TAB} there. Org-mode uses a drawer for
4d1daf59
CD
1158storing properties (@pxref{Properties and columns}).
1159
1160@node orgstruct-mode, , Drawers, Document structure
1161@section The Orgstruct minor mode
1162@cindex orgstruct-mode
1163@cindex minor mode for structure editing
1164
1165If you like the intuitive way the Org-mode structure editing and list
1166formatting works, you might want to use these commands in other modes
1167like text-mode or mail-mode as well. The minor mode Orgstruct-mode
1168makes this possible. You can always toggle the mode with @kbd{M-x
1169orgstruct-mode}. To turn it on by default, for example in mail mode,
1170use
1171
1172@lisp
1173(add-hook 'mail-mode-hook 'turn-on-orgstruct)
1174@end lisp
1175
1176When this mode is active and the cursor is on a line that looks to
1177Org-mode like a headline of the first line of a list item, most
1178structure editing commands will work, even if the same keys normally
1179have different functionality in the major mode you are using. If the
1180cursor is not in one of those special lines, Orgstruct-mode lurks
1181silently in the shadow.
386477e3 1182
6bef8c45 1183@node Tables, Hyperlinks, Document structure, Top
891f4676
RS
1184@chapter Tables
1185@cindex tables
cfbc5709 1186@cindex editing tables
891f4676 1187
7837f272
CD
1188Org-mode has a very fast and intuitive table editor built-in.
1189Spreadsheet-like calculations are supported in connection with the
1190Emacs @file{calc} package.
891f4676
RS
1191
1192@menu
1193* Built-in table editor:: Simple tables
26ca33ed 1194* Narrow columns:: Stop wasting space in tables
31e5288c 1195* Column groups:: Grouping to trigger vertical lines
70745859 1196* orgtbl-mode:: The table editor as minor mode
06341a67 1197* The spreadsheet:: The table editor has spreadsheet capabilities.
891f4676
RS
1198@end menu
1199
26ca33ed 1200@node Built-in table editor, Narrow columns, Tables, Tables
891f4676 1201@section The built-in table editor
06341a67 1202@cindex table editor, built-in
891f4676
RS
1203
1204Org-mode makes it easy to format tables in plain ASCII. Any line with
1205@samp{|} as the first non-white character is considered part of a
1206table. @samp{|} is also the column separator. A table might look
1207like this:
1208
1209@example
1210| Name | Phone | Age |
1211|-------+-------+-----|
1212| Peter | 1234 | 17 |
1213| Anna | 4321 | 25 |
1214@end example
1215
1216A table is re-aligned automatically each time you press @key{TAB} or
7837f272
CD
1217@key{RET} or @kbd{C-c C-c} inside the table. @key{TAB} also moves to
1218the next field (@key{RET} to the next row) and creates new table rows
1219at the end of the table or before horizontal lines. The indentation
1220of the table is set by the first line. Any line starting with
1221@samp{|-} is considered as a horizontal separator line and will be
1222expanded on the next re-align to span the whole table width. So, to
1223create the above table, you would only type
891f4676
RS
1224
1225@example
86f46920 1226|Name|Phone|Age|
891f4676
RS
1227|-
1228@end example
26ca33ed 1229
891f4676
RS
1230@noindent and then press @key{TAB} to align the table and start filling in
1231fields.
1232
bc07911a
CD
1233When typing text into a field, Org-mode treats @key{DEL},
1234@key{Backspace}, and all character keys in a special way, so that
1235inserting and deleting avoids shifting other fields. Also, when
1236typing @emph{immediately after the cursor was moved into a new field
1237with @kbd{@key{TAB}}, @kbd{S-@key{TAB}} or @kbd{@key{RET}}}, the
1238field is automatically made blank. If this behavior is too
1239unpredictable for you, configure the variables
1240@code{org-enable-table-editor} and @code{org-table-auto-blank-field}.
1241
891f4676
RS
1242@table @kbd
1243@tsubheading{Creation and conversion}
26ca33ed
CD
1244@kindex C-c |
1245@item C-c |
1246Convert the active region to table. If every line contains at least one
1247TAB character, the function assumes that the material is tab separated.
1248If not, lines are split at whitespace into fields. You can use a prefix
d9f6d794
CD
1249argument to indicate the minimum number of consecutive spaces required
1250to identify a field separator (default: just one).@*
26ca33ed 1251If there is no active region, this command creates an empty Org-mode
8ef8f2e6 1252table. But it's easier just to start typing, like
26ca33ed 1253@kbd{|Name|Phone|Age @key{RET} |- @key{TAB}}.
891f4676 1254
891f4676
RS
1255@tsubheading{Re-aligning and field motion}
1256@kindex C-c C-c
1257@item C-c C-c
1258Re-align the table without moving the cursor.
31e5288c 1259@c
891f4676
RS
1260@kindex @key{TAB}
1261@item @key{TAB}
1262Re-align the table, move to the next field. Creates a new row if
1263necessary.
31e5288c 1264@c
891f4676
RS
1265@kindex S-@key{TAB}
1266@item S-@key{TAB}
7837f272 1267Re-align, move to previous field.
31e5288c 1268@c
891f4676
RS
1269@kindex @key{RET}
1270@item @key{RET}
1271Re-align the table and move down to next row. Creates a new row if
1272necessary. At the beginning or end of a line, @key{RET} still does
1273NEWLINE, so it can be used to split a table.
1274
891f4676
RS
1275@tsubheading{Column and row editing}
1276@kindex M-@key{left}
1277@kindex M-@key{right}
1278@item M-@key{left}
1279@itemx M-@key{right}
26ca33ed 1280Move the current column left/right.
31e5288c 1281@c
891f4676
RS
1282@kindex M-S-@key{left}
1283@item M-S-@key{left}
1284Kill the current column.
31e5288c 1285@c
891f4676
RS
1286@kindex M-S-@key{right}
1287@item M-S-@key{right}
1288Insert a new column to the left of the cursor position.
31e5288c 1289@c
891f4676
RS
1290@kindex M-@key{up}
1291@kindex M-@key{down}
1292@item M-@key{up}
1293@itemx M-@key{down}
26ca33ed 1294Move the current row up/down.
31e5288c 1295@c
891f4676
RS
1296@kindex M-S-@key{up}
1297@item M-S-@key{up}
1298Kill the current row or horizontal line.
31e5288c 1299@c
891f4676
RS
1300@kindex M-S-@key{down}
1301@item M-S-@key{down}
1302Insert a new row above (with arg: below) the current row.
31e5288c 1303@c
891f4676
RS
1304@kindex C-c -
1305@item C-c -
7837f272
CD
1306Insert a horizontal line below current row. With prefix arg, the line
1307is created above the current line.
31e5288c 1308@c
6fd41b1f
CD
1309@kindex C-c ^
1310@item C-c ^
06341a67
CD
1311Sort the table lines in the region. The position of point indicates the
1312column to be used for sorting, and the range of lines is the range
1313between the nearest horizontal separator lines, or the entire table. If
1314point is before the first column, you will be prompted for the sorting
1315column. If there is an active region, the mark specifies the first line
1316and the sorting column, while point should be in the last line to be
1317included into the sorting. The command prompts for the sorting type
1318(alphabetically, numerically, or by time). When called with a prefix
1319argument, alphabetic sorting will be case-sensitive.
6fd41b1f 1320
891f4676 1321@tsubheading{Regions}
bc07911a
CD
1322@kindex C-c C-x M-w
1323@item C-c C-x M-w
7837f272 1324Copy a rectangular region from a table to a special clipboard. Point
891f4676
RS
1325and mark determine edge fields of the rectangle. The process ignores
1326horizontal separator lines.
31e5288c 1327@c
bc07911a
CD
1328@kindex C-c C-x C-w
1329@item C-c C-x C-w
7837f272
CD
1330Copy a rectangular region from a table to a special clipboard, and
1331blank all fields in the rectangle. So this is the ``cut'' operation.
31e5288c 1332@c
bc07911a
CD
1333@kindex C-c C-x C-y
1334@item C-c C-x C-y
525f4f90 1335Paste a rectangular region into a table.
891f4676
RS
1336The upper right corner ends up in the current field. All involved fields
1337will be overwritten. If the rectangle does not fit into the present table,
1338the table is enlarged as needed. The process ignores horizontal separator
1339lines.
31e5288c 1340@c
891f4676
RS
1341@kindex C-c C-q
1342@item C-c C-q
1343Wrap several fields in a column like a paragraph. If there is an active
1344region, and both point and mark are in the same column, the text in the
1345column is wrapped to minimum width for the given number of lines. A
1346prefix ARG may be used to change the number of desired lines. If there
1347is no region, the current field is split at the cursor position and the
1348text fragment to the right of the cursor is prepended to the field one
1349line down. If there is no region, but you specify a prefix ARG, the
26ca33ed 1350current field is made blank, and the content is appended to the field
891f4676
RS
1351above.
1352
1353@tsubheading{Calculations}
7837f272
CD
1354@cindex formula, in tables
1355@cindex calculations, in tables
891f4676
RS
1356@cindex region, active
1357@cindex active region
1358@cindex transient-mark-mode
1359@kindex C-c +
1360@item C-c +
1361Sum the numbers in the current column, or in the rectangle defined by
7837f272 1362the active region. The result is shown in the echo area and can
891f4676 1363be inserted with @kbd{C-y}.
31e5288c 1364@c
8485a053
JB
1365@kindex S-@key{RET}
1366@item S-@key{RET}
525f4f90
CD
1367When current field is empty, copy from first non-empty field above.
1368When not empty, copy current field down to next row and move cursor
1369along with it. Depending on the variable
1370@code{org-table-copy-increment}, integer field values will be
225ff037 1371incremented during copy. This key is also used by CUA-mode
8ef8f2e6 1372(@pxref{Cooperation}).
525f4f90 1373
891f4676 1374@tsubheading{Miscellaneous}
26ca33ed
CD
1375@kindex C-c `
1376@item C-c `
1377Edit the current field in a separate window. This is useful for fields
1378that are not fully visible (@pxref{Narrow columns}). When called with a
1379@kbd{C-u} prefix, just make the full field visible, so that it can be
1380edited in place.
31e5288c 1381@c
26ca33ed
CD
1382@kindex C-c @key{TAB}
1383@item C-c @key{TAB}
1384This is an alias for @kbd{C-u C-c `} to make the current field fully
1385visible.
31e5288c 1386@c
891f4676
RS
1387@item M-x org-table-import
1388Import a file as a table. The table should be TAB- or whitespace
26ca33ed 1389separated. Useful, for example, to import an Excel table or data from a
891f4676
RS
1390database, because these programs generally can write TAB-separated text
1391files. This command works by inserting the file into the buffer and
1392then converting the region to a table. Any prefix argument is passed on
1393to the converter, which uses it to determine the separator.
31e5288c
CD
1394@item C-c |
1395Tables can also be imported by pasting tabular text into the org-mode
1396buffer, selecting the pasted text with @kbd{C-x C-x} and then using the
1397@kbd{C-c |} command (see above under @i{Creation and conversion}.
1398@c
891f4676 1399@item M-x org-table-export
26ca33ed
CD
1400Export the table as a TAB-separated file. Useful for data exchange with,
1401for example, Excel or database programs.
891f4676
RS
1402@end table
1403
26ca33ed
CD
1404If you don't like the automatic table editor because it gets in your
1405way on lines which you would like to start with @samp{|}, you can turn
891f4676 1406it off with
26ca33ed 1407
891f4676
RS
1408@lisp
1409(setq org-enable-table-editor nil)
1410@end lisp
26ca33ed 1411
8ef8f2e6 1412@noindent Then the only table command that still works is
891f4676
RS
1413@kbd{C-c C-c} to do a manual re-align.
1414
31e5288c 1415@node Narrow columns, Column groups, Built-in table editor, Tables
26ca33ed
CD
1416@section Narrow columns
1417@cindex narrow columns in tables
1418
1419The width of columns is automatically determined by the table editor.
1420Sometimes a single field or a few fields need to carry more text,
d9f6d794 1421leading to inconveniently wide columns. To limit@footnote{This feature
26ca33ed 1422does not work on XEmacs.} the width of a column, one field anywhere in
67cb614c
CD
1423the column may contain just the string @samp{<N>} where @samp{N} is an
1424integer specifying the width of the column in characters. The next
1425re-align will then set the width of this column to no more than this
1426value.
26ca33ed
CD
1427
1428@example
06341a67 1429@group
26ca33ed
CD
1430|---+------------------------------| |---+--------|
1431| | | | | <6> |
1432| 1 | one | | 1 | one |
1433| 2 | two | ----\ | 2 | two |
1434| 3 | This is a long chunk of text | ----/ | 3 | This=> |
1435| 4 | four | | 4 | four |
1436|---+------------------------------| |---+--------|
06341a67 1437@end group
26ca33ed
CD
1438@end example
1439
1440@noindent
1441Fields that are wider become clipped and end in the string @samp{=>}.
1442Note that the full text is still in the buffer, it is only invisible.
31e5288c 1443To see the full text, hold the mouse over the field - a tool-tip window
26ca33ed
CD
1444will show the full content. To edit such a field, use the command
1445@kbd{C-c `} (that is @kbd{C-c} followed by the backquote). This will
1446open a new window with the full field. Edit it and finish with @kbd{C-c
1447C-c}.
1448
1449When visiting a file containing a table with narrowed columns, the
1450necessary character hiding has not yet happened, and the table needs to
1451be aligned before it looks nice. Setting the option
1452@code{org-startup-align-all-tables} will realign all tables in a file
1453upon visiting, but also slow down startup. You can also set this option
1454on a per-file basis with:
1455
1456@example
1457#+STARTUP: align
1458#+STARTUP: noalign
1459@end example
1460
31e5288c
CD
1461@node Column groups, orgtbl-mode, Narrow columns, Tables
1462@section Column groups
1463@cindex grouping columns in tables
1464
1465When Org-mode exports tables, it does so by default without vertical
1466lines because that is visually more satisfying in general. Occasionally
1467however, vertical lines can be useful to structure a table into groups
1468of columns, much like horizontal lines can do for groups of rows. In
1469order to specify column groups, you can use a special row where the
1470first field contains only @samp{/}. The further fields can either
1471contain @samp{<} to indicate that this column should start a group,
1472@samp{>} to indicate the end of a column, or @samp{<>} to make a column
1473a group of its own. Boundaries between colum groups will upon export be
1474marked with vertical lines. Here is an example:
1475
1476@example
1477| | N | N^2 | N^3 | N^4 | sqrt(n) | sqrt[4](N) |
1478|---+----+-----+-----+-----+---------+------------|
1479| / | <> | < | | > | < | > |
1480| # | 1 | 1 | 1 | 1 | 1 | 1 |
1481| # | 2 | 4 | 8 | 16 | 1.4142 | 1.1892 |
1482| # | 3 | 9 | 27 | 81 | 1.7321 | 1.3161 |
1483|---+----+-----+-----+-----+---------+------------|
1484#+TBLFM: $3=$2^2::$4=$2^3::$5=$2^4::$6=sqrt($2)::$7=sqrt(sqrt(($2))
1485@end example
1486
1487It is also sufficient to just insert the colum group starters after
1488every vertical line you'd like to have:
1489
1490@example
1491| N | N^2 | N^3 | N^4 | sqrt(n) | sqrt[4](N) |
1492|----+-----+-----+-----+---------+------------|
1493| / | < | | | < | |
1494@end example
1495
1496@node orgtbl-mode, The spreadsheet, Column groups, Tables
06341a67
CD
1497@section The Orgtbl minor mode
1498@cindex orgtbl-mode
1499@cindex minor mode for tables
1500
1501If you like the intuitive way the Org-mode table editor works, you
1502might also want to use it in other modes like text-mode or mail-mode.
1503The minor mode Orgtbl-mode makes this possible. You can always toggle
1504the mode with @kbd{M-x orgtbl-mode}. To turn it on by default, for
1505example in mail mode, use
1506
1507@lisp
1508(add-hook 'mail-mode-hook 'turn-on-orgtbl)
1509@end lisp
1510
1511Furthermore, with some special setup, it is possible to maintain tables
1512in arbitrary syntax with Orgtbl-mode. For example, it is possible to
1513construct LaTeX tables with the underlying ease and power of
31e5288c 1514Orgtbl-mode, including spreadsheet capabilities. For details, see
06341a67
CD
1515@ref{Tables in arbitrary syntax}.
1516
1517@node The spreadsheet, , orgtbl-mode, Tables
1518@section The spreadsheet
7837f272 1519@cindex calculations, in tables
cfbc5709
CD
1520@cindex spreadsheet capabilities
1521@cindex @file{calc} package
7837f272 1522
8ef8f2e6
CD
1523The table editor makes use of the Emacs @file{calc} package to implement
1524spreadsheet-like capabilities. It can also evaluate Emacs Lisp forms to
31e5288c
CD
1525derive fields from other fields. While fully featured, Org-mode's
1526implementation is not identical to other spreadsheets. For example,
1527Org-mode knows the concept of a @emph{column formula} that will be
1528applied to all non-header fields in a column without having to copy the
1529formula to each relevant field.
1530
7837f272 1531@menu
06341a67
CD
1532* References:: How to refer to another field or range
1533* Formula syntax for Calc:: Using Calc to compute stuff
1534* Formula syntax for Lisp:: Writing formulas in Emacs Lisp
1535* Field formulas:: Formulas valid for a single field
1536* Column formulas:: Formulas valid for an entire column
1537* Editing and debugging formulas:: Fixing formulas
1538* Updating the table:: Recomputing all dependent fields
fb1556f0 1539* Advanced features:: Field names, parameters and automatic recalc
7837f272
CD
1540@end menu
1541
06341a67
CD
1542@node References, Formula syntax for Calc, The spreadsheet, The spreadsheet
1543@subsection References
1544@cindex references
7837f272 1545
06341a67
CD
1546To compute fields in the table from other fields, formulas must
1547reference other fields or ranges. In Org-mode, fields can be referenced
1548by name, by absolute coordinates, and by relative coordinates. To find
1549out what the coordinates of a field are, press @kbd{C-c ?} in that
31e5288c 1550field, or press @kbd{C-c @}} to toggle the display of a grid.
fb1556f0 1551
06341a67
CD
1552@subsubheading Field references
1553@cindex field references
1554@cindex references, to fields
1555
31e5288c
CD
1556Formulas can reference the value of another field in two ways. Like in
1557any other spreadsheet, you may reference fields with a letter/number
1558combination like @code{B3}, meaning the 2nd field in the 3rd row.
1559@c Such references are always fixed to that field, they don't change
1560@c when you copy and paste a formula to a different field. So
1561@c Org-mode's @code{B3} behaves like @code{$B$3} in other spreadsheets.
1562
1563@noindent
1564Org-mode also uses another, more general operator that looks like this:
fb1556f0 1565@example
06341a67 1566@@row$column
fb1556f0
CD
1567@end example
1568
31e5288c 1569@noindent
06341a67
CD
1570Column references can be absolute like @samp{1}, @samp{2},...@samp{N},
1571or relative to the current column like @samp{+1} or @samp{-2}.
1572
1573The row specification only counts data lines and ignores horizontal
1574separator lines (hlines). You can use absolute row numbers
1575@samp{1}...@samp{N}, and row numbers relative to the current row like
1576@samp{+3} or @samp{-1}. Or specify the row relative to one of the
1577hlines: @samp{I} refers to the first hline, @samp{II} to the second etc.
1578@samp{-I} refers to the first such line above the current line,
1579@samp{+I} to the first such line below the current line. You can also
1580write @samp{III+2} which is the second data line after the third hline
1581in the table. Relative row numbers like @samp{-3} will not cross hlines
1582if the current line is too close to the hline. Instead, the value
1583directly at the hline is used.
1584
1585@samp{0} refers to the current row and column. Also, if you omit
1586either the column or the row part of the reference, the current
1587row/column is implied.
1588
31e5288c
CD
1589Org-mode's references with @emph{unsigned} numbers are fixed references
1590in the sense that if you use the same reference in the formula for two
1591different fields, the same field will be referenced each time.
1592Org-mode's references with @emph{signed} numbers are floating
1593references because the same reference operator can reference different
1594fields depending on the field being calculated by the formula.
06341a67
CD
1595
1596Here are a few examples:
1597
1598@example
1599@@2$3 @r{2nd row, 3rd column}
31e5288c 1600C2 @r{same as previous}
06341a67 1601$5 @r{column 5 in the current row}
31e5288c 1602E& @r{same as previous}
06341a67
CD
1603@@2 @r{current column, row 2}
1604@@-1$-3 @r{the field one row up, three columns to the left}
1605@@-I$2 @r{field just under hline above current row, column 2}
1606@end example
1607
1608@subsubheading Range references
1609@cindex range references
1610@cindex references, to ranges
1611
1612You may reference a rectangular range of fields by specifying two field
1613references connected by two dots @samp{..}. If both fields are in the
1614current row, you may simply use @samp{$2..$7}, but if at least one field
1615is in a different row, you need to use the general @code{@@row$column}
1616format at least for the first field (i.e the reference must start with
1617@samp{@@} in order to be interpreted correctly). Examples:
1618
1619@example
1620$1..$3 @r{First three fields in the current row.}
1621$P..$Q @r{Range, using column names (see under Advanced)}
1622@@2$1..@@4$3 @r{6 fields between these two fields.}
31e5288c 1623A2..C4 @r{Same as above.}
06341a67
CD
1624@@-1$-2..@@-1 @r{3 numbers from the column to the left, 2 up to current row}
1625@end example
fb1556f0 1626
06341a67
CD
1627@noindent Range references return a vector of values that can be fed
1628into Calc vector functions. Empty fields in ranges are normally
1629suppressed, so that the vector contains only the non-empty fields (but
1630see the @samp{E} mode switch below). If there are no non-empty fields,
1631@samp{[0]} is returned to avoid syntax errors in formulas.
1632
1633@subsubheading Named references
1634@cindex named references
1635@cindex references, named
cfbc5709
CD
1636@cindex name, of column or field
1637@cindex constants, in calculations
06341a67 1638
fb1556f0
CD
1639@samp{$name} is interpreted as the name of a column, parameter or
1640constant. Constants are defined globally through the variable
386477e3
CD
1641@code{org-table-formula-constants}, and locally (for the file) through a
1642line like
1643
1644@example
1645#+CONSTANTS: c=299792458. pi=3.14 eps=2.4e-6
1646@end example
1647
1648@noindent
4d1daf59
CD
1649Also properties (@pxref{Properties and columns}) can be used as
1650constants in table formulas: For a property @samp{:XYZ:} use the name
1651@samp{$PROP_XYZ}, and the property will be searched in the current
1652outline entry and in the hierarchy above it. If you have the
1653@file{constants.el} package, it will also be used to resolve constants,
1654including natural constants like @samp{$h} for Planck's constant, and
1655units like @samp{$km} for kilometers@footnote{@file{Constant.el} can
1656supply the values of constants in two different unit systems, @code{SI}
1657and @code{cgs}. Which one is used depends on the value of the variable
31e5288c
CD
1658@code{constants-unit-system}. You can use the @code{#+STARTUP} options
1659@code{constSI} and @code{constcgs} to set this value for the current
1660buffer.}. Column names and parameters can be specified in special table
1661lines. These are described below, see @ref{Advanced features}. All
1662names must start with a letter, and further consist of letters and
1663numbers.
7837f272 1664
06341a67
CD
1665@node Formula syntax for Calc, Formula syntax for Lisp, References, The spreadsheet
1666@subsection Formula syntax for Calc
1667@cindex formula syntax, Calc
1668@cindex syntax, of formulas
1669
1670A formula can be any algebraic expression understood by the Emacs
91c28a54 1671@file{Calc} package. @b{Note that @file{calc} has the
06341a67 1672non-standard convention that @samp{/} has lower precedence than
91c28a54 1673@samp{*}, so that @samp{a/b*c} is interpreted as @samp{a/(b*c)}.} Before
06341a67
CD
1674evaluation by @code{calc-eval} (@pxref{Calling Calc from
1675Your Programs,calc-eval,Calling calc from Your Lisp Programs,calc,GNU
1676Emacs Calc Manual}),
31e5288c 1677@c FIXME: The link to the calc manual in HTML does not work.
06341a67
CD
1678variable substitution takes place according to the rules described above.
1679@cindex vectors, in table calculations
1680The range vectors can be directly fed into the calc vector functions
1681like @samp{vmean} and @samp{vsum}.
1682
cfbc5709
CD
1683@cindex format specifier
1684@cindex mode, for @file{calc}
7837f272 1685A formula can contain an optional mode string after a semicolon. This
06341a67
CD
1686string consists of flags to influence Calc and other modes during
1687execution. By default, Org-mode uses the standard calc modes (precision
168812, angular units degrees, fraction and symbolic modes off. The display
1689format, however, has been changed to @code{(float 5)} to keep tables
1690compact. The default settings can be configured using the variable
1691@code{org-calc-default-modes}.
1692
1693@example
1694p20 @r{switch the internal precision to 20 digits}
1695n3 s3 e2 f4 @r{normal, scientific, engineering, or fixed display format}
1696D R @r{angle modes: degrees, radians}
1697F S @r{fraction and symbolic modes}
1698N @r{interpret all fields as numbers, use 0 for non-numbers}
1699T @r{force text interpretation}
1700E @r{keep empty fields in ranges}
1701@end example
1702
1703@noindent
1704In addition, you may provide a @code{printf} format specifier to
1705reformat the final result. A few examples:
26ca33ed 1706
7837f272 1707@example
8ef8f2e6
CD
1708$1+$2 @r{Sum of first and second field}
1709$1+$2;%.2f @r{Same, format result to two decimals}
1710exp($2)+exp($1) @r{Math functions can be used}
31e5288c 1711$0;%.1f @r{Reformat current cell to 1 decimal}
8ef8f2e6
CD
1712($3-32)*5/9 @r{Degrees F -> C conversion}
1713$c/$1/$cm @r{Hz -> cm conversion, using @file{constants.el}}
1714tan($1);Dp3s1 @r{Compute in degrees, precision 3, display SCI 1}
1715sin($1);Dp3%.1e @r{Same, but use printf specifier for display}
1716vmean($2..$7) @r{Compute column range mean, using vector function}
06341a67 1717vmean($2..$7);EN @r{Same, but treat empty fields as 0}
8ef8f2e6
CD
1718taylor($3,x=7,2) @r{taylor series of $3, at x=7, second degree}
1719@end example
1720
31e5288c
CD
1721Calc also contains a complete set of logical operations. For example
1722
1723@example
1724if($1<20,teen,string("")) @r{``teen'' if age $1 less than 20, else empty}
1725@end example
1726
06341a67 1727@node Formula syntax for Lisp, Field formulas, Formula syntax for Calc, The spreadsheet
8ef8f2e6
CD
1728@subsection Emacs Lisp forms as formulas
1729@cindex Lisp forms, as table formulas
1730
06341a67 1731It is also possible to write a formula in Emacs Lisp; this can be useful
31e5288c
CD
1732for string manipulation and control structures, if the Calc's
1733functionality is not enough. If a formula starts with a single quote
1734followed by an opening parenthesis, then it is evaluated as a lisp form.
1735The evaluation should return either a string or a number. Just as with
1736@file{calc} formulas, you can specify modes and a printf format after a
219513ac
CD
1737semicolon. With Emacs Lisp forms, you need to be concious about the way
1738field references are interpolated into the form. By default, a
1739reference will be interpolated as a Lisp string (in double quotes)
1740containing the field. If you provide the @samp{N} mode switch, all
1741referenced elements will be numbers (non-number fields will be zero) and
1742interpolated as Lisp numbers, without quotes. If you provide the
1743@samp{L} flag, all fields will be interpolated literally, without quotes.
1744I.e., if you want a reference to be interpreted as a string by the Lisp
1745form, enclode the reference operator itself in double quotes, like
1746@code{"$3"}. Ranges are inserted as space-separated fields, so you can
1747embed them in list or vector syntax. A few examples, note how the
1748@samp{N} mode is used when we do computations in lisp.
8ef8f2e6
CD
1749
1750@example
06341a67
CD
1751@r{Swap the first two characters of the content of column 1}
1752 '(concat (substring $1 1 2) (substring $1 0 1) (substring $1 2))
1753@r{Add columns 1 and 2, equivalent to the Calc's @code{$1+$2}}
1754 '(+ $1 $2);N
1755@r{Compute the sum of columns 1-4, like Calc's @code{vsum($1..$4)}}
1756 '(apply '+ '($1..$4));N
7837f272
CD
1757@end example
1758
06341a67
CD
1759@node Field formulas, Column formulas, Formula syntax for Lisp, The spreadsheet
1760@subsection Field formulas
1761@cindex field formula
1762@cindex formula, for individual table field
1763
1764To assign a formula to a particular field, type it directly into the
1765field, preceded by @samp{:=}, for example @samp{:=$1+$2}. When you
1766press @key{TAB} or @key{RET} or @kbd{C-c C-c} with the cursor still in
1767the field, the formula will be stored as the formula for this field,
1768evaluated, and the current field replaced with the result.
1769
1770Formulas are stored in a special line starting with @samp{#+TBLFM:}
1771directly below the table. If you typed the equation in the 4th field of
1772the 3rd data line in the table, the formula will look like
31e5288c 1773@samp{@@3$4=$1+$2}. When inserting/deleting/swapping column and rows
06341a67 1774with the appropriate commands, @i{absolute references} (but not relative
31e5288c
CD
1775ones) in stored formulas are modified in order to still reference the
1776same field. Of cause this is not true if you edit the table structure
1777with normal editing commands - then you must fix the equations yourself.
06341a67
CD
1778
1779Instead of typing an equation into the field, you may also use the
1780following command
1781
1782@table @kbd
1783@kindex C-u C-c =
1784@item C-u C-c =
1785Install a new formula for the current field. The command prompts for a
1786formula, with default taken from the @samp{#+TBLFM:} line, applies
1787it to the current field and stores it.
1788@end table
1789
1790@node Column formulas, Editing and debugging formulas, Field formulas, The spreadsheet
fb1556f0 1791@subsection Column formulas
cfbc5709
CD
1792@cindex column formula
1793@cindex formula, for table column
7837f272 1794
06341a67
CD
1795Often in a table, the same formula should be used for all fields in a
1796particular column. Instead of having to copy the formula to all fields
1797in that column, org-mode allows to assign a single formula to an entire
31e5288c
CD
1798column. If the table contains horizontal separator hlines, everything
1799before the first such line is considered part of the table @emph{header}
1800and will not be modified by column formulas.
06341a67
CD
1801
1802To assign a formula to a column, type it directly into any field in the
1803column, preceded by an equal sign, like @samp{=$1+$2}. When you press
7837f272 1804@key{TAB} or @key{RET} or @kbd{C-c C-c} with the cursor still in the
06341a67
CD
1805field, the formula will be stored as the formula for the current column,
1806evaluated and the current field replaced with the result. If the field
1807contains only @samp{=}, the previously stored formula for this column is
1808used. For each column, Org-mode will only remember the most recently
1809used formula. In the @samp{TBLFM:} line, column formulas will look like
1810@samp{$4=$1+$2}.
7837f272
CD
1811
1812Instead of typing an equation into the field, you may also use the
06341a67
CD
1813following command:
1814
1815@table @kbd
1816@kindex C-c =
1817@item C-c =
1818Install a new formula for the current column and replace current field
1819with the result of the formula. The command prompts for a formula, with
1820default taken from the @samp{#+TBLFM} line, applies it to the current
1821field and stores it. With a numerical prefix (e.g. @kbd{C-5 C-c =})
1822will apply it to that many consecutive fields in the current column.
1823@end table
1824
1825
1826@node Editing and debugging formulas, Updating the table, Column formulas, The spreadsheet
1827@subsection Editing and Debugging formulas
1828@cindex formula editing
1829@cindex editing, of table formulas
7837f272 1830
06341a67
CD
1831You can edit individual formulas in the minibuffer or directly in the
1832field. Org-mode can also prepare a special buffer with all active
31e5288c
CD
1833formulas of a table. When offering a formula for editing, Org-mode
1834converts references to the standard format (like @code{B3} or @code{D&})
1835if possible. If you prefer to only work with the internal format (like
1836@code{@@3$2} or @code{$4}), configure the variable
1837@code{org-table-use-standard-references}.
06341a67
CD
1838
1839@table @kbd
1840@kindex C-c =
1841@kindex C-u C-c =
1842@item C-c =
1843@itemx C-u C-c =
1844Edit the formula associated with the current column/field in the
1845minibuffer. See @ref{Column formulas} and @ref{Field formulas}.
1846@kindex C-u C-u C-c =
1847@item C-u C-u C-c =
1848Re-insert the active formula (either a
1849field formula, or a column formula) into the current field, so that you
1850can edit it directly in the field. The advantage over editing in the
1851minibuffer is that you can use the command @kbd{C-c ?}.
1852@kindex C-c ?
1853@item C-c ?
1854While editing a formula in a table field, highlight the field(s)
1855referenced by the reference at the cursor position in the formula.
31e5288c
CD
1856@kindex C-c @}
1857@item C-c @}
1858Toggle the display of row and column numbers for a table, using
1859overlays. These are updated each time the table is aligned, you can
1860force it with @kbd{C-c C-c}.
1861@kindex C-c @{
1862@item C-c @{
1863Toggle the formula debugger on and off. See below.
06341a67
CD
1864@kindex C-c '
1865@item C-c '
1866Edit all formulas for the current table in a special buffer, where the
31e5288c
CD
1867formulas will be displayed one per line. If the current field has an
1868active formula, the cursor in the formula editor will mark it.
06341a67
CD
1869While inside the special buffer, Org-mode will automatically highlight
1870any field or range reference at the cursor position. You may edit,
1871remove and add formulas, and use the following commands:
1872@table @kbd
1873@kindex C-c C-c
31e5288c 1874@kindex C-x C-s
06341a67 1875@item C-c C-c
31e5288c
CD
1876@itemx C-x C-s
1877Exit the formula editor and store the modified formulas. With @kbd{C-u}
1878prefix, also apply the new formulas to the entire table.
06341a67
CD
1879@kindex C-c C-q
1880@item C-c C-q
31e5288c
CD
1881Exit the formula editor without installing changes.
1882@kindex C-c C-r
1883@item C-c C-r
1884Toggle all references in the formula editor between standard (like
1885@code{B3}) and internal (like @code{@@3$2}).
06341a67
CD
1886@kindex @key{TAB}
1887@item @key{TAB}
1888Pretty-print or indent lisp formula at point. When in a line containing
1889a lisp formula, format the formula according to Emacs Lisp rules.
1890Another @key{TAB} collapses the formula back again. In the open
1891formula, @key{TAB} re-indents just like in Emacs-lisp-mode.
1892@kindex M-@key{TAB}
1893@item M-@key{TAB}
1894Complete Lisp symbols, just like in Emacs-lisp-mode.
1895@kindex S-@key{up}
1896@kindex S-@key{down}
31e5288c
CD
1897@kindex S-@key{left}
1898@kindex S-@key{right}
1899@item S-@key{up}/@key{down}/@key{left}/@key{right}
1900Shift the reference at point. For example, if the reference is
1901@code{B3} and you press @kbd{S-@key{right}}, it will become @code{C3}.
1902This also works for relative references, and for hline references.
1903@kindex M-S-@key{up}
1904@kindex M-S-@key{down}
1905@item M-S-@key{up}/@key{down}
1906Move the test line for column formulas in the Org-mode buffer up and
1907down.
06341a67
CD
1908@kindex M-@key{up}
1909@kindex M-@key{down}
1910@item M-@key{up}/@key{down}
1911Scroll the window displaying the table.
06341a67
CD
1912@kindex C-c @}
1913@item C-c @}
31e5288c
CD
1914Turn the coordinate grid in the table on and off.
1915@end table
06341a67
CD
1916@end table
1917
1918Making a table field blank does not remove the formula associated with
1919the field, because that is stored in a different line (the @samp{TBLFM}
1920line) - during the next recalculation the field will be filled again.
1921To remove a formula from a field, you have to give an empty reply when
1922prompted for the formula, or to edit the @samp{#+TBLFM} line.
1923
1924@kindex C-c C-c
1925You may edit the @samp{#+TBLFM} directly and re-apply the changed
1926equations with @kbd{C-c C-c} in that line, or with the normal
1927recalculation commands in the table.
1928
1929@subsubheading Debugging formulas
1930@cindex formula debugging
1931@cindex debugging, of table formulas
1932When the evaluation of a formula leads to an error, the field content
1933becomes the string @samp{#ERROR}. If you would like see what is going
1934on during variable substitution and calculation in order to find a bug,
1935turn on formula debugging in the @code{Tbl} menu and repeat the
31e5288c
CD
1936calculation, for example by pressing @kbd{C-u C-u C-c = @key{RET}} in a
1937field. Detailed information will be displayed.
06341a67
CD
1938
1939@node Updating the table, Advanced features, Editing and debugging formulas, The spreadsheet
1940@subsection Updating the Table
cfbc5709 1941@cindex recomputing table fields
06341a67
CD
1942@cindex updating, table
1943
1944Recalculation of a table is normally not automatic, but needs to be
1945triggered by a command. See @ref{Advanced features} for a way to make
1946recalculation at least semi-automatically.
1947
1948In order to recalculate a line of a table or the entire table, use the
1949following commands:
1950
1951@table @kbd
1952@kindex C-c *
1953@item C-c *
1954Recalculate the current row by first applying the stored column formulas
1955from left to right, and all field formulas in the current row.
31e5288c 1956@c
06341a67
CD
1957@kindex C-u C-c *
1958@item C-u C-c *
1959@kindex C-u C-c C-c
1960@itemx C-u C-c C-c
1961Recompute the entire table, line by line. Any lines before the first
1962hline are left alone, assuming that these are part of the table header.
31e5288c 1963@c
06341a67
CD
1964@kindex C-u C-u C-c *
1965@item C-u C-u C-c *
1966Iterate the table by recomputing it until no further changes occur.
1967This may be necessary if some computed fields use the value of other
1968fields that are computed @i{later} in the calculation sequence.
1969@end table
1970
06341a67 1971@node Advanced features, , Updating the table, The spreadsheet
fb1556f0
CD
1972@subsection Advanced features
1973
06341a67
CD
1974If you want the recalculation of fields to happen automatically, or if
1975you want to be able to assign @i{names} to fields and columns, you need
1976to reserve the first column of the table for special marking characters.
1977@table @kbd
1978@kindex C-#
1979@item C-#
1980Rotate the calculation mark in first column through the states @samp{},
1981@samp{#}, @samp{*}, @samp{!}, @samp{$}. The meaning of these characters
1982is discussed below. When there is an active region, change all marks in
1983the region.
1984@end table
1985
1986Here is an example of a table that collects exam results of students and
1987makes use of these features:
26ca33ed 1988
7837f272
CD
1989@example
1990@group
1991|---+---------+--------+--------+--------+-------+------|
1992| | Student | Prob 1 | Prob 2 | Prob 3 | Total | Note |
1993|---+---------+--------+--------+--------+-------+------|
1994| ! | | P1 | P2 | P3 | Tot | |
1995| # | Maximum | 10 | 15 | 25 | 50 | 10.0 |
a5ab1eac 1996| ^ | | m1 | m2 | m3 | mt | |
7837f272
CD
1997|---+---------+--------+--------+--------+-------+------|
1998| # | Peter | 10 | 8 | 23 | 41 | 8.2 |
fb1556f0 1999| # | Sara | 6 | 14 | 19 | 39 | 7.8 |
7837f272
CD
2000| # | Sam | 2 | 4 | 3 | 9 | 1.8 |
2001|---+---------+--------+--------+--------+-------+------|
fb1556f0
CD
2002| | Average | | | | 29.7 | |
2003| ^ | | | | | at | |
7837f272
CD
2004| $ | max=50 | | | | | |
2005|---+---------+--------+--------+--------+-------+------|
06341a67 2006#+TBLFM: $6=vsum($P1..$P3)::$7=10*$Tot/$max;%.1f::$at=vmean(@@-II..@@-I);%.1f
7837f272
CD
2007@end group
2008@end example
7837f272 2009
fb1556f0 2010@noindent @b{Important}: Please note that for these special tables,
06341a67
CD
2011recalculating the table with @kbd{C-u C-c *} will only affect rows that
2012are marked @samp{#} or @samp{*}, and fields that have a formula assigned
2013to the field itself. The column formulas are not applied in rows with
2014empty first field.
fb1556f0 2015
cfbc5709 2016@cindex marking characters, tables
fb1556f0
CD
2017The marking characters have the following meaning:
2018@table @samp
2019@item !
2020The fields in this line define names for the columns, so that you may
2021refer to a column as @samp{$Tot} instead of @samp{$6}.
2022@item ^
6fd41b1f 2023This row defines names for the fields @emph{above} the row. With such
fb1556f0 2024a definition, any formula in the table may use @samp{$m1} to refer to
06341a67
CD
2025the value @samp{10}. Also, if you assign a formula to a names field, it
2026will be stored as @samp{$name=...}.
fb1556f0
CD
2027@item _
2028Similar to @samp{^}, but defines names for the fields in the row
26ca33ed 2029@emph{below}.
fb1556f0
CD
2030@item $
2031Fields in this row can define @emph{parameters} for formulas. For
2032example, if a field in a @samp{$} row contains @samp{max=50}, then
2033formulas in this table can refer to the value 50 using @samp{$max}.
2034Parameters work exactly like constants, only that they can be defined on
06341a67 2035a per-table basis.
fb1556f0
CD
2036@item #
2037Fields in this row are automatically recalculated when pressing
2038@key{TAB} or @key{RET} or @kbd{S-@key{TAB}} in this row. Also, this row
2039is selected for a global recalculation with @kbd{C-u C-c *}. Unmarked
2040lines will be left alone by this command.
2041@item *
2042Selects this line for global recalculation with @kbd{C-u C-c *}, but
2043not for automatic recalculation. Use this when automatic
2044recalculation slows down editing too much.
26ca33ed
CD
2045@item
2046Unmarked lines are exempt from recalculation with @kbd{C-u C-c *}.
fb1556f0
CD
2047All lines that should be recalculated should be marked with @samp{#}
2048or @samp{*}.
06341a67
CD
2049@item /
2050Do not export this line. Useful for lines that contain the narrowing
2051@samp{<N>} markers.
fb1556f0
CD
2052@end table
2053
06341a67
CD
2054Finally, just to whet your appetite on what can be done with the
2055fantastic @file{calc} package, here is a table that computes the Taylor
2056series of degree @code{n} at location @code{x} for a couple of functions
2057(homework: try that with Excel :-)
7837f272
CD
2058
2059@example
2060@group
2061|---+-------------+---+-----+--------------------------------------|
2062| | Func | n | x | Result |
2063|---+-------------+---+-----+--------------------------------------|
2064| # | exp(x) | 1 | x | 1 + x |
2065| # | exp(x) | 2 | x | 1 + x + x^2 / 2 |
2066| # | exp(x) | 3 | x | 1 + x + x^2 / 2 + x^3 / 6 |
2067| # | x^2+sqrt(x) | 2 | x=0 | x*(0.5 / 0) + x^2 (2 - 0.25 / 0) / 2 |
2068| # | x^2+sqrt(x) | 2 | x=1 | 2 + 2.5 x - 2.5 + 0.875 (x - 1)^2 |
2069| * | tan(x) | 3 | x | 0.0175 x + 1.77e-6 x^3 |
2070|---+-------------+---+-----+--------------------------------------|
2071#+TBLFM: $5=taylor($2,$4,$3);n3
2072@end group
2073@end example
2074
56c91423 2075@node Hyperlinks, TODO items, Tables, Top
891f4676
RS
2076@chapter Hyperlinks
2077@cindex hyperlinks
2078
8ef8f2e6
CD
2079Just like HTML, Org-mode provides links inside a file, and external
2080links to other files, Usenet articles, emails, and much more.
891f4676
RS
2081
2082@menu
26ca33ed
CD
2083* Link format:: How links in Org-mode are formatted
2084* Internal links:: Links to other places in the current file
2085* External links:: URL-like links to the world
67cb614c 2086* Handling links:: Creating, inserting and following
86f46920 2087* Link abbreviations:: Shortcuts for writing complex links
8ef8f2e6
CD
2088* Search options:: Linking to a specific location
2089* Custom searches:: When the default search is not enough
891f4676
RS
2090* Remember:: Org-trees store quick notes
2091@end menu
2092
26ca33ed
CD
2093@node Link format, Internal links, Hyperlinks, Hyperlinks
2094@section Link format
2095@cindex link format
2096@cindex format, of links
2097
2098Org-mode will recognize plain URL-like links and activate them as
8ef8f2e6 2099clickable links. The general link format, however, looks like this:
26ca33ed
CD
2100
2101@example
2102[[link][description]] @r{or alternatively} [[link]]
2103@end example
2104
2105Once a link in the buffer is complete (all brackets present), Org-mode
2106will change the display so that @samp{description} is displayed instead
2107of @samp{[[link][description]]} and @samp{link} is displayed instead of
2108@samp{[[link]]}. Links will be highlighted in the face @code{org-link},
2109which by default is an underlined face. You can directly edit the
2110visible part of a link. Note that this can be either the @samp{link}
6a04ed1c 2111part (if there is no description) or the @samp{description} part. To
26ca33ed
CD
2112edit also the invisible @samp{link} part, use @kbd{C-c C-l} with the
2113cursor on the link.
2114
2115If you place the cursor at the beginning or just behind the end of the
2116displayed text and press @key{BACKSPACE}, you will remove the
2117(invisible) bracket at that location. This makes the link incomplete
2118and the internals are again displayed as plain text. Inserting the
8ef8f2e6 2119missing bracket hides the link internals again. To show the
26ca33ed
CD
2120internal structure of all links, use the menu entry
2121@code{Org->Hyperlinks->Literal links}.
2122
2123@node Internal links, External links, Link format, Hyperlinks
2124@section Internal links
7b93e84b
CD
2125@cindex internal links
2126@cindex links, internal
86f46920 2127@cindex targets, for links
7b93e84b 2128
67cb614c
CD
2129If the link does not look like a URL, it is considered to be internal in
2130the current file. Links such as @samp{[[My Target]]} or @samp{[[My
2131Target][Find my target]]} lead to a text search in the current file.
2132The link can be followed with @kbd{C-c C-o} when the cursor is on the
2133link, or with a mouse click (@pxref{Handling links}). The preferred
8ef8f2e6 2134match for such a link is a dedicated target: the same string in double
06341a67 2135angular brackets. Targets may be located anywhere; sometimes it is
8ef8f2e6 2136convenient to put them into a comment line. For example
26ca33ed 2137
7b93e84b 2138@example
6bae0337 2139# <<My Target>>
7b93e84b
CD
2140@end example
2141
6bef8c45 2142@noindent In HTML export (@pxref{HTML export}), such targets will become
8ef8f2e6 2143named anchors for direct access through @samp{http} links@footnote{Note
219513ac
CD
2144that text before the first headline is usually not exported, so the
2145first such target should be after the first headline.}.
6bef8c45 2146
26ca33ed 2147If no dedicated target exists, Org-mode will search for the words in the
67cb614c
CD
2148link. In the above example the search would be for @samp{my target}.
2149Links starting with a star like @samp{*My Target} restrict the search to
2150headlines. When searching, Org-mode will first try an exact match, but
2151then move on to more and more lenient searches. For example, the link
2152@samp{[[*My Targets]]} will find any of the following:
26ca33ed 2153
7b93e84b
CD
2154@example
2155** My targets
2156** TODO my targets are bright
2157** my 20 targets are
2158@end example
26ca33ed
CD
2159
2160To insert a link targeting a headline, in-buffer completion can be used.
2161Just type a star followed by a few optional letters into the buffer and
2162press @kbd{M-@key{TAB}}. All headlines in the current buffer will be
67cb614c 2163offered as completions. @xref{Handling links}, for more commands
6bae0337
CD
2164creating links.
2165
2166Following a link pushes a mark onto Org-mode's own mark ring. You can
2167return to the previous position with @kbd{C-c &}. Using this command
2168several times in direct succession goes back to positions recorded
2169earlier.
2170
2171@menu
2172* Radio targets:: Make targets trigger links in plain text.
6bae0337
CD
2173@end menu
2174
06341a67 2175@node Radio targets, , Internal links, Internal links
6bae0337 2176@subsection Radio targets
86f46920
CD
2177@cindex radio targets
2178@cindex targets, radio
2179@cindex links, radio targets
6bae0337
CD
2180
2181You can configure Org-mode to link any occurrences of certain target
2182names in normal text. So without explicitly creating a link, the text
2183connects to the target radioing its position. Radio targets are
2184enclosed by triple angular brackets. For example, a target
2185@samp{<<<My Target>>>} causes each occurrence of @samp{my target} in
2186normal text to become activated as a link. The Org-mode file is
2187scanned automatically for radio targets only when the file is first
2188loaded into Emacs. To update the target list during editing, press
2189@kbd{C-c C-c} with the cursor on or at a target.
2190
67cb614c 2191@node External links, Handling links, Internal links, Hyperlinks
26ca33ed 2192@section External links
cfbc5709 2193@cindex links, external
7b93e84b
CD
2194@cindex external links
2195@cindex links, external
891f4676
RS
2196@cindex GNUS links
2197@cindex BBDB links
7837f272
CD
2198@cindex URL links
2199@cindex file links
891f4676
RS
2200@cindex VM links
2201@cindex RMAIL links
2202@cindex WANDERLUST links
6bae0337 2203@cindex MH-E links
891f4676
RS
2204@cindex USENET links
2205@cindex SHELL links
8ef8f2e6
CD
2206@cindex Info links
2207@cindex elisp links
891f4676 2208
8ef8f2e6
CD
2209Org-mode supports links to files, websites, Usenet and email messages,
2210and BBDB database entries. External links are URL-like locators. They
2211start with a short identifying string followed by a colon. There can be
2212no space after the colon. The following list shows examples for each
2213link type.
891f4676
RS
2214
2215@example
8ef8f2e6
CD
2216http://www.astro.uva.nl/~dominik @r{on the web}
2217file:/home/dominik/images/jupiter.jpg @r{file, absolute path}
2218file:papers/last.pdf @r{file, relative path}
2219news:comp.emacs @r{Usenet link}
2220mailto:adent@@galaxy.net @r{Mail link}
2221vm:folder @r{VM folder link}
2222vm:folder#id @r{VM message link}
2223vm://myself@@some.where.org/folder#id @r{VM on remote machine}
2224wl:folder @r{WANDERLUST folder link}
2225wl:folder#id @r{WANDERLUST message link}
2226mhe:folder @r{MH-E folder link}
2227mhe:folder#id @r{MH-E message link}
2228rmail:folder @r{RMAIL folder link}
2229rmail:folder#id @r{RMAIL message link}
2230gnus:group @r{GNUS group link}
2231gnus:group#id @r{GNUS article link}
2232bbdb:Richard Stallman @r{BBDB link}
2233shell:ls *.org @r{A shell command}
2234elisp:(find-file-other-frame "Elisp.org") @r{An elisp form to evaluate}
891f4676
RS
2235@end example
2236
26ca33ed
CD
2237A link should be enclosed in double brackets and may contain a
2238descriptive text to be displayed instead of the url (@pxref{Link
2239format}), for example:
2240
2241@example
2242[[http://www.gnu.org/software/emacs/][GNU Emacs]]
2243@end example
891f4676 2244
06341a67
CD
2245@noindent
2246If the description is a file name or URL that points to an image, HTML
2247export (@pxref{HTML export}) will inline the image as a clickable
2248button. If there is no description at all and the link points to an
2249image,
2250that image will be inlined into the exported HTML file.
2251
26ca33ed
CD
2252@cindex angular brackets, around links
2253@cindex plain text external links
2254Org-mode also finds external links in the normal text and activates them
2255as links. If spaces must be part of the link (for example in
06341a67
CD
2256@samp{bbdb:Richard Stallman}), or if you need to remove ambiguities
2257about the end of the link, enclose them in angular brackets.
7b93e84b 2258
86f46920 2259@node Handling links, Link abbreviations, External links, Hyperlinks
67cb614c 2260@section Handling links
86f46920 2261@cindex links, handling
7b93e84b
CD
2262
2263Org-mode provides methods to create a link in the correct syntax, to
2264insert it into an org-mode file, and to follow the link.
2265
891f4676
RS
2266@table @kbd
2267@kindex C-c l
7b93e84b 2268@cindex storing links
891f4676
RS
2269@item C-c l
2270Store a link to the current location. This is a @emph{global} command
2271which can be used in any buffer to create a link. The link will be
67cb614c
CD
2272stored for later insertion into an Org-mode buffer (see below). For
2273Org-mode files, if there is a @samp{<<target>>} at the cursor, the link
2274points to the target. Otherwise it points to the current headline. For
2275VM, RMAIL, WANDERLUST, MH-E, GNUS and BBDB buffers, the link will
8ef8f2e6 2276indicate the current article/entry. For W3 and W3M buffers, the link
67cb614c 2277goes to the current URL. For any other files, the link will point to
8ef8f2e6 2278the file, with a search string (@pxref{Search options}) pointing to the
67cb614c 2279contents of the current line. If there is an active region, the
8ef8f2e6
CD
2280selected words will form the basis of the search string. If the
2281automatically created link is not working correctly or accurately
2282enough, you can write custom functions to select the search string and
2283to do the search for particular file types - see @ref{Custom searches}.
a1f058c6 2284The key binding @kbd{C-c l} is only a suggestion - see @ref{Installation}.
31e5288c 2285@c
891f4676 2286@kindex C-c C-l
cfbc5709 2287@cindex link completion
7837f272 2288@cindex completion, of links
cfbc5709 2289@cindex inserting links
891f4676 2290@item C-c C-l
26ca33ed
CD
2291Insert a link. This prompts for a link to be inserted into the buffer.
2292You can just type a link, using text for an internal link, or one of the
06341a67
CD
2293link type prefixes mentioned in the examples above. All links stored
2294during the current session are part of the history for this prompt, so
31e5288c
CD
2295you can access them with @key{up} and @key{down}. Completion, on the
2296other hand, will help you to insert valid link prefixes like
2297@samp{http:} or @samp{ftp:}, including the prefixes defined through link
2298abbreviations (@pxref{Link abbreviations}). The link will be inserted
2299into the buffer@footnote{After insertion of a stored link, the link will
2300be removed from the list of stored links. To keep it in the list later
5aafad2e 2301use, use a triple @kbd{C-u} prefix to @kbd{C-c C-l}, or configure the
31e5288c
CD
2302option @code{org-keep-stored-link-after-insertion}.}, along with a
2303descriptive text. If some text was selected when this command is
2304called, the selected text becomes the default description.@* Note that
2305you don't have to use this command to insert a link. Links in Org-mode
2306are plain text, and you can type or paste them straight into the buffer.
2307By using this command, the links are automatically enclosed in double
2308brackets, and you will be asked for the optional descriptive text.
2309@c
06341a67
CD
2310@c If the link is a @samp{file:} link and
2311@c the linked file is located in the same directory as the current file or
2312@c a subdirectory of it, the path of the file will be inserted relative to
2313@c the current directory.
31e5288c 2314@c
26ca33ed
CD
2315@kindex C-u C-c C-l
2316@cindex file name completion
2317@cindex completion, of file names
2318@item C-u C-c C-l
2319When @kbd{C-c C-l} is called with a @kbd{C-u} prefix argument, a link to
2320a file will be inserted and you may use file name completion to select
2321the name of the file. The path to the file is inserted relative to the
2322directory of the current org file, if the linked file is in the current
6bef8c45
CD
2323directory or in a subdirectory of it, or if the path is written relative
2324to the current directory using @samp{../}. Otherwise an absolute path
2325is used, if possible with @samp{~/} for your home directory. You can
2326force an absolute path with two @kbd{C-u} prefixes.
31e5288c
CD
2327@c
2328@item C-c C-l @r{(with cursor on existing link)}
8ef8f2e6 2329When the cursor is on an existing link, @kbd{C-c C-l} allows you to edit the
26ca33ed 2330link and description parts of the link.
31e5288c 2331@c
cfbc5709 2332@cindex following links
891f4676
RS
2333@kindex C-c C-o
2334@item C-c C-o
2335Open link at point. This will launch a web browser for URLs (using
26ca33ed
CD
2336@command{browse-url-at-point}), run vm/mh-e/wanderlust/rmail/gnus/bbdb
2337for the corresponding links, and execute the command in a shell link.
2338When the cursor is on an internal link, this commands runs the
8ef8f2e6 2339corresponding search. When the cursor is on a TAG list in a headline,
26ca33ed
CD
2340it creates the corresponding TAGS view. If the cursor is on a time
2341stamp, it compiles the agenda for that date. Furthermore, it will visit
a1f058c6
CD
2342text and remote files in @samp{file:} links with Emacs and select a
2343suitable application for local non-text files. Classification of files
2344is based on file extension only. See option @code{org-file-apps}. If
2345you want to override the default application and visit the file with
2346Emacs, use a @kbd{C-u} prefix.
31e5288c 2347@c
891f4676 2348@kindex mouse-2
5b10c9c4 2349@kindex mouse-1
891f4676 2350@item mouse-2
5b10c9c4 2351@itemx mouse-1
8ef8f2e6 2352On links, @kbd{mouse-2} will open the link just as @kbd{C-c C-o}
5b10c9c4 2353would. Under Emacs 22, also @kbd{mouse-1} will follow a link.
31e5288c 2354@c
891f4676
RS
2355@kindex mouse-3
2356@item mouse-3
86f46920
CD
2357Like @kbd{mouse-2}, but force file links to be opened with Emacs, and
2358internal links to be displayed in another window@footnote{See the
2359variable @code{org-display-internal-link-with-indirect-buffer}}.
31e5288c 2360@c
6bae0337
CD
2361@cindex mark ring
2362@kindex C-c %
2363@item C-c %
2364Push the current position onto the mark ring, to be able to return
2365easily. Commands following an internal link do this automatically.
31e5288c 2366@c
6bae0337
CD
2367@cindex links, returning to
2368@kindex C-c &
2369@item C-c &
2370Jump back to a recorded position. A position is recorded by the
2371commands following internal links, and by @kbd{C-c %}. Using this
2372command several times in direct succession moves through a ring of
2373previously recorded positions.
31e5288c 2374@c
06341a67
CD
2375@kindex C-c C-x C-n
2376@kindex C-c C-x C-p
2377@cindex links, finding next/previous
2378@item C-c C-x C-n
2379@itemx C-c C-x C-p
2380Move forward/backward to the next link in the buffer. At the limit of
2381the buffer, the search fails once, and then wraps around. The key
2382bindings for this are really too long, you might want to bind this also
2383to @kbd{C-n} and @kbd{C-p}
2384@lisp
2385(add-hook 'org-load-hook
2386 (lambda ()
2387 (define-key 'org-mode-map "\C-n" 'org-next-link)
2388 (define-key 'org-mode-map "\C-p" 'org-previous-link)))
2389@end lisp
891f4676
RS
2390@end table
2391
86f46920 2392@node Link abbreviations, Search options, Handling links, Hyperlinks
06341a67 2393@section Link abbreviations
86f46920
CD
2394@cindex link abbreviations
2395@cindex abbreviation, links
2396
2397Long URLs can be cumbersome to type, and often many similar links are
2398needed in a document. For this you can use link abbreviations. An
2399abbreviated link looks like this
2400
2401@example
06341a67 2402[[linkword:tag][description]]
86f46920
CD
2403@end example
2404
2405@noindent
2406where the tag is optional. Such abbreviations are resolved according to
2407the information in the variable @code{org-link-abbrev-alist} that
2408relates the linkwords to replacement text. Here is an example:
2409
2410@lisp
2411@group
2412(setq org-link-abbrev-alist
2413 '(("bugzilla" . "http://10.1.2.9/bugzilla/show_bug.cgi?id=")
2414 ("google" . "http://www.google.com/search?q=")
2415 ("ads" . "http://adsabs.harvard.edu/cgi-bin/
2416 nph-abs_connect?author=%s&db_key=AST")))
2417@end group
2418@end lisp
2419
2420If the replacement text contains the string @samp{%s}, it will be
2421replaced with the tag. Otherwise the tag will be appended to the string
2422in order to create the link. You may also specify a function that will
2423be called with the tag as the only argument to create the link.
2424
2425With the above setting, you could link to a specific bug with
06341a67
CD
2426@code{[[bugzilla:129]]}, search the web for @samp{OrgMode} with
2427@code{[[google:OrgMode]]} and find out what the Org-mode author is
2428doing besides Emacs hacking with @code{[[ads:Dominik,C]]}.
86f46920
CD
2429
2430If you need special abbreviations just for a single Org-mode buffer, you
2431can define them in the file with
2432
2433@example
2434#+LINK: bugzilla http://10.1.2.9/bugzilla/show_bug.cgi?id=
2435#+LINK: google http://www.google.com/search?q=%s
2436@end example
2437
2438@noindent
2439In-buffer completion @pxref{Completion} can be used after @samp{[} to
2440complete link abbreviations.
7b93e84b 2441
86f46920 2442@node Search options, Custom searches, Link abbreviations, Hyperlinks
7b93e84b 2443@section Search options in file links
cfbc5709
CD
2444@cindex search option in file links
2445@cindex file links, searching
7b93e84b
CD
2446
2447File links can contain additional information to make Emacs jump to a
2448particular location in the file when following a link. This can be a
2449line number or a search option after a double@footnote{For backward
8ef8f2e6
CD
2450compatibility, line numbers can also follow a single colon.} colon. For
2451example, when the command @kbd{C-c l} creates a link (@pxref{Handling
2452links}) to a file, it encodes the words in the current line as a search
2453string that can be used to find this line back later when following the
2454link with @kbd{C-c C-o}.
2455
2456Here is the syntax of the different ways to attach a search to a file
2457link, together with an explanation:
26ca33ed 2458
7b93e84b 2459@example
26ca33ed
CD
2460[[file:~/code/main.c::255]]
2461[[file:~/xx.org::My Target]]
2462[[file:~/xx.org::*My Target]]
2463[[file:~/xx.org::/regexp/]]
7b93e84b 2464@end example
26ca33ed 2465
7b93e84b
CD
2466@table @code
2467@item 255
2468Jump to line 255.
6bae0337
CD
2469@item My Target
2470Search for a link target @samp{<<My Target>>}, or do a text search for
2471@samp{my target}, similar to the search in internal links, see
6bef8c45 2472@ref{Internal links}. In HTML export (@pxref{HTML export}), such a file
8ef8f2e6 2473link will become an HTML reference to the corresponding named anchor in
6bef8c45 2474the linked file.
6bae0337
CD
2475@item *My Target
2476In an Org-mode file, restrict search to headlines.
7b93e84b
CD
2477@item /regexp/
2478Do a regular expression search for @code{regexp}. This uses the Emacs
2479command @code{occur} to list all matches in a separate window. If the
2480target file is in Org-mode, @code{org-occur} is used to create a
2481sparse tree with the matches.
2482@c If the target file is a directory,
2483@c @code{grep} will be used to search all files in the directory.
2484@end table
2485
6bae0337 2486As a degenerate case, a file link with an empty file name can be used
06341a67 2487to search the current file. For example, @code{[[file:::find me]]} does
8ef8f2e6 2488a search for @samp{find me} in the current file, just as
6bae0337 2489@samp{[[find me]]} would.
7b93e84b 2490
8ef8f2e6
CD
2491@node Custom searches, Remember, Search options, Hyperlinks
2492@section Custom Searches
2493@cindex custom search strings
86f46920 2494@cindex search strings, custom
8ef8f2e6
CD
2495
2496The default mechanism for creating search strings and for doing the
2497actual search related to a file link may not work correctly in all
2498cases. For example, BibTeX database files have many entries like
2499@samp{year="1993"} which would not result in good search strings,
2500because the only unique identification for a BibTeX entry is the
2501citation key.
2502
2503If you come across such a problem, you can write custom functions to set
2504the right search string for a particular file type, and to do the search
2505for the string in the file. Using @code{add-hook}, these functions need
2506to be added to the hook variables
2507@code{org-create-file-search-functions} and
2508@code{org-execute-file-search-functions}. See the docstring for these
2509variables for more information. Org-mode actually uses this mechanism
2510for Bib@TeX{} database files, and you can use the corresponding code as
2511an implementation example. Search for @samp{BibTeX links} in the source
2512file.
2513
2514
2515@node Remember, , Custom searches, Hyperlinks
891f4676
RS
2516@section Remember
2517@cindex @file{remember.el}
2518
2519Another way to create org entries with links to other files is through
06341a67
CD
2520the @i{remember} package by John Wiegley. @i{Remember} lets you store
2521quick notes with little interruption of your work flow. See
891f4676 2522@uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} for more
06341a67
CD
2523information. The notes produced by @i{Remember} can be stored in
2524different ways, and Org-mode files are a good target. Org-mode
2525significantly expands the possibilities of @i{remember}: You may define
2526templates for different note types, and to associate target files and
2527headlines with specific templates. It also allows you to select the
2528location where a note should be stored interactively, on the fly.
2529
2530@menu
2531* Setting up remember:: Some code for .emacs to get things going
2532* Remember templates:: Define the outline of different note types
2533* Storing notes:: Directly get the note to where it belongs
2534@end menu
2535
2536@node Setting up remember, Remember templates, Remember, Remember
2537@subsection Setting up remember
2538
2539The following customization will tell @i{remember} to use org files as
2540target, and to create annotations compatible with Org-mode links.
891f4676 2541
891f4676 2542@example
891f4676
RS
2543(setq org-directory "~/path/to/my/orgfiles/")
2544(setq org-default-notes-file "~/.notes")
2545(setq remember-annotation-functions '(org-remember-annotation))
2546(setq remember-handler-functions '(org-remember-handler))
26ca33ed
CD
2547(add-hook 'remember-mode-hook 'org-remember-apply-template)
2548@end example
2549
06341a67
CD
2550@node Remember templates, Storing notes, Setting up remember, Remember
2551@subsection Remember templates
26ca33ed 2552@cindex templates, for remember
06341a67 2553
26ca33ed 2554In combination with Org-mode, you can use templates to generate
06341a67
CD
2555different types of @i{remember} notes. For example, if you would like
2556to use one template to create general TODO entries, another one for
2557journal entries, and a third one for collecting random ideas, you could
2558use:
26ca33ed
CD
2559
2560@example
2561(setq org-remember-templates
06341a67
CD
2562 '((?t "* TODO %?\n %i\n %a" "~/org/TODO.org")
2563 (?j "* %U %?\n\n %i\n %a" "~/org/JOURNAL.org")
2564 (?i "* %^@{Title@}\n %i\n %a" "~/org/JOURNAL.org" "New Ideas")))
891f4676
RS
2565@end example
2566
26ca33ed 2567@noindent In these entries, the character specifies how to select the
06341a67
CD
2568template. The first string specifies the template. Two more (optional)
2569strings give the file in which, and the headline under which the new
31e5288c
CD
2570note should be stored. The file defaults (if not present or @code{nil})
2571to @code{org-default-notes-file}, the heading to
06341a67
CD
2572@code{org-remember-default-headline}. Both defaults help to get to the
2573storing location quickly, but you can change the location interactively
2574while storing the note.
2575
2576When you call @kbd{M-x remember} (or @kbd{M-x org-remember}) to remember
2577something, org will prompt for a key to select the template (if you have
2578more than one template) and then prepare the buffer like
26ca33ed
CD
2579@example
2580* TODO
06341a67 2581 [[file:link to where you called remember]]
26ca33ed
CD
2582@end example
2583
2584@noindent or
2585
2586@example
2587* [2006-03-21 Tue 15:37]
2588
06341a67
CD
2589 [[file:link to where you called remember]]
2590@end example
2591
2592@noindent
2593During expansion of the template, special @kbd{%}-escapes allow dynamic
2594insertion of content:
2595@example
2596%^@{prompt@} @r{prompt the user for a string and replace this sequence with it.}
2597%t @r{time stamp, date only}
2598%T @r{time stamp with date and time}
2599%u, %U @r{like the above, but inactive time stamps}
2600%^t @r{like @code{%t}, but prompt for date. Similarly @code{%^T}, @code{%^u}, @code{%^U}}
2601 @r{You may define a prompt like @code{%^@{Birthday@}t}}
2602%n @r{user name (taken from @code{user-full-name})}
2603%a @r{annotation, normally the link created with @code{org-store-link}}
2604%i @r{initial content, the region when remember is called with C-u.}
2605 @r{The entire text will be indented like @code{%i} itself.}
386477e3
CD
2606%^g @r{prompt for tags, with completion on tags in target file.}
2607%^G @r{prompt for tags, with completion all tags in all agenda files.}
06341a67
CD
2608%:keyword @r{specific information for certain link types, see below}
2609@end example
2610
2611@noindent
2612For specific link types, the following keywords will be defined:
2613
2614@example
2615Link type | Available keywords
2616-------------------+----------------------------------------------
2617bbdb | %:name %:company
2618vm, wl, mh, rmail | %:type %:subject %:message-id
2619 | %:from %:fromname %:fromaddress
2620 | %:to %:toname %:toaddress
2621 | %:fromto @r{(either "to NAME" or "from NAME")@footnote{This will always be the other, not the user. See the variable @code{org-from-is-user-regexp}.}}
2622gnus | %:group, @r{for messages also all email fields}
2623w3, w3m | %:url
2624info | %:file %:node
2625calendar | %:date"
2626@end example
2627
2628@noindent
31e5288c 2629To place the cursor after template expansion use:
06341a67
CD
2630
2631@example
2632%? @r{After completing the template, position cursor here.}
26ca33ed
CD
2633@end example
2634
06341a67
CD
2635@noindent
2636If you change you mind about which template to use, call
2637@code{org-remember} in the remember buffer. You may then select a new
31e5288c 2638template that will be filled with the previous context information.
06341a67
CD
2639
2640@node Storing notes, , Remember templates, Remember
2641@subsection Storing notes
26ca33ed 2642
06341a67 2643When you are finished preparing a note with @i{remember}, you have to press
26ca33ed 2644@kbd{C-c C-c} to file the note away. The handler first prompts for a
06341a67
CD
2645target file - if you press @key{RET}, the value specified for the
2646template is used. Then the command offers the headings tree of the
2647selected file, with the cursor position at the default headline (if you
2648had specified one in the template). You can either immediately press
31e5288c
CD
2649@key{RET} to get the note placed there. Or you can use the following
2650keys to find a better location:
2651@example
2652@key{TAB} @r{Cycle visibility.}
2653@key{down} / @key{up} @r{Next/previous visible headline.}
2654n / p @r{Next/previous visible headline.}
2655f / b @r{Next/previous headline same level.}
2656u @r{One level up.}
2657@c 0-9 @r{Digit argument.}
2658@end example
2659@noindent
2660Pressing @key{RET} or @key{left} or @key{right}
06341a67 2661then leads to the following result.
891f4676 2662
31e5288c 2663@multitable @columnfractions 0.2 0.15 0.65
891f4676
RS
2664@item @b{Cursor position} @tab @b{Key} @tab @b{Note gets inserted}
2665@item buffer-start @tab @key{RET} @tab as level 2 heading at end of file
2666@item on headline @tab @key{RET} @tab as sublevel of the heading at cursor
31e5288c 2667@item @tab @key{left}/@key{right} @tab as same level, before/after current heading
8485a053 2668@item not on headline @tab @key{RET}
891f4676 2669 @tab at cursor position, level taken from context.
891f4676
RS
2670@end multitable
2671
06341a67
CD
2672So a fast way to store the note to its default location is to press
2673@kbd{C-c C-c @key{RET} @key{RET}}. Even shorter would be @kbd{C-u C-c
2674C-c}, which does the same without even asking for a file or showing the
2675tree.
891f4676
RS
2676
2677Before inserting the text into a tree, the function ensures that the
2678text has a headline, i.e. a first line that starts with a @samp{*}.
2679If not, a headline is constructed from the current date and some
2680additional data. If the variable @code{org-adapt-indentation} is
7837f272
CD
2681non-nil, the entire text is also indented so that it starts in the
2682same column as the headline (after the asterisks).
891f4676 2683
26ca33ed 2684
219513ac 2685@node TODO items, Tags, Hyperlinks, Top
56c91423
CD
2686@chapter TODO items
2687@cindex TODO items
2688
2689Org-mode does not maintain TODO lists as a separate document. TODO
2690items are an integral part of the notes file, because TODO items
2691usually come up while taking notes! With Org-mode, you simply mark
2692any entry in a tree as being a TODO item. In this way, the
2693information is not duplicated, and the entire context from which the
2694item emerged is always present when you check.
2695
2696Of course, this technique causes TODO items to be scattered throughout
2697your file. Org-mode provides methods to give you an overview over all
2698things you have to do.
2699
2700@menu
2701* TODO basics:: Marking and displaying TODO entries
2702* TODO extensions:: Workflow and assignments
2703* Priorities:: Some things are more important than others
31e5288c 2704* Breaking down tasks:: Splitting a task into manageable pieces
86f46920 2705* Checkboxes:: Tick-off lists
56c91423
CD
2706@end menu
2707
91d85d5f 2708@node TODO basics, TODO extensions, TODO items, TODO items
56c91423
CD
2709@section Basic TODO functionality
2710
2711Any headline can become a TODO item by starting it with the word TODO,
26ca33ed 2712for example:
56c91423
CD
2713
2714@example
2715*** TODO Write letter to Sam Fortune
2716@end example
2717
2718@noindent
2719The most important commands to work with TODO entries are:
2720
2721@table @kbd
2722@kindex C-c C-t
cfbc5709 2723@cindex cycling, of TODO states
56c91423 2724@item C-c C-t
31e5288c 2725Rotate the TODO state of the current item among
26ca33ed 2726
56c91423
CD
2727@example
2728,-> (unmarked) -> TODO -> DONE --.
2729'--------------------------------'
2730@end example
26ca33ed 2731
56c91423
CD
2732The same rotation can also be done ``remotely'' from the timeline and
2733agenda buffers with the @kbd{t} command key (@pxref{Agenda commands}).
8ef8f2e6
CD
2734@kindex S-@key{right}
2735@kindex S-@key{left}
2736@item S-@key{right}
2737@itemx S-@key{left}
2738Select the following/preceding TODO state, similar to cycling. Mostly
2739useful if more than two TODO states are possible (@pxref{TODO extensions}).
56c91423
CD
2740@kindex C-c C-v
2741@cindex sparse tree, for TODO
2742@item C-c C-v
2743View TODO items in a @emph{sparse tree} (@pxref{Sparse trees}). Folds
2744the entire buffer, but shows all TODO items and the headings hierarchy
31e5288c
CD
2745above them. With prefix arg, search for a specific TODO. You will be
2746prompted for the keyword, and you can also give a list of keywords like
2747@code{kwd1|kwd2|...}. With numerical prefix N, show the tree for the
2748Nth keyword in the variable @code{org-todo-keywords}. With two prefix
2749args, find all TODO and DONE entries.
cfbc5709
CD
2750@kindex C-c a t
2751@item C-c a t
7b93e84b 2752Show the global TODO list. This collects the TODO items from all
6bef8c45 2753agenda files (@pxref{Agenda views}) into a single buffer. The buffer is in
7b93e84b
CD
2754@code{agenda-mode}, so there are commands to examine and manipulate
2755the TODO entries directly from that buffer (@pxref{Agenda commands}).
cfbc5709 2756@xref{Global TODO list}, for more information.
67cb614c
CD
2757@c @item @code{org-agenda-include-all-todo}
2758@c If you would like to have all your TODO items listed as part of your
2759@c agenda, customize the variable @code{org-agenda-include-all-todo}.
386477e3
CD
2760@kindex S-M-@key{RET}
2761@item S-M-@key{RET}
2762Insert a new TODO entry below the current one.
56c91423
CD
2763@end table
2764
91d85d5f 2765@node TODO extensions, Priorities, TODO basics, TODO items
56c91423
CD
2766@section Extended use of TODO keywords
2767@cindex extended TODO keywords
2768
26ca33ed 2769The default implementation of TODO entries is just two states: TODO and
31e5288c
CD
2770DONE. You can use the TODO feature for more complicated things by
2771configuring the variable @code{org-todo-keywords}. With special setup,
2772the TODO keyword system can work differently in different files.
26ca33ed
CD
2773
2774Note that @i{tags} are another way to classify headlines in general and
2775TODO items in particular (@pxref{Tags}).
56c91423
CD
2776
2777@menu
2778* Workflow states:: From TODO to DONE in steps
2779* TODO types:: I do this, Fred the rest
31e5288c 2780* Multiple sets in one file:: Mixing it all, and still finding your way
56c91423
CD
2781* Per file keywords:: Different files, different requirements
2782@end menu
2783
2784@node Workflow states, TODO types, TODO extensions, TODO extensions
2785@subsection TODO keywords as workflow states
2786@cindex TODO workflow
2787@cindex workflow states as TODO keywords
2788
31e5288c
CD
2789You can use TODO keywords to indicate different @emph{sequential} states
2790in the process of working on an item, for example@footnote{Changing
2791this variable only becomes effective after restarting Org-mode in a
2792buffer.}:
56c91423
CD
2793
2794@lisp
31e5288c
CD
2795(setq org-todo-keywords
2796 '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))
56c91423
CD
2797@end lisp
2798
31e5288c
CD
2799The vertical bar separates the TODO keywords (states that @emph{need
2800action}) from the DONE states (which need @emph{no further action}. If
2801you don't provide the separator bar, the last state is used as the DONE
2802state.
7837f272 2803@cindex completion, of TODO keywords
31e5288c
CD
2804With this setup, the command @kbd{C-c C-t} will cycle an entry from TODO
2805to FEEDBACK, then to VERIFY, and finally to DONE and DELEGATED. You may
2806also use a prefix argument to quickly select a specific state. For
2807example @kbd{C-3 C-c C-t} will change the state immediately to VERIFY.
56c91423 2808If you define many keywords, you can use in-buffer completion (see
31e5288c
CD
2809@ref{Completion}) to insert these words into the buffer. Changing a
2810todo state can be logged with a timestamp, see @ref{Tracking TODO state
06341a67 2811changes} for more information.
56c91423 2812
31e5288c 2813@node TODO types, Multiple sets in one file, Workflow states, TODO extensions
56c91423
CD
2814@subsection TODO keywords as types
2815@cindex TODO types
2816@cindex names as TODO keywords
2817@cindex types as TODO keywords
2818
2819The second possibility is to use TODO keywords to indicate different
31e5288c
CD
2820@emph{types} of action items. For example, you might want to indicate
2821that items are for ``work'' or ``home''. Or, when you work with several
2822people on a single project, you might want to assign action items
2823directly to persons, by using their names as TODO keywords. This would
2824be set up like this:
2825
2826@lisp
2827(setq org-todo-keywords '((type "Fred" "Sara" "Lucy" "|" "DONE")))
2828@end lisp
2829
2830In this case, different keywords do not indicate a sequence, but rather
2831different types. So the normal work flow would be to assign a task to a
2832person, and later to mark it DONE. Org-mode supports this style by
2833adapting the workings of the command @kbd{C-c C-t}@footnote{This is also
2834true for the @kbd{t} command in the timeline and agenda buffers.}. When
2835used several times in succession, it will still cycle through all names,
2836in order to first select the right type for a task. But when you return
2837to the item after some time and execute @kbd{C-c C-t} again, it will
2838switch from any name directly to DONE. Use prefix arguments or
2839completion to quickly select a specific name. You can also review the
2840items of a specific TODO type in a sparse tree by using a numeric prefix
2841to @kbd{C-c C-v}. For example, to see all things Lucy has to do, you
2842would use @kbd{C-3 C-c C-v}. To collect Lucy's items from all agenda
2843files into a single buffer, you would use the prefix arg as well when
2844creating the global todo list: @kbd{C-3 C-c t}.
2845
2846@node Multiple sets in one file, Per file keywords, TODO types, TODO extensions
2847@subsection Multiple keyword sets in one file
2848@cindex todo keyword sets
2849
2850Sometimes you may want to use different sets of TODO keywords in
2851parallel. For example, you may want to have the basic
2852@code{TODO}/@code{DONE}, but also a workflow for bug fixing, and a
2853separate state indicating that an item has been canceled (so it is not
2854DONE, but also does not require action). Your setup would then look
2855like this:
56c91423
CD
2856
2857@lisp
31e5288c
CD
2858(setq org-todo-keywords
2859 '((sequence "TODO" "|" "DONE")
2860 (sequence "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED")
2861 (sequence "|" "CANCELED")))
56c91423
CD
2862@end lisp
2863
31e5288c
CD
2864The keywords should all be different, this helps Org-mode to keep track
2865of which subsequence should be used for a given entry. In this setup,
2866@kbd{C-c C-t} only operates within a subsequence, so it switches from
2867@code{DONE} to (nothing) to @code{TODO}, and from @code{FIXED} to
2868(nothing) to @code{REPORT}. Therefore you need a mechanism to initially
2869select the correct sequence. Besides the obvious ways like typing a
2870keyword or using completion, you may also apply the following commands:
2871
2872@table @kbd
2873@kindex C-S-@key{right}
2874@kindex C-S-@key{left}
2875@item C-S-@key{right}
2876@itemx C-S-@key{left}
2877These keys jump from one TODO subset to the next. In the above example,
2878@kbd{C-S-@key{right}} would jump from @code{TODO} or @code{DONE} to
2879@code{REPORT}, and any of the words in the second row to @code{CANCELED}.
2880@kindex S-@key{right}
2881@kindex S-@key{left}
2882@item S-@key{right}
2883@itemx S-@key{left}
2884@kbd{S-@key{<left>}} and @kbd{S-@key{<right>}} and walk through
2885@emph{all} keywords from all sets, so for example @kbd{S-@key{<right>}}
2886would switch from @code{DONE} to @code{REPORT} in the example above.
2887@end table
2888
2889@node Per file keywords, , Multiple sets in one file, TODO extensions
2890@subsection Setting up keywords for individual files
56c91423
CD
2891@cindex keyword options
2892@cindex per file keywords
2893
31e5288c
CD
2894It can be very useful to use different aspects of the TODO mechanism in
2895different files. For file-local settings, you need to add special lines
2896to the file which set the keywords and interpretation for that file
2897only. For example, to set one of the two examples discussed above, you
2898need one of the following lines, starting in column zero anywhere in the
2899file:
2900
2901@example
2902#+SEQ_TODO: TODO FEEDBACK VERIFY | DONE CANCELED
2903@end example
2904or
2905@example
2906#+TYP_TODO: Fred Sara Lucy Mike | DONE
2907@end example
2908
2909A setup for using several sets in parallel would be:
56c91423
CD
2910
2911@example
31e5288c
CD
2912#+SEQ_TODO: "TODO" "|" "DONE"
2913#+SEQ_TODO: "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED"
2914#+SEQ_TODO: "|" "CANCELED"
56c91423
CD
2915@end example
2916
31e5288c 2917
06341a67 2918@cindex completion, of option keywords
56c91423
CD
2919@kindex M-@key{TAB}
2920@noindent To make sure you are using the correct keyword, type
2921@samp{#+} into the buffer and then use @kbd{M-@key{TAB}} completion.
2922
2923@cindex DONE, final TODO keyword
31e5288c
CD
2924Remember that the keywords after the vertical bar (or the last keyword
2925if no bar is there) must always mean that the item is DONE (although you
2926may use a different word). After changing one of these lines, use
2927@kbd{C-c C-c} with the cursor still in the line to make the changes
2928known to Org-mode@footnote{Org-mode parses these lines only when
2929Org-mode is activated after visiting a file. @kbd{C-c C-c} with the
2930cursor in a line starting with @samp{#+} is simply restarting Org-mode
2931for the current buffer.}.
56c91423 2932
86f46920 2933@node Priorities, Breaking down tasks, TODO extensions, TODO items
56c91423
CD
2934@section Priorities
2935@cindex priorities
2936
2937If you use Org-mode extensively to organize your work, you may end up
2938with a number of TODO entries so large that you'd like to prioritize
2939them. This can be done by placing a @emph{priority cookie} into the
2940headline, like this
2941
2942@example
2943*** TODO [#A] Write letter to Sam Fortune
2944@end example
2945
2946@noindent
2947With its standard setup, Org-mode supports priorities @samp{A},
2948@samp{B}, and @samp{C}. @samp{A} is the highest priority. An entry
2949without a cookie is treated as priority @samp{B}. Priorities make a
6bef8c45 2950difference only in the agenda (@pxref{Weekly/Daily agenda}).
56c91423
CD
2951
2952@table @kbd
2953@kindex @kbd{C-c ,}
2954@item @kbd{C-c ,}
8ef8f2e6 2955Set the priority of the current headline. The command prompts for a
56c91423
CD
2956priority character @samp{A}, @samp{B} or @samp{C}. When you press
2957@key{SPC} instead, the priority cookie is removed from the headline.
2958The priorities can also be changed ``remotely'' from the timeline and
2959agenda buffer with the @kbd{,} command (@pxref{Agenda commands}).
31e5288c 2960@c
56c91423
CD
2961@kindex S-@key{up}
2962@kindex S-@key{down}
2963@item S-@key{up}
2964@itemx S-@key{down}
8ef8f2e6
CD
2965Increase/decrease priority of current headline. Note that these keys
2966are also used to modify time stamps (@pxref{Creating timestamps}).
2967Furthermore, these keys are also used by CUA-mode (@pxref{Conflicts}).
56c91423
CD
2968@end table
2969
31e5288c
CD
2970You can change the range of allowed priorities by setting the variables
2971@code{org-highest-priority}, @code{org-lowest-priority}, and
2972@code{org-default-priority}. For an individual buffer, you may set
2973these values (highest, lowest, default) like this (please make sure that
2974the highest priority is earlier in the alphabet than the lowest
2975priority):
2976
2977@example
2978#+PRIORITIES: A C B
2979@end example
2980
86f46920
CD
2981@node Breaking down tasks, Checkboxes, Priorities, TODO items
2982@section Breaking tasks down into subtasks
2983@cindex tasks, breaking down
2984
31e5288c 2985It is often advisable to break down large tasks into smaller, manageable
86f46920
CD
2986subtasks. You can do this by creating an outline tree below a TODO
2987item, with detailed subtasks on the tree@footnote{To keep subtasks out
2988of the global TODO list, see the
2989@code{org-agenda-todo-list-sublevels}.}. Another possibility is the use
3a401219 2990of checkboxes to identify (a hierarchy of) a large number of subtasks
86f46920
CD
2991(@pxref{Checkboxes}).
2992
2993
2994@node Checkboxes, , Breaking down tasks, TODO items
2995@section Checkboxes
2996@cindex checkboxes
2997
2998Every item in a plain list (@pxref{Plain lists}) can be made a checkbox
2999by starting it with the string @samp{[ ]}. This feature is similar to
3000TODO items (@pxref{TODO items}), but more lightweight. Checkboxes are
3001not included into the global TODO list, so they are often great to split
3002a task into a number of simple steps. Or you can use them in a shopping
3003list. To toggle a checkbox, use @kbd{C-c C-c}, or try Piotr Zielinski's
3004@file{org-mouse.el}. Here is an example of a checkbox list.
3005
3006@example
3007* TODO Organize party [3/6]
3008 - call people [1/3]
3009 - [ ] Peter
3010 - [X] Sarah
3011 - [ ] Sam
3012 - [X] order food
3013 - [ ] think about what music to play
3014 - [X] talk to the neighbors
3015@end example
3016
3017@cindex statistics, for checkboxes
3018@cindex checkbox statistics
3019The @samp{[3/6]} and @samp{[1/3]} in the first and second line are
3020cookies indicating how many checkboxes are present in this entry, and
3021how many of them have been checked off. This can give you an idea on
3022how many checkboxes remain, even without opening a folded entry. The
3023cookies can be placed into a headline or into (the first line of) a
3024plain list item. Each cookie covers all checkboxes structurally below
3025that headline/item. You have to insert the cookie yourself by typing
3026either @samp{[/]} or @samp{[%]}. In the first case you get an @samp{n
3027out of m} result, in the second case you get information about the
3028percentage of checkboxes checked (in the above example, this would be
3029@samp{[50%]} and @samp{[33%], respectively}).
3030
3031@noindent The following commands work with checkboxes:
3032
3033@table @kbd
3034@kindex C-c C-c
3035@item C-c C-c
fecda3e8
CD
3036Toggle checkbox at point. With prefix argument, set it to @samp{[-]},
3037which is considered to be an intermediate state.
86f46920
CD
3038@kindex C-c C-x C-b
3039@item C-c C-x C-b
3040Toggle checkbox at point.
3041@itemize @minus
3042@item
3043If there is an active region, toggle the first checkbox in the region
3044and set all remaining boxes to the same status as the first. If you
3045want to toggle all boxes in the region independently, use a prefix
3046argument.
3047@item
3048If the cursor is in a headline, toggle checkboxes in the region between
3049this headline and the next (so @emph{not} the entire subtree).
3050@item
3a401219 3051If there is no active region, just toggle the checkbox at point.
86f46920
CD
3052@end itemize
3053@kindex M-S-@key{RET}
3054@item M-S-@key{RET}
3055Insert a new item with a checkbox.
3056This works only if the cursor is already in a plain list item
3057(@pxref{Plain lists}).
3058@kindex C-c #
3059@item C-c #
3060Update the checkbox statistics in the current outline entry. When
3061called with a @kbd{C-u} prefix, update the entire file. Checkbox
3062statistic cookies are updated automatically if you toggle checkboxes
3063with @kbd{C-c C-c} and make new ones with @kbd{M-S-@key{RET}}. If you
3064delete boxes or add/change them by hand, use this command to get things
3065back into synch. Or simply toggle any checkbox twice with @kbd{C-c C-c}.
3066@end table
3067
891f4676 3068
4d1daf59 3069@node Tags, Properties and columns, TODO items, Top
219513ac
CD
3070@chapter Tags
3071@cindex tags
3072@cindex headline tagging
3073@cindex matching, tags
3074@cindex sparse tree, tag based
891f4676 3075
219513ac
CD
3076If you wish to implement a system of labels and contexts for
3077cross-correlating information, an excellent way is to assign @i{tags} to
3078headlines. Org-mode has extensive support for using tags.
891f4676 3079
219513ac
CD
3080Every headline can contain a list of tags, at the end of the headline.
3081Tags are normal words containing letters, numbers, @samp{_}, and
3082@samp{@@}. Tags must be preceded and followed by a single colon; like
3083@samp{:WORK:}. Several tags can be specified like @samp{:WORK:URGENT:}.
891f4676 3084
219513ac
CD
3085@menu
3086* Tag inheritance:: Tags use the tree structure of the outline
3087* Setting tags:: How to assign tags to a headline
3088* Tag searches:: Searching for combinations of tags
3089@end menu
891f4676 3090
219513ac
CD
3091@node Tag inheritance, Setting tags, Tags, Tags
3092@section Tag inheritance
3093@cindex inheritance, of tags
3094@cindex sublevels, inclusion into tags match
891f4676 3095
219513ac
CD
3096@i{Tags} make use of the hierarchical structure of outline trees. If a
3097heading has a certain tag, all subheadings will inherit the tag as
3098well. For example, in the list
891f4676 3099
86f46920 3100@example
219513ac
CD
3101* Meeting with the French group :WORK:
3102** Summary by Frank :BOSS:NOTES:
3103*** TODO Prepare slides for him :ACTION:
86f46920
CD
3104@end example
3105
219513ac
CD
3106@noindent
3107the final heading will have the tags @samp{:WORK:}, @samp{:BOSS:},
3108@samp{:NOTES:}, and @samp{:ACTION:}. When executing tag searches and
3109Org-mode finds that a certain headline matches the search criterion, it
3110will not check any sublevel headline, assuming that these likely also
3111match, and that the list of matches can become very long. This may
3112not be what you want, however, and you can influence inheritance and
3113searching using the variables @code{org-use-tag-inheritance} and
3114@code{org-tags-match-list-sublevels}.
3115
3116@node Setting tags, Tag searches, Tag inheritance, Tags
3117@section Setting tags
3118@cindex setting tags
3119@cindex tags, setting
3120
3121@kindex M-@key{TAB}
3122Tags can simply be typed into the buffer at the end of a headline.
3123After a colon, @kbd{M-@key{TAB}} offers completion on tags. There is
3124also a special command for inserting tags:
3125
3126@table @kbd
3127@kindex C-c C-c
3128@item C-c C-c
3129@cindex completion, of tags
3130Enter new tags for the current headline. Org-mode will either offer
3131completion or a special single-key interface for setting tags, see
3132below. After pressing @key{RET}, the tags will be inserted and aligned
3133to @code{org-tags-column}. When called with a @kbd{C-u} prefix, all
3134tags in the current buffer will be aligned to that column, just to make
3135things look nice. TAGS are automatically realigned after promotion,
3136demotion, and TODO state changes (@pxref{TODO basics}).
3137@end table
3138
3139Org will support tag insertion based on a @emph{list of tags}. By
3140default this list is constructed dynamically, containing all tags
3141currently used in the buffer. You may also globally specify a hard list
3142of tags with the variable @code{org-tag-alist}. Finally you can set
3143the default tags for a given file with lines like
86f46920
CD
3144
3145@example
219513ac
CD
3146#+TAGS: @@WORK @@HOME @@TENNISCLUB
3147#+TAGS: Laptop Car PC Sailboat
86f46920
CD
3148@end example
3149
219513ac
CD
3150If you have globally defined your preferred set of tags using the
3151variable @code{org-tag-alist}, but would like to use a dynamic tag list
3152in a specific file: Just add an empty TAGS option line to that file:
891f4676
RS
3153
3154@example
219513ac 3155#+TAGS:
891f4676
RS
3156@end example
3157
219513ac
CD
3158The default support method for entering tags is minibuffer completion.
3159However, Org-mode also implements a much better method: @emph{fast tag
3160selection}. This method allows to select and deselect tags with a
3161single key per tag. To function efficiently, you should assign unique
3162keys to most tags. This can be done globally with
3163
3164@lisp
3165(setq org-tag-alist '(("@@WORK" . ?w) ("@@HOME" . ?h) ("Laptop" . ?l)))
3166@end lisp
3167
3168@noindent or on a per-file basis with
6bef8c45
CD
3169
3170@example
219513ac 3171#+TAGS: @@WORK(w) @@HOME(h) @@TENNISCLUB(t) Laptop(l) PC(p)
6bef8c45
CD
3172@end example
3173
219513ac
CD
3174@noindent
3175You can also group together tags that are mutually exclusive. With
3176curly braces@footnote{In @code{org-mode-alist} use
3177@code{'(:startgroup)} and @code{'(:endgroup)}, respectively. Several
3178groups are allowed.}
891f4676
RS
3179
3180@example
219513ac 3181#+TAGS: @{ @@WORK(w) @@HOME(h) @@TENNISCLUB(t) @} Laptop(l) PC(p)
891f4676 3182@end example
31e5288c 3183
219513ac
CD
3184@noindent you indicate that at most one of @samp{@@WORK}, @samp{@@HOME},
3185and @samp{@@TENNISCLUB} should be selected.
3186
3187@noindent Don't forget to press @kbd{C-c C-c} with the cursor in one of
3188these lines to activate any changes.
3189
3190If at least one tag has a selection key, pressing @kbd{C-c C-c} will
3191automatically present you with a special interface, listing inherited
3192tags, the tags of the current headline, and a list of all legal tags
3193with corresponding keys@footnote{Keys will automatically be assigned to
3194tags which have no configured keys.}. In this interface, you can use
3195the following keys:
3196
3197@table @kbd
3198@item a-z...
3199Pressing keys assigned to tags will add or remove them from the list of
3200tags in the current line. Selecting a tag in a group of mutually
3201exclusive tags will turn off any other tags from that group.
3202@kindex @key{TAB}
3203@item @key{TAB}
3204Enter a tag in the minibuffer, even if the tag is not in the predefined
3205list. You will be able to complete on all tags present in the buffer.
3206@kindex @key{SPC}
3207@item @key{SPC}
3208Clear all tags for this line.
3209@kindex @key{RET}
3210@item @key{RET}
3211Accept the modified set.
3212@item C-g
3213Abort without installing changes.
3214@item q
3215If @kbd{q} is not assigned to a tag, it aborts like @kbd{C-g}.
3216@item !
3217Turn off groups of mutually exclusive tags. Use this to (as an
3218exception) assign several tags from such a group.
3219@item C-c
3220Toggle auto-exit after the next change (see below).
3221If you are using expert mode, the first @kbd{C-c} will display the
3222selection window.
891f4676
RS
3223@end table
3224
219513ac
CD
3225@noindent
3226This method lets you assign tags to a headline with very few keys. With
3227the above setup, you could clear the current tags and set @samp{@@HOME},
3228@samp{Laptop} and @samp{PC} tags with just the following keys: @kbd{C-c
3229C-c @key{SPC} h l p @key{RET}}. Switching from @samp{@@HOME} to
3230@samp{@@WORK} would be done with @kbd{C-c C-c w @key{RET}} or
3231alternatively with @kbd{C-c C-c C-c w}. Adding the non-predefined tag
3232@samp{Sarah} could be done with @kbd{C-c C-c @key{TAB} S a r a h
3233@key{RET} @key{RET}}.
891f4676 3234
219513ac
CD
3235If you find that most of the time, you need only a single keypress to
3236modify your list of tags, set the variable
3237@code{org-fast-tag-selection-single-key}. Then you no longer have to
3238press @key{RET} to exit fast tag selection - it will immediately exit
3239after the first change. If you then occasionally need more keys, press
3240@kbd{C-c} to turn off auto-exit for the current tag selection process
3241(in effect: start selection with @kbd{C-c C-c C-c} instead of @kbd{C-c
3242C-c}). If you set the variable to the value @code{expert}, the special
3243window is not even shown for single-key tag selection, it comes up only
3244when you press an extra @kbd{C-c}.
3245
3246@node Tag searches, , Setting tags, Tags
3247@section Tag searches
3248@cindex tag searches
3249@cindex searching for tags
3250
3251Once a tags system has been set up, it can be used to collect related
3252information into special lists.
891f4676
RS
3253
3254@table @kbd
219513ac
CD
3255@kindex C-c \
3256@item C-c \
3257Create a sparse tree with all headlines matching a tags search. With a
3258@kbd{C-u} prefix argument, ignore headlines that are not a TODO line.
3259@kindex C-c a m
3260@item C-c a m
3261Create a global list of tag matches from all agenda files.
386477e3 3262@xref{Matching tags and properties}.
219513ac
CD
3263@kindex C-c a M
3264@item C-c a M
3265Create a global list of tag matches from all agenda files, but check
3266only TODO items and force checking subitems (see variable
3267@code{org-tags-match-list-sublevels}).
3268@end table
3269
3270@cindex Boolean logic, for tag searches
3271A @i{tags} search string can use Boolean operators @samp{&} for AND and
3272@samp{|} for OR. @samp{&} binds more strongly than @samp{|}.
3273Parenthesis are currently not implemented. A tag may also be preceded
3274by @samp{-}, to select against it, and @samp{+} is syntactic sugar for
3275positive selection. The AND operator @samp{&} is optional when @samp{+}
3276or @samp{-} is present. Examples:
3277
3278@table @samp
3279@item +WORK-BOSS
3280Select headlines tagged @samp{:WORK:}, but discard those also tagged
3281@samp{:BOSS:}.
3282@item WORK|LAPTOP
3283Selects lines tagged @samp{:WORK:} or @samp{:LAPTOP:}.
3284@item WORK|LAPTOP&NIGHT
3285Like before, but require the @samp{:LAPTOP:} lines to be tagged also
3286@samp{NIGHT}.
3287@end table
3288
3289@cindex TODO keyword matching, with tags search
3290If you are using multi-state TODO keywords (@pxref{TODO extensions}), it
3291can be useful to also match on the TODO keyword. This can be done by
3292adding a condition after a slash to a tags match. The syntax is similar
3293to the tag matches, but should be applied with consideration: For
3294example, a positive selection on several TODO keywords can not
3295meaningfully be combined with boolean AND. However, @emph{negative
3296selection} combined with AND can be meaningful. To make sure that only
3297lines are checked that actually have any TODO keyword, use @kbd{C-c a
3298M}, or equivalently start the todo part after the slash with @samp{!}.
3299Examples:
3300
3301@table @samp
3302@item WORK/WAITING
3303Select @samp{:WORK:}-tagged TODO lines with the specific TODO
3304keyword @samp{WAITING}.
3305@item WORK/!-WAITING-NEXT
3306Select @samp{:WORK:}-tagged TODO lines that are neither @samp{WAITING}
3307nor @samp{NEXT}
3308@item WORK/+WAITING|+NEXT
3309Select @samp{:WORK:}-tagged TODO lines that are either @samp{WAITING} or
3310@samp{NEXT}.
3311@end table
3312
3313@cindex regular expressions, with tags search
3314Any element of the tag/todo match can be a regular expression - in this
3315case it must be enclosed in curly braces. For example,
3316@samp{WORK+@{^BOSS.*@}} matches headlines that contain the tag
3317@samp{WORK} and any tag @i{starting} with @samp{BOSS}.
3318
3319@cindex level, require for tags match
3320You can also require a headline to be of a certain level, by writing
3321instead of any TAG an expression like @samp{LEVEL=3}. For example, a
3322search @samp{+LEVEL=3+BOSS/-DONE} lists all level three headlines that
3323have the tag BOSS and are @emph{not} marked with the todo keyword DONE.
3324
4d1daf59
CD
3325@node Properties and columns, Timestamps, Tags, Top
3326@chapter Properties and Columns
386477e3
CD
3327@cindex properties
3328
3329Properties are a set of key-value pairs associated with an entry. There
3330are two main applications for properties in Org-mode. First, properties
3331are like tags, but with a value. For example, in a file where you
3332document bugs and plan releases of a piece of software, instead of using
3333tags like @code{:release_1:}, @code{:release_2:}, it can be more
3334efficient to use a property @code{RELEASE} with a value @code{1.0} or
3335@code{2.0}. Second, you can use properties to implement (very basic)
3336database capabilities in an Org-mode buffer, for example to create a
4d1daf59
CD
3337list of Music CD's you own. You can edit and view properties
3338conveniently in column view (@pxref{Column view}).
386477e3
CD
3339
3340@menu
3341* Property syntax:: How properties are spelled out
3342* Special properties:: Access to other Org-mode features
3343* Property searches:: Matching property values
3344* Column view:: Tabular viewing and editing
3345* Property API:: Properties for Lisp programmers
3346@end menu
3347
4d1daf59 3348@node Property syntax, Special properties, Properties and columns, Properties and columns
386477e3 3349@section Property Syntax
4d1daf59
CD
3350@cindex property syntax
3351@cindex drawer, for properties
386477e3
CD
3352
3353Properties are key-value pairs. They need to be inserted into a special
3354drawer (@pxref{Drawers}) with the name @code{PROPERTIES}. Each property
3355is specified on a single line, with the key (surrounded by colons)
3356first, and the value after it. Here is an example:
3357
3358@example
3359* CD collection
3360** Classic
3361*** Goldberg Variations
3362 :PROPERTIES:
3363 :Title: Goldberg Variations
3364 :Composer: J.S. Bach
3365 :Artist: Glen Gould
4d1daf59
CD
3366 :Publisher: Deutsche Grammphon
3367 :NDisks: 1
3368 :END:
3369@end example
3370
3371You may define the allowed values for a particular property @samp{XYZ}
3372by setting a property @samp{XYZ_ALL}. This special property is
3373@emph{inherited}, so if you set it in a level 1 entry, it will apply to
3374the entire tree. When allowed values are defined, setting the
3375corresponding property becomes easier and is less prone to typing
3376errors. For the example with the CD collection, we can predefine
3377publishers and the number of disks in a box like this:
3378
3379@example
3380* CD collection
3381 :PROPERTIES:
3382 :NDisks_ALL: 1 2 3 4
3383 :Publisher_ALL: "Deutsche Grammophon" Phillips EMI
3384 :END:
386477e3
CD
3385@end example
3386
3387@noindent
4d1daf59 3388The following commands help to work with properties:
386477e3
CD
3389
3390@table @kbd
3391@kindex M-@key{TAB}
3392@item M-@key{TAB}
3393After an initial colon in a line, complete property keys. All keys used
3394in the current file will be offered as possible completions.
4d1daf59
CD
3395@item M-x org-insert-property-drawer
3396Insert a property drawer into the current entry. The drawer will be
3397inserted early in the entry, but after the lines with planning
3398information like deadlines.
3399@kindex C-c C-c
3400@item C-c C-c
3401With the cursor in a property drawer, this executes property commands.
3402@item C-c C-c s
3403Set a property in the current entry. Both the property and the value
3404can be inserted using completion.
3405@kindex S-@key{right}
3406@kindex S-@key{left}
3407@item S-@key{left}/@key{right}
3408Switch property at point to the next/previous allowed value.
3409@item C-c C-c d
3410Remove a property from the current entry.
3411@item C-c C-c D
3412Globally remove a property, from all entries in the current file.
386477e3
CD
3413@end table
3414
4d1daf59 3415@node Special properties, Property searches, Property syntax, Properties and columns
386477e3 3416@section Special Properties
4d1daf59 3417@cindex properties, special
386477e3 3418
4d1daf59
CD
3419Special properties provide alternative access method to Org-mode
3420features discussed in the previous chapters, like the TODO state or the
3421priority of an entry. This interface exists so that you can include
3422these states into columns view (@pxref{Column view}). The following
3423property names are special and should not be used as keys in the
3424properties drawer:
386477e3
CD
3425
3426@example
3427TODO @r{The TODO keyword of the entry.}
3428TAGS @r{The tags defined directly in the headline.}
3429ALLTAGS @r{All tags, including inherited ones.}
3430PRIORITY @r{The priority of the entry, a string with a single letter.}
3431DEADLINE @r{The deadline time string, without the angular brackets.}
3432SCHEDULED @r{The scheduling time stamp, without the angular brackets.}
3433@end example
3434
4d1daf59 3435@node Property searches, Column view, Special properties, Properties and columns
386477e3 3436@section Property searches
4d1daf59 3437@cindex properties, searching
386477e3
CD
3438
3439To create sparse trees and special lists with selection based on
3440properties, the same commands are used as for tag searches (@pxref{Tag
3441searches}), and the same logic applies. For example, a search string
3442
3443@example
3444+WORK-BOSS+PRIORITY="A"+coffee="unlimited"+with=@{Sarah\|Denny@}
3445@end example
3446
3447@noindent
3448finds entries tagged @samp{:WORK:} but not @samp{:BOSS:}, which
3449also have a priority value @samp{A}, a @samp{:coffee:} property with the
3450value @samp{unlimited}, and a @samp{:with:} property that is matched by
3451the regular expression @samp{Sarah\|Denny}.
3452
4d1daf59 3453@node Column view, Property API, Property searches, Properties and columns
386477e3
CD
3454@section Column View
3455
fecda3e8 3456A great way to view and edit properties in an outline tree is
4d1daf59
CD
3457@emph{column view}. In column view, each outline item is turned into a
3458table row. Columns in this table provide access to properties of the
3459entries. Org-mode implements columns by overlaying a tabular structure
3460over the headline of each item. While the headlines have been turned
3461into a table row, you can still change the visibility of the outline
3462tree. For example, you get a compact table by switching to CONTENTS
fecda3e8
CD
3463view (@kbd{S-@key{TAB} S-@key{TAB}}, or simply @kbd{c} while column view
3464is active), but you can still open, read, and edit the entry below each
3465headline. Or, you can switch to column view after executing a sparse
3466tree command and in this way get a table only for the selected items.
3467Column view also works in agenda buffers (@pxref{Agenda views}) where
3468queries have collected selected items, possibly from a number of files.
386477e3
CD
3469
3470@menu
3471* Defining columns:: The COLUMNS format property
3472* Using column view:: How to create and use column view
3473@end menu
3474
3475@node Defining columns, Using column view, Column view, Column view
3476@subsection Defining Columns
4d1daf59
CD
3477@cindex column view, for properties
3478@cindex properties, column view
386477e3 3479
4d1daf59
CD
3480Setting up a column view first requires defining the columns. This is
3481done by defining a column format line.
386477e3 3482
4d1daf59
CD
3483@menu
3484* Scope of column definitions:: Where defined, where valid?
3485* Column attributes:: Appearance and content of a column
3486@end menu
386477e3 3487
4d1daf59
CD
3488@node Scope of column definitions, Column attributes, Defining columns, Defining columns
3489@subsubsection Scope of column definitions
386477e3 3490
4d1daf59 3491To define a column format for an entire file, use a line like
386477e3
CD
3492
3493@example
4d1daf59
CD
3494#+COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
3495@end example
3496
3497To specify a format that only applies to a specific tree, add a COLUMNS
3498property to the top node of that tree, for example
3499@example
3500** Top node for columns view
386477e3 3501 :PROPERTIES:
4d1daf59 3502 :COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
386477e3 3503 :END:
386477e3
CD
3504@end example
3505
4d1daf59
CD
3506If a @code{COLUMNS} property is present in an entry, it defines columns
3507for the entry itself, and for the entire subtree below it. Since the
3508column definition is part of the hierarchical structure of the document,
3509you can define columns on level 1 that are general enough for all
3510sublevels, and more specific columns further down, when you edit a
3511deeper part of the tree.
3512
3513@node Column attributes, , Scope of column definitions, Defining columns
3514@subsubsection Column attributes
3515A column definition sets the attributes of a column. The general
3516definition looks like this:
3517
3518@example
3519 %[width]property[(title)][@{summary-type@}]
3520@end example
386477e3 3521
4d1daf59
CD
3522@noindent
3523Except for the percent sign and the property name, all items are
3524optional. The individual parts have the following meaning:
386477e3
CD
3525
3526@example
4d1daf59
CD
3527width @r{An integer specifying the width of the column in characters.}
3528 @r{If omitted, the width will be determined automatically.}
3529property @r{The property that should be edited in this column.}
3530(title) @r{The header text for the column. If omitted, the}
3531 @r{property name is used.}
3532@{summary-type@} @r{The summary type. If specified, the column values for}
3533 @r{parent nodes are computed from the children.}
3534 @r{Supported summary types are:}
3535 @{+@} @r{Sum numbers in this column.}
3536 @{:@} @r{Sum times, HH:MM:SS, plain numbers are hours.}
3537 @{X@} @r{Checkbox status, [X] if all children are [X].}
386477e3
CD
3538@end example
3539
4d1daf59
CD
3540@noindent
3541Here is an example for a complete columns definition, along with allowed
3542values.
3543
3544@example
3545:COLUMNS: %20ITEM %9Approved(Approved?)@{X@} %Owner %11Status %10Time_Spent@{:@}
3546:Owner_ALL: Tammy Mark Karl Lisa Don
3547:Status_ALL: "In progress" "Not started yet" "Finished" ""
3548:Approved_ALL: "[ ]" "[X]"
3549@end example
3550
3551The first column, @samp{%25ITEM}, means the first 25 characters of the
3552item itself, i.e. of the headline. You probably always should start the
3553column definition with the ITEM specifier. The other specifiers create
3554columns @samp{Owner} with a list of names as allowed values, for
3555@samp{Status} with four different possible values, and for a checkbox
3556field @samp{Approved}. When no width is given after the @samp{%}
3557character, the column will be exactly as wide as it needs to be in order
3558to fully display all values. The @samp{Approved} column does have a
3559modified title (@samp{Approved?}, with a question mark). Summaries will
3560be created for the @samp{Time_Spent} column by adding time duration
3561expressions like HH:MM, and for the @samp{Approved} column, by providing
3562an @samp{[X]} status if all children have been checked.
3563
386477e3
CD
3564@node Using column view, , Defining columns, Column view
3565@subsection Using Column View
3566
3567@table @kbd
4d1daf59 3568@tsubheading{Turning column view on and off}
386477e3
CD
3569@kindex C-c C-x C-c
3570@item C-c C-x C-c
3571Create the column view for the local environment. This command searches
3572the hierarchy, up from point, for a @code{COLUMNS} property that defines
3573a format. When one is found, the column view table is established for
4d1daf59
CD
3574the entire tree, starting from the entry that contains the @code{COLUMNS}
3575property. If none is found, the format is taken from the @code{#+COLUMNS}
3576line or from the variable @code{org-columns-default-format}, and column
3577view is established for the current entry and its subtree.
3578@kindex q
3579@item q
3580Exit column view.
3581@tsubheading{Editing values}
386477e3
CD
3582@item @key{left} @key{right} @key{up} @key{down}
3583Move through the column view from field to field.
4d1daf59
CD
3584@kindex S-@key{left}
3585@kindex S-@key{right}
3586@item S-@key{left}/@key{right}
3587Switch to the next/previous allowed value of the field. For this, you
3588have to have specified allowed values for a property.
3589@kindex n
3590@kindex p
3591@itemx n / p
3592Same as @kbd{S-@key{left}/@key{right}}
386477e3
CD
3593@kindex e
3594@item e
3595Edit the property at point. For the special properties, this will
3596invoke the same interface that you normally use to change that
3597property. For example, when editing a TAGS property, the tag completion
3598or fast selection interface will pop up.
3599@kindex v
3600@item v
3601View the full value of this property. This is useful if the width of
3602the column is smaller than that of the value.
4d1daf59
CD
3603@kindex a
3604@item a
3605Edit the list of allowed values for this property. If the list is found
3606in the hierarchy, the modified values is stored there. If no list is
3607found, the new value is stored in the first entry that is part of the
3608current column view.
3609@tsubheading{Modifying the table structure}
3610@kindex <
3611@kindex >
3612@item < / >
3613Make the column narrower/wider by one character.
3614@kindex S-M-@key{right}
3615@item S-M-@key{right}
3616Insert a new column, to the right of the current column.
3617@kindex S-M-@key{left}
3618@item S-M-@key{left}
3619Delete the current column.
386477e3
CD
3620@end table
3621
4d1daf59 3622@node Property API, , Column view, Properties and columns
386477e3 3623@section The Property API
4d1daf59
CD
3624@cindex properties, API
3625@cindex API, for properties
386477e3
CD
3626
3627There is a full API for accessing and changing properties. This API can
3628be used by Emacs Lisp programs to work with properties and to implement
3629features based on them. For more information see @ref{Using the
3630property API}.
3631
4d1daf59 3632@node Timestamps, Agenda views, Properties and columns, Top
219513ac
CD
3633@chapter Timestamps
3634@cindex time stamps
3635@cindex date stamps
3636
3637Items can be labeled with timestamps to make them useful for project
3638planning.
3639
3640@menu
3641* Time stamps:: Assigning a time to a tree entry
3642* Creating timestamps:: Commands which insert timestamps
3643* Deadlines and scheduling:: Planning your work
3644* Progress logging:: Documenting when what work was done.
3645@end menu
3646
3647
3648@node Time stamps, Creating timestamps, Timestamps, Timestamps
3649@section Time stamps, deadlines and scheduling
3650@cindex time stamps
3651@cindex ranges, time
3652@cindex date stamps
3653@cindex deadlines
3654@cindex scheduling
3655
3656A time stamp is a specification of a date (possibly with time or a range
3657of times) in a special format, either @samp{<2003-09-16 Tue>} or
3658@samp{<2003-09-16 Tue 09:39>} or @samp{<2003-09-16 Tue
365912:00-12:30>}@footnote{This is the standard ISO date/time format. If
3660you cannot get used to these, see @ref{Custom time format}}. A time
3661stamp can appear anywhere in the headline or body of an org-tree entry.
3662Its presence causes entries to be shown on specific dates in the agenda
3663(@pxref{Weekly/Daily agenda}). We distinguish:
3664
3665@table @var
3666@item Plain time stamp
3667@cindex timestamp
3668A simple time stamp just assigns a date/time to an item. This is just
3669like writing down an appointment in a paper agenda, or like writing down
3670an event in a diary, when you want to take note of when something
3671happened. In the timeline and agenda displays, the headline of an entry
3672associated with a plain time stamp will be shown exactly on that date.
3673
3674@example
3675* Meet Peter at the movies <2006-11-01 Wed 19:15>
3676* Discussion on climate change <2006-11-02 Thu 20:00-22:00>
3677@end example
3678
3679@item Time stamp with repeater interval
3680@cindex timestamp, with repeater interval
3681A time stamp may contain a @emph{repeater interval}, indicating that it
3682applies not only on the given date, but again and again after a certain
3683interval of N days (d), weeks (w), months(m), or years(y). The
3684following will show up in the agenda every Wednesday:
3685
3686@example
3687* Pick up Sam at school <2007-05-16 Wed 12:30 +1w>
3688@end example
3689
3690@item Diary-style sexp entries
3691For more complex date specifications, Org-mode supports using the
3692special sexp diary entries implemented in the Emacs calendar/diary
3693package. For example
3694
3695@example
3696* The nerd meeting on every 2nd Thursday of the month
3697 <%%(diary-float t 4 2)>
3698@end example
3699
3700@item Time/Date range
3701@cindex timerange
3702@cindex date range
3703Two time stamps connected by @samp{--} denote a range. The headline
3704will be shown on the first and last day of the range, and on any dates
3705that are displayed and fall in the range. Here is an example:
3706
3707@example
3708** Meeting in Amsterdam
3709 <2004-08-23 Mon>--<2004-08-26 Thu>
3710@end example
3711
3712@item Inactive time stamp
3713@cindex timestamp, inactive
3714@cindex inactive timestamp
3715Just like a plain time stamp, but with square brackets instead of
3716angular ones. These time stamps are inactive in the sense that they do
3717@emph{not} trigger an entry to show up in the agenda.
3718
3719@example
3720* Gillian comes late for the fifth time [2006-11-01 Wed]
3721@end example
3722
3723@end table
3724
3725@node Creating timestamps, Deadlines and scheduling, Time stamps, Timestamps
3726@section Creating timestamps
3727@cindex creating timestamps
3728@cindex timestamps, creating
3729
3730For Org-mode to recognize time stamps, they need to be in the specific
3731format. All commands listed below produce time stamps in the correct
3732format.
3733
3734@table @kbd
3735@kindex C-c .
3736@item C-c .
3737Prompt for a date and insert a corresponding time stamp. When the
3738cursor is at a previously used time stamp, it is updated to NOW. When
3739this command is used twice in succession, a time range is inserted.
3740@c
3741@kindex C-u C-c .
3742@item C-u C-c .
3743Like @kbd{C-c .}, but use the alternative format which contains date
3744and time. The default time can be rounded to multiples of 5 minutes,
3745see the option @code{org-time-stamp-rounding-minutes}.
3746@c
3747@kindex C-c !
3748@item C-c !
3749Like @kbd{C-c .}, but insert an inactive time stamp that will not cause
3750an agenda entry.
3751@c
3752@kindex C-c <
3753@item C-c <
3754Insert a time stamp corresponding to the cursor date in the Calendar.
3755@c
891f4676
RS
3756@kindex C-c >
3757@item C-c >
3758Access the Emacs calendar for the current date. If there is a
3759timestamp in the current line, goto the corresponding date
3760instead.
31e5288c 3761@c
891f4676
RS
3762@kindex C-c C-o
3763@item C-c C-o
86f46920
CD
3764Access the agenda for the date given by the time stamp or -range at
3765point (@pxref{Weekly/Daily agenda}).
31e5288c 3766@c
891f4676
RS
3767@kindex S-@key{left}
3768@kindex S-@key{right}
3769@item S-@key{left}
3770@itemx S-@key{right}
225ff037 3771Change date at cursor by one day. These key bindings conflict with
8ef8f2e6 3772CUA-mode (@pxref{Conflicts}).
31e5288c 3773@c
891f4676
RS
3774@kindex S-@key{up}
3775@kindex S-@key{down}
3776@item S-@key{up}
3777@itemx S-@key{down}
86f46920
CD
3778Change the item under the cursor in a timestamp. The cursor can be on a
3779year, month, day, hour or minute. Note that if the cursor is in a
3780headline and not at a time stamp, these same keys modify the priority of
3781an item. (@pxref{Priorities}). The key bindings also conflict with
3782CUA-mode (@pxref{Conflicts}).
31e5288c 3783@c
891f4676
RS
3784@kindex C-c C-y
3785@cindex evaluate time range
3786@item C-c C-y
3787Evaluate a time range by computing the difference between start and
3788end. With prefix arg, insert result after the time range (in a table:
3789into the following column).
3790@end table
3791
86f46920
CD
3792
3793@menu
3a401219 3794* The date/time prompt:: How org-mode helps you entering date and time
31e5288c 3795* Custom time format:: Making dates look differently
86f46920
CD
3796@end menu
3797
31e5288c 3798@node The date/time prompt, Custom time format, Creating timestamps, Creating timestamps
86f46920 3799@subsection The date/time prompt
891f4676
RS
3800@cindex date, reading in minibuffer
3801@cindex time, reading in minibuffer
86f46920
CD
3802
3803When Org-mode prompts for a date/time, the prompt suggests to enter an
3804ISO date. But it will in fact accept any string containing some date
3805and/or time information. You can, for example, use @kbd{C-y} to paste a
3806(possibly multi-line) string copied from an email message. Org-mode
3807will find whatever information is in there and will replace anything not
3808specified with the current date and time. For example:
3809
3810@example
3811 3-2-5 --> 2003-02-05
3812 feb 15 --> currentyear-02-15
3813 sep 12 9 --> 2009-09-12
3814 12:45 --> today 12:45
3815 22 sept 0:34 --> currentyear-09-22 0:34
3816 12 --> currentyear-currentmonth-12
3817 Fri --> nearest Friday (today or later)
06341a67 3818 +4 --> 4 days from now (if +N is the only thing given)
86f46920
CD
3819@end example
3820
3821The function understands English month and weekday abbreviations. If
3822you want to use unabbreviated names and/or other languages, configure
3823the variables @code{parse-time-months} and @code{parse-time-weekdays}.
3824
891f4676 3825@cindex calendar, for selecting date
86f46920
CD
3826Parallel to the minibuffer prompt, a calendar is popped up@footnote{If
3827you don't need/want the calendar, configure the variable
06341a67
CD
3828@code{org-popup-calendar-for-date-prompt}.}. When you exit the date
3829prompt, either by clicking on a date in the calendar, or by pressing
3830@key{RET}, the date selected in the calendar will be combined with the
3831information entered at the prompt. You can control the calendar fully
3832from the minibuffer:
891f4676
RS
3833
3834@table @kbd
3835@kindex <
3836@item <
3837Scroll calendar backwards by one month.
3838@kindex >
3839@item >
3840Scroll calendar forwards by one month.
3841@kindex mouse-1
3842@item mouse-1
3843Select date by clicking on it.
3844@kindex S-@key{right}
3845@item S-@key{right}
3846One day forward.
3847@kindex S-@key{left}
3848@item S-@key{left}
3849One day back.
3850@kindex S-@key{down}
3851@item S-@key{down}
3852One week forward.
3853@kindex S-@key{up}
3854@item S-@key{up}
3855One week back.
3856@kindex M-S-@key{right}
3857@item M-S-@key{right}
3858One month forward.
3859@kindex M-S-@key{left}
3860@item M-S-@key{left}
3861One month back.
3862@kindex @key{RET}
3863@item @key{RET}
86f46920 3864Choose date in calendar (only if nothing was typed into minibuffer).
891f4676
RS
3865@end table
3866
31e5288c
CD
3867@node Custom time format, , The date/time prompt, Creating timestamps
3868@subsection Custom time format
86f46920
CD
3869@cindex custom date/time format
3870@cindex time format, custom
3871@cindex date format, custom
3872
3873Org-mode uses the standard ISO notation for dates and times as it is
3874defined in ISO 8601. If you cannot get used to this and require another
3875representation of date and time to keep you happy, you can get it by
3876customizing the variables @code{org-display-custom-times} and
3877@code{org-time-stamp-custom-formats}.
3878
3879@table @kbd
3880@kindex C-c C-x C-t
3881@item C-c C-x C-t
3882Toggle the display of custom formats for dates and times.
3883@end table
3884
3885@noindent
3886Org-mode needs the default format for scanning, so the custom date/time
3887format does not @emph{replace} the default format - instead it is put
3888@emph{over} the default format using text properties. This has the
3889following consequences:
3890@itemize @bullet
3891@item
3892You cannot place the cursor onto a time stamp anymore, only before or
3893after.
3894@item
3895The @kbd{S-@key{up}/@key{down}} keys can no longer be used to adjust
3896each component of a time stamp. If the cursor is at the beginning of
3897the stamp, @kbd{S-@key{up}/@key{down}} will change the stamp by one day,
3898just like @kbd{S-@key{left}/@key{right}}. At the end of the stamp, the
3899time will be changed by one minute.
3900@item
219513ac
CD
3901If the time stamp contains a range of clock times or a repeater, these
3902will not be overlayed, but remain in the buffer as they were.
3903@item
86f46920
CD
3904When you delete a time stamp character-by-character, it will only
3905disappear from the buffer after @emph{all} (invisible) characters
3906belonging to the ISO timestamp have been removed.
3907@item
3908If the custom time stamp format is longer than the default and you are
3909using dates in tables, table alignment will be messed up. If the custom
3910format is shorter, things do work as expected.
3911@end itemize
3912
06341a67 3913
31e5288c
CD
3914@node Deadlines and scheduling, Progress logging, Creating timestamps, Timestamps
3915@section Deadlines and Scheduling
3916
3917A time stamp may be preceded by special keywords to facilitate planning
3918of work:
3919
3920@table @var
3921@item DEADLINE
3922@cindex DEADLINE keyword
3923The task (most likely a TODO item) is supposed to be finished on that
3924date, and it will be listed then. In addition, the compilation for
3925@emph{today} will carry a warning about the approaching or missed
3926deadline, starting @code{org-deadline-warning-days} before the due date,
3927and continuing until the entry is marked DONE. An example:
3928
3929@example
3930*** TODO write article about the Earth for the Guide
3931 The editor in charge is [[bbdb:Ford Prefect]]
3932 DEADLINE: <2004-02-29 Sun>
3933@end example
3934
3935@item SCHEDULED
3936@cindex SCHEDULED keyword
3937You are planning to start working on that task on the given date. The
3938headline will be listed under the given date@footnote{It will still be
3939listed on that date after it has been marked DONE. If you don't like
3940this, set the variable @code{org-agenda-skip-scheduled-if-done}.}. In
3941addition, a reminder that the scheduled date has passed will be present
3942in the compilation for @emph{today}, until the entry is marked DONE.
3943I.e., the task will automatically be forwarded until completed.
3944
3945@example
3946*** TODO Call Trillian for a date on New Years Eve.
3947 SCHEDULED: <2004-12-25 Sat>
3948@end example
3949@end table
3950
3951@menu
3952* Inserting deadline/schedule::
3953* Repeated tasks::
3954@end menu
3955
3956@node Inserting deadline/schedule, Repeated tasks, Deadlines and scheduling, Deadlines and scheduling
3957@subsection Inserting deadline/schedule
3958
3959The following commands allow to quickly insert a deadline or to schedule
3960an item:
3961
3962@table @kbd
3963@c
3964@kindex C-c C-d
3965@item C-c C-d
3966Insert @samp{DEADLINE} keyword along with a stamp. The insertion will
3967happen in the line directly following the headline.
3968@c FIXME Any CLOSED timestamp will be removed.????????
3969@c
3970@kindex C-c C-w
3971@cindex sparse tree, for deadlines
3972@item C-c C-w
3973Create a sparse tree with all deadlines that are either past-due, or
3974which will become due within @code{org-deadline-warning-days}.
3975With @kbd{C-u} prefix, show all deadlines in the file. With a numeric
3976prefix, check that many days. For example, @kbd{C-1 C-c C-w} shows
3977all deadlines due tomorrow.
3978@c
3979@kindex C-c C-s
3980@item C-c C-s
3981Insert @samp{SCHEDULED} keyword along with a stamp. The insertion will
3982happen in the line directly following the headline. Any CLOSED
3983timestamp will be removed.
3984@end table
3985
3986@node Repeated tasks, , Inserting deadline/schedule, Deadlines and scheduling
3987@subsection Repeated Tasks
3988
3989Some tasks need to be repeated again and again, and Org-mode therefore
3990allows to use a repeater in a DEADLINE or SCHEDULED time stamp, for
3991example:
06341a67 3992@example
31e5288c
CD
3993** TODO Pay the rent
3994 DEADLINE: <2005-10-01 Sat +1m>
3995@end example
06341a67 3996
31e5288c
CD
3997Deadlines and scheduled items produce entries in the agenda when they
3998are over-due, so it is important to be able to mark such an entry as
3999completed once you have done so. When you mark a DEADLINE or a SCHEDULE
4000with the todo keyword DONE, it will no longer produce entries in the
4001agenda. The problem with this is, however, that then also the
4002@emph{next} instance of the repeated entry will not be active. Org-mode
4003deals with this in the following way: When you try to mark such an entry
4004DONE (using @kbd{C-c C-t}), it will shift the base date of the repeating
4005time stamp by the repeater interval, and immediately set the entry state
4006back to TODO. In the example above, setting the state to DONE would
4007actually switch the date like this:
06341a67 4008
31e5288c
CD
4009@example
4010** TODO Pay the rent
4011 DEADLINE: <2005-11-01 Tue +1m>
06341a67
CD
4012@end example
4013
31e5288c
CD
4014You will also be prompted for a note that will be put under the DEADLINE
4015line to keep a record that you actually acted on the previous instance
4016of this deadline.
4017
4018As a consequence of shifting the base date, this entry will no longer be
4019visible in the agenda when checking past dates, but all future instances
4020will be visible.
06341a67 4021
31e5288c
CD
4022You may have both scheduling and deadline information for a specific
4023task - just make sure that the repeater intervals on both are the same.
06341a67 4024
31e5288c 4025@node Progress logging, , Deadlines and scheduling, Timestamps
91d85d5f
CD
4026@section Progress Logging
4027@cindex progress logging
4028@cindex logging, of progress
4029
4030Org-mode can automatically record a time stamp when you mark a TODO item
06341a67
CD
4031as DONE, or even each time when you change the state of a TODO item.
4032You can also measure precisely the time you spent on specific items in a
4033project by starting and stopping a clock when you start and stop working
4034on an aspect of a project.
91d85d5f
CD
4035
4036@menu
5aafad2e 4037* Closing items:: When was this entry marked DONE?
06341a67 4038* Tracking TODO state changes:: When did the status change?
91d85d5f
CD
4039* Clocking work time:: When exactly did you work on this item?
4040@end menu
4041
06341a67 4042@node Closing items, Tracking TODO state changes, Progress logging, Progress logging
91d85d5f
CD
4043@subsection Closing items
4044
4045If you want to keep track of @emph{when} a certain TODO item was
06341a67
CD
4046finished, turn on logging with@footnote{The corresponding in-buffer
4047setting is: @code{#+STARTUP: logdone}}
91d85d5f
CD
4048
4049@lisp
4050(setq org-log-done t)
4051@end lisp
4052
4053@noindent
4054Then each time you turn a TODO entry into DONE using either @kbd{C-c
4055C-t} in the Org-mode buffer or @kbd{t} in the agenda buffer, a line
06341a67
CD
4056@samp{CLOSED: [timestamp]} will be inserted just after the headline. If
4057you turn the entry back into a TODO item through further state cycling,
4058that line will be removed again. In the timeline (@pxref{Timeline}) and
4059in the agenda (@pxref{Weekly/Daily agenda}), you can then use the
4060@kbd{l} key to display the TODO items closed on each day, giving you an
4061overview of what has been done on a day. If you want to record a note
4062along with the timestamp, use@footnote{The corresponding in-buffer
4063setting is: @code{#+STARTUP: lognotedone}}
4064
4065@lisp
4066(setq org-log-done '(done))
4067@end lisp
4068
4069@node Tracking TODO state changes, Clocking work time, Closing items, Progress logging
4070@subsection Tracking TODO state changes
4071
4072When TODO keywords are used as workflow states (@pxref{Workflow
4073states}), you might want to keep track of when a state change occurred,
4074and you may even want to attach notes to that state change. With the
4075setting
4076
4077@lisp
4078(setq org-log-done '(state))
4079@end lisp
4080
4081@noindent
4082each state change will prompt you for a note that will be attached to
4083the current headline. Very likely you do not want this verbose tracking
4084all the time, so it is probably better to configure this behavior with
4085in-buffer options. For example, if you are tracking purchases, put
4086these into a separate file that starts with:
4087
4088@example
4089#+SEQ_TODO: TODO ORDERED INVOICE PAYED RECEIVED SENT
4090#+STARTUP: lognotestate
4091@end example
4092
31e5288c 4093
06341a67 4094@node Clocking work time, , Tracking TODO state changes, Progress logging
91d85d5f
CD
4095@subsection Clocking work time
4096
4097Org-mode allows you to clock the time you spent on specific tasks in a
4098project. When you start working on an item, you can start the clock.
5aafad2e
CD
4099When you stop working on that task, or when you mark the task done, the
4100clock is stopped and the corresponding time interval is recorded. It
91d85d5f
CD
4101also computes the total time spent on each subtree of a project.
4102
4103@table @kbd
4104@kindex C-c C-x C-i
4105@item C-c C-x C-i
4106Start the clock on the current item (clock-in). This inserts the CLOCK
4107keyword together with a timestamp.
4108@kindex C-c C-x C-o
4109@item C-c C-x C-o
4110Stop the clock (clock-out). The inserts another timestamp at the same
4111location where the clock was last started. It also directly computes
4112the resulting time in inserts it after the time range as @samp{=>
86f46920 4113HH:MM}. See the variable @code{org-log-done} for the possibility to
06341a67
CD
4114record an additional note together with the clock-out time
4115stamp@footnote{The corresponding in-buffer setting is: @code{#+STARTUP:
4116lognoteclock-out}}.
22a616f7
CD
4117@kindex C-c C-y
4118@item C-c C-y
4119Recompute the time interval after changing one of the time stamps. This
4120is only necessary if you edit the time stamps directly. If you change
4121them with @kbd{S-@key{cursor}} keys, the update is automatic.
91d85d5f
CD
4122@kindex C-c C-t
4123@item C-c C-t
4124Changing the TODO state of an item to DONE automatically stops the clock
4125if it is running in this same item.
4126@kindex C-c C-x C-x
4127@item C-c C-x C-x
4128Cancel the current clock. This is useful if a clock was started by
4129mistake, or if you ended up working on something else.
4130@kindex C-c C-x C-d
4131@item C-c C-x C-d
4132Display time summaries for each subtree in the current buffer. This
4133puts overlays at the end of each headline, showing the total time
4134recorded under that heading, including the time of any subheadings. You
4135can use visibility cycling to study the tree, but the overlays disappear
86f46920
CD
4136when you change the buffer (see variable
4137@code{org-remove-highlights-with-change}) or press @kbd{C-c C-c}.
5aafad2e
CD
4138@kindex C-c C-x C-r
4139@item C-c C-x C-r
22a616f7
CD
4140Insert a dynamic block (@pxref{Dynamic blocks}) containing a clock
4141report as an org-mode table into the current file.
5aafad2e
CD
4142@example
4143#+BEGIN: clocktable :maxlevel 2 :emphasize nil
4144
4145#+END: clocktable
4146@end example
4147@noindent
4148If such a block already exists, its content is replaced by the new
4149table. The @samp{BEGIN} line can specify options:
4150@example
4151:maxlevels @r{Maximum level depth to which times are listed in the table.}
4152:emphasize @r{When @code{t}, emphasize level one and level two items}
22a616f7
CD
4153:block @r{The time block to consider. This block is specified relative}
4154 @r{to the current time and may be any of these keywords:}
4155 @r{@code{today}, @code{yesterday}, @code{thisweek}, @code{lastweek},}
4156 @r{@code{thismonth}, @code{lastmonth}, @code{thisyear}, or @code{lastyear}}.
4157:tstart @r{A time string specifying when to start considering times}
4158:tend @r{A time string specifying when to stop considering times}
4159@end example
4160So to get a clock summary for the current day, you could write
4161@example
4162#+BEGIN: clocktable :maxlevel 2 :block today
4163
4164#+END: clocktable
5aafad2e 4165@end example
22a616f7
CD
4166and to use a specific time range you could write@footnote{Note that all
4167parameters must be specified in a single line - the line is broken here
4168only to fit it onto the manual.}
4169@example
4170#+BEGIN: clocktable :tstart "<2006-08-10 Thu 10:00>"
4171 :tend "<2006-08-10 Thu 12:00>"
4172
4173#+END: clocktable
4174@end example
4175@kindex C-u C-c C-x C-u
4176@item C-u C-c C-x C-u
4177Update all dynamic blocks (@pxref{Dynamic blocks}). This is useful if
4178you have several clocktable blocks in a buffer.
91d85d5f
CD
4179@end table
4180
4181The @kbd{l} key may be used in the timeline (@pxref{Timeline}) and in
4182the agenda (@pxref{Weekly/Daily agenda}) to show which tasks have been
4183worked on or closed during a day.
4184
219513ac 4185@node Agenda views, Embedded LaTeX, Timestamps, Top
cfbc5709
CD
4186@chapter Agenda Views
4187@cindex agenda views
891f4676 4188
26ca33ed
CD
4189Due to the way Org-mode works, TODO items, time-stamped items, and
4190tagged headlines can be scattered throughout a file or even a number of
4191files. To get an overview over open action items, or over events that
4192are important for a particular date, this information must be collected,
4193sorted and displayed in an organized way.
cfbc5709 4194
d2eaec4d 4195Org-mode can select items based on various criteria, and display them
06341a67 4196in a separate buffer. Six different view types are provided:
26ca33ed 4197
cfbc5709
CD
4198@itemize @bullet
4199@item
4200an @emph{agenda} that is like a calendar and shows information
06341a67 4201for specific dates,
cfbc5709
CD
4202@item
4203a @emph{TODO list} that covers all unfinished
86f46920 4204action items,
cfbc5709 4205@item
06341a67
CD
4206a @emph{tags view}, showings headlines based on
4207the tags associated with them,
86f46920
CD
4208@item
4209a @emph{timeline view} that shows all events in a single Org-mode file,
06341a67 4210in time-sorted view,
86f46920 4211@item
06341a67
CD
4212a @emph{stuck projects view} showing projects that currently don't move
4213along, and
4214@item
4215@emph{custom views} that are special tag/keyword searches and
86f46920 4216combinations of different views.
cfbc5709 4217@end itemize
26ca33ed 4218
cfbc5709
CD
4219@noindent
4220The extracted information is displayed in a special @emph{agenda
4221buffer}. This buffer is read-only, but provides commands to visit the
4222corresponding locations in the original Org-mode files, and even to
86f46920
CD
4223edit these files remotely.
4224
4225Two variables control how the agenda buffer is displayed and whether the
4226window configuration is restored when the agenda exits:
4227@code{org-agenda-window-setup} and
4228@code{org-agenda-restore-windows-after-quit}.
891f4676 4229
d2eaec4d
CD
4230@menu
4231* Agenda files:: Files being searched for agenda information
4232* Agenda dispatcher:: Keyboard access to agenda views
06341a67 4233* Built-in agenda views:: What is available out of the box?
86f46920 4234* Presentation and sorting:: How agenda items are prepared for display
d2eaec4d 4235* Agenda commands:: Remote editing of org trees
86f46920 4236* Custom agenda views:: Defining special searches and views
d2eaec4d
CD
4237@end menu
4238
6bef8c45 4239@node Agenda files, Agenda dispatcher, Agenda views, Agenda views
d2eaec4d 4240@section Agenda files
86f46920
CD
4241@cindex agenda files
4242@cindex files for agenda
d2eaec4d
CD
4243
4244The information to be shown is collected from all @emph{agenda files},
26ca33ed
CD
4245the files listed in the variable @code{org-agenda-files}@footnote{If the
4246value of that variable is not a list, but a single file name, then the
4247list of agenda files will be maintained in that external file.}. Thus even
d2eaec4d 4248if you only work with a single Org-mode file, this file should be put
86f46920 4249into that list@footnote{When using the dispatcher, pressing @kbd{1}
d2eaec4d
CD
4250before selecting a command will actually limit the command to the
4251current file, and ignore @code{org-agenda-files} until the next
4252dispatcher command.}. You can customize @code{org-agenda-files}, but
4253the easiest way to maintain it is through the following commands
4254
4255@cindex files, adding to agenda list
4256@table @kbd
4257@kindex C-c [
4258@item C-c [
4259Add current file to the list of agenda files. The file is added to
4260the front of the list. If it was already in the list, it is moved to
4261the front. With prefix arg, file is added/moved to the end.
4262@kindex C-c ]
4263@item C-c ]
4264Remove current file from the list of agenda files.
4265@kindex C-,
06341a67 4266@kindex C-'
d2eaec4d 4267@item C-,
06341a67 4268@itemx C-'
26ca33ed 4269Cycle through agenda file list, visiting one file after the other.
d2eaec4d 4270@end table
26ca33ed 4271
d2eaec4d
CD
4272@noindent
4273The Org menu contains the current list of files and can be used
4274to visit any of them.
4275
06341a67 4276@node Agenda dispatcher, Built-in agenda views, Agenda files, Agenda views
d2eaec4d
CD
4277@section The agenda dispatcher
4278@cindex agenda dispatcher
4279@cindex dispatching agenda commands
cfbc5709 4280The views are created through a dispatcher that should be bound to a
a1f058c6
CD
4281global key, for example @kbd{C-c a} (@pxref{Installation}). In the
4282following we will assume that @kbd{C-c a} is indeed how the dispatcher
4283is accessed and list keyboard access to commands accordingly. After
4284pressing @kbd{C-c a}, an additional letter is required to execute a
4285command. The dispatcher offers the following default commands:
d2eaec4d
CD
4286@table @kbd
4287@item a
6bef8c45 4288Create the calendar-like agenda (@pxref{Weekly/Daily agenda}).
06341a67 4289@item t @r{/} T
d2eaec4d 4290Create a list of all TODO items (@pxref{Global TODO list}).
06341a67 4291@item m @r{/} M
26ca33ed 4292Create a list of headlines matching a TAGS expression (@pxref{Matching
386477e3 4293tags and properties}).
86f46920
CD
4294@item L
4295Create the timeline view for the current buffer (@pxref{Timeline}).
06341a67
CD
4296@item # @r{/} !
4297Create a list of stuck projects (@pxref{Stuck projects}).
86f46920
CD
4298@item 1
4299Restrict an agenda command to the current buffer. After pressing
4300@kbd{1}, you still need to press the character selecting the command.
4301@item 0
4302If there is an active region, restrict the following agenda command to
4303the region. Otherwise, restrict it to the current subtree. After
4304pressing @kbd{0}, you still need to press the character selecting the
4305command.
d2eaec4d 4306@end table
cfbc5709 4307
86f46920
CD
4308You can also define custom commands that will be accessible through the
4309dispatcher, just like the default commands. This includes the
4310possibility to create extended agenda buffers that contain several
4311blocks together, for example the weekly agenda, the global TODO list and
4312a number of special tags matches. @xref{Custom agenda views}.
d2eaec4d 4313
06341a67
CD
4314@node Built-in agenda views, Presentation and sorting, Agenda dispatcher, Agenda views
4315@section The built-in agenda views
4316
4317In this section we describe the built-in views.
4318
4319@menu
4320* Weekly/Daily agenda:: The calendar page with current tasks
4321* Global TODO list:: All unfinished action items
386477e3 4322* Matching tags and properties:: Structured information with fine-tuned search
06341a67
CD
4323* Timeline:: Time-sorted view for single file
4324* Stuck projects:: Find projects you need to review
4325@end menu
4326
4327@node Weekly/Daily agenda, Global TODO list, Built-in agenda views, Built-in agenda views
4328@subsection The weekly/daily agenda
cfbc5709 4329@cindex agenda
86f46920
CD
4330@cindex weekly agenda
4331@cindex daily agenda
cfbc5709 4332
86f46920
CD
4333The purpose of the weekly/daily @emph{agenda} is to act like a page of a
4334paper agenda, showing all the tasks for the current week or day.
891f4676
RS
4335
4336@table @kbd
4337@cindex org-agenda, command
cfbc5709
CD
4338@kindex C-c a a
4339@item C-c a a
891f4676
RS
4340Compile an agenda for the current week from a list of org files. The
4341agenda shows the entries for each day. With a @kbd{C-u} prefix (or
4342when the variable @code{org-agenda-include-all-todo} is @code{t}), all
26ca33ed 4343unfinished TODO items (including those without a date) are also listed at
891f4676 4344the beginning of the buffer, before the first date.@*
891f4676
RS
4345@end table
4346
26ca33ed 4347Remote editing from the agenda buffer means, for example, that you can
cfbc5709
CD
4348change the dates of deadlines and appointments from the agenda buffer.
4349The commands available in the Agenda buffer are listed in @ref{Agenda
4350commands}.
4351
06341a67 4352@subsubheading Calendar/Diary integration
d2eaec4d
CD
4353@cindex calendar integration
4354@cindex diary integration
4355
4356Emacs contains the calendar and diary by Edward M. Reingold. The
4357calendar displays a three-month calendar with holidays from different
26ca33ed 4358countries and cultures. The diary allows you to keep track of
d2eaec4d
CD
4359anniversaries, lunar phases, sunrise/set, recurrent appointments
4360(weekly, monthly) and more. In this way, it is quite complementary to
4361Org-mode. It can be very useful to combine output from Org-mode with
4362the diary.
4363
4364In order to include entries from the Emacs diary into Org-mode's
4365agenda, you only need to customize the variable
4366
4367@lisp
4368(setq org-agenda-include-diary t)
4369@end lisp
d2eaec4d
CD
4370
4371@noindent After that, everything will happen automatically. All diary
4372entries including holidays, anniversaries etc will be included in the
4373agenda buffer created by Org-mode. @key{SPC}, @key{TAB}, and
4374@key{RET} can be used from the agenda buffer to jump to the diary
26ca33ed 4375file in order to edit existing diary entries. The @kbd{i} command to
d2eaec4d
CD
4376insert new entries for the current date works in the agenda buffer, as
4377well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to display
4378Sunrise/Sunset times, show lunar phases and to convert to other
4379calendars, respectively. @kbd{c} can be used to switch back and forth
4380between calendar and agenda.
4381
31e5288c
CD
4382If you are using the diary only for sexp entries and holidays, it is
4383faster to not use the above setting, but instead to copy or even move
4384the entries into an Org-mode file. Org-mode evaluates diary-style sexp
4385entries, and does it faster because there is no overhead for first
4386creating the diary display. Note that the sexp entries must start at
4387the left margin, no white space is allowed before them. For example,
4388the following segment of an Org-mode file will be processed and entries
4389will be made in the agenda:
4390
4391@example
4392* Birthdays and similar stuff
4393#+CATEGORY: Holiday
4394%%(org-calendar-holiday) ; special function for holiday names
4395#+CATEGORY: Ann
386477e3 4396%%(diary-anniversary 14 5 1956) Arthur Dent is %d years old
31e5288c
CD
4397%%(diary-anniversary 2 10 1869) Mahatma Gandhi would be %d years old
4398@end example
d2eaec4d 4399
386477e3 4400@node Global TODO list, Matching tags and properties, Weekly/Daily agenda, Built-in agenda views
06341a67 4401@subsection The global TODO list
cfbc5709
CD
4402@cindex global TODO list
4403@cindex TODO list, global
4404
4405The global TODO list contains all unfinished TODO items, formatted and
4406collected into a single place.
4407
4408@table @kbd
4409@kindex C-c a t
4410@item C-c a t
4411Show the global TODO list. This collects the TODO items from all
6bef8c45 4412agenda files (@pxref{Agenda views}) into a single buffer. The buffer is in
cfbc5709
CD
4413@code{agenda-mode}, so there are commands to examine and manipulate
4414the TODO entries directly from that buffer (@pxref{Agenda commands}).
cfbc5709
CD
4415@kindex C-c a T
4416@item C-c a T
86f46920 4417@cindex TODO keyword matching
31e5288c
CD
4418Like the above, but allows selection of a specific TODO keyword. You
4419can also do this by specifying a prefix argument to @kbd{C-c a t}. With
4420a @kbd{C-u} prefix you are prompted for a keyword, and you may also
4421specify several keywords by separating them with @samp{|} as boolean OR
4422operator. With a numeric prefix, the Nth keyword in
4423@code{org-todo-keywords} is selected.
cfbc5709
CD
4424@kindex r
4425The @kbd{r} key in the agenda buffer regenerates it, and you can give
4426a prefix argument to this command to change the selected TODO keyword,
d2eaec4d 4427for example @kbd{3 r}. If you often need a search for a specific
86f46920
CD
4428keyword, define a custom command for it (@pxref{Agenda dispatcher}).@*
4429Matching specific TODO keywords can also be done as part of a tags
4430search (@pxref{Tag searches}).
cfbc5709
CD
4431@end table
4432
d924f2e5 4433Remote editing of TODO items means that you can change the state of a
cfbc5709
CD
4434TODO entry with a single key press. The commands available in the
4435TODO list are described in @ref{Agenda commands}.
4436
86f46920
CD
4437@cindex sublevels, inclusion into todo list
4438Normally the global todo list simply shows all headlines with TODO
77ef352e
CD
4439keywords. This list can become very long. There are two ways to keep
4440it more compact:
4441@itemize @minus
4442@item
4443Some people view a TODO item that has been @emph{scheduled} for
4444execution (@pxref{Time stamps}) as no longer @emph{open}. Configure the
4445variable @code{org-agenda-todo-ignore-scheduled} to exclude scheduled
4446items from the global TODO list.
4447@item
4448TODO items may have sublevels to break up the task into subtasks. In
4449such cases it may be enough to list only the highest level TODO headline
4450and omit the sublevels from the global list. Configure the variable
4451@code{org-agenda-todo-list-sublevels} to get this behavior.
4452@end itemize
4453
386477e3
CD
4454@node Matching tags and properties, Timeline, Global TODO list, Built-in agenda views
4455@subsection Matching Tags and Properties
cfbc5709 4456@cindex matching, of tags
386477e3 4457@cindex matching, of properties
cfbc5709
CD
4458@cindex tags view
4459
4460If headlines in the agenda files are marked with @emph{tags}
4461(@pxref{Tags}), you can select headlines based on the tags that apply
d924f2e5 4462to them and collect them into an agenda buffer.
cfbc5709
CD
4463
4464@table @kbd
4465@kindex C-c a m
4466@item C-c a m
4467Produce a list of all headlines that match a given set of tags. The
d924f2e5
CD
4468command prompts for a selection criterion, which is a boolean logic
4469expression with tags, like @samp{+WORK+URGENT-WITHBOSS} or
d2eaec4d
CD
4470@samp{WORK|HOME} (@pxref{Tags}). If you often need a specific search,
4471define a custom command for it (@pxref{Agenda dispatcher}).
cfbc5709
CD
4472@kindex C-c a M
4473@item C-c a M
d2eaec4d
CD
4474Like @kbd{C-c a m}, but only select headlines that are also TODO items
4475and force checking subitems (see variable
86f46920
CD
4476@code{org-tags-match-list-sublevels}). Matching specific todo keywords
4477together with a tags match is also possible, see @ref{Tag searches}.
cfbc5709
CD
4478@end table
4479
4480The commands available in the tags list are described in @ref{Agenda
4481commands}.
4482
386477e3 4483@node Timeline, Stuck projects, Matching tags and properties, Built-in agenda views
06341a67 4484@subsection Timeline for a single file
cfbc5709
CD
4485@cindex timeline, single file
4486@cindex time-sorted view
4487
86f46920
CD
4488The timeline summarizes all time-stamped items from a single Org-mode
4489file in a @emph{time-sorted view}. The main purpose of this command is
4490to give an overview over events in a project.
cfbc5709
CD
4491
4492@table @kbd
fecda3e8 4493@kindex C-c a L
86f46920 4494@item C-c a L
cfbc5709
CD
4495Show a time-sorted view of the org file, with all time-stamped items.
4496When called with a @kbd{C-u} prefix, all unfinished TODO entries
4497(scheduled or not) are also listed under the current date.
4498@end table
cfbc5709 4499
26ca33ed 4500@noindent
cfbc5709
CD
4501The commands available in the timeline buffer are listed in
4502@ref{Agenda commands}.
4503
86f46920 4504
06341a67
CD
4505@node Stuck projects, , Timeline, Built-in agenda views
4506@subsection Stuck projects
4507
4508If you are following a system like David Allen's GTD to organize your
4509work, one of the ``duties'' you have is a regular review to make sure
4510that all projects move along. A @emph{stuck} project is a project that
4511has no defined next actions, so it will never show up in the TODO lists
4512Org-mode produces. During the review, you need to identify such
4513projects and define next actions for them.
4514
4515@table @kbd
4516@kindex C-c a #
4517@item C-c a #
4518List projects that are stuck.
4519@kindex C-c a !
4520@item C-c a !
4521Customize the variable @code{org-stuck-projects} to define what a stuck
4522project is and how to find it.
4523@end table
4524
4525You almost certainly will have to configure this view before it will
4526work for you. The built-in default assumes that all your projects are
4527level-2 headlines, and that a project is not stuck if it has at least
4528one entry marked with a todo keyword TODO or NEXT or NEXTACTION.
4529
4530Lets assume that you, in your own way of using Org-mode, identify
4531projects with a tag PROJECT, and that you use a todo keyword MAYBE to
4532indicate a project that should not be considered yet. Lets further
4533assume that the todo keyword DONE marks finished projects, and that NEXT
31e5288c
CD
4534and TODO indicate next actions. The tag @@SHOP indicates shopping and
4535is a next action even without the NEXT tag. Finally, if the project
4536contains the special word IGNORE anywhere, it should not be listed
4537either. In this case you would start by identifying eligible projects
4538with a tags/todo match @samp{+PROJECT/-MAYBE-DONE}, and then check for
4539TODO, NEXT, @@SHOP, and IGNORE in the subtree to identify projects that
4540are not stuck. The correct customization for this is
06341a67
CD
4541
4542@lisp
4543(setq org-stuck-projects
31e5288c
CD
4544 '("+PROJECT/-MAYBE-DONE" ("NEXT" "TODO") ("@@SHOP")
4545 "\\<IGNORE\\>"))
06341a67
CD
4546@end lisp
4547
4548
4549@node Presentation and sorting, Agenda commands, Built-in agenda views, Agenda views
86f46920
CD
4550@section Presentation and sorting
4551@cindex presentation, of agenda items
4552
4553Before displaying items in an agenda view, Org-mode visually prepares
4554the items and sorts them. Each item occupies a single line. The line
4555starts with a @emph{prefix} that contains the @emph{category}
4556(@pxref{Categories}) of the item and other important information. You can
4557customize the prefix using the option @code{org-agenda-prefix-format}.
4558The prefix is followed by a cleaned-up version of the outline headline
4559associated with the item.
4560
4561@menu
4562* Categories:: Not all tasks are equal
4563* Time-of-day specifications:: How the agenda knows the time
4564* Sorting of agenda items:: The order of things
4565@end menu
4566
4567@node Categories, Time-of-day specifications, Presentation and sorting, Presentation and sorting
4568@subsection Categories
4569
4570@cindex category
4571The category is a broad label assigned to each agenda item. By default,
4572the category is simply derived from the file name, but you can also
4573specify it with a special line in the buffer, like this:
4574
4575@example
4576#+CATEGORY: Thesis
4577@end example
4578
4579If there are several such lines in a file, each specifies the category
4580for the text below it (but the first category also applies to any text
4581before the first CATEGORY line). The display in the agenda buffer looks
4582best if the category is not longer than 10 characters.
4583
4584@node Time-of-day specifications, Sorting of agenda items, Categories, Presentation and sorting
4585@subsection Time-of-Day Specifications
4586@cindex time-of-day specification
4587
4588Org-mode checks each agenda item for a time-of-day specification. The
4589time can be part of the time stamp that triggered inclusion into the
4590agenda, for example as in @w{@samp{<2005-05-10 Tue 19:00>}}. Time
4591ranges can be specified with two time stamps, like
4592@c
4593@w{@samp{<2005-05-10 Tue 20:30>--<2005-05-10 Tue 22:15>}}.
4594
4595In the headline of the entry itself, a time(range) may also appear as
4596plain text (like @samp{12:45} or a @samp{8:30-1pm}. If the agenda
06341a67 4597integrates the Emacs diary (@pxref{Weekly/Daily agenda}), time
86f46920
CD
4598specifications in diary entries are recognized as well.
4599
4600For agenda display, Org-mode extracts the time and displays it in a
4601standard 24 hour format as part of the prefix. The example times in
4602the previous paragraphs would end up in the agenda like this:
4603
4604@example
4605 8:30-13:00 Arthur Dent lies in front of the bulldozer
4606 12:45...... Ford Prefect arrives and takes Arthur to the pub
4607 19:00...... The Vogon reads his poem
4608 20:30-22:15 Marwin escorts the Hitchhikers to the bridge
4609@end example
4610
4611@cindex time grid
4612If the agenda is in single-day mode, or for the display of today, the
4613timed entries are embedded in a time grid, like
4614
4615@example
4616 8:00...... ------------------
4617 8:30-13:00 Arthur Dent lies in front of the bulldozer
4618 10:00...... ------------------
4619 12:00...... ------------------
4620 12:45...... Ford Prefect arrives and takes Arthur to the pub
4621 14:00...... ------------------
4622 16:00...... ------------------
4623 18:00...... ------------------
4624 19:00...... The Vogon reads his poem
4625 20:00...... ------------------
4626 20:30-22:15 Marwin escorts the Hitchhikers to the bridge
4627@end example
4628
4629The time grid can be turned on and off with the variable
4630@code{org-agenda-use-time-grid}, and can be configured with
4631@code{org-agenda-time-grid}.
4632
4633@node Sorting of agenda items, , Time-of-day specifications, Presentation and sorting
4634@subsection Sorting of agenda items
4635@cindex sorting, of agenda items
4636@cindex priorities, of agenda items
4637Before being inserted into a view, the items are sorted. How this is
4638done depends on the type of view.
4639@itemize @bullet
4640@item
4641For the daily/weekly agenda, the items for each day are sorted. The
4642default order is to first collect all items containing an explicit
4643time-of-day specification. These entries will be shown at the beginning
4644of the list, as a @emph{schedule} for the day. After that, items remain
4645grouped in categories, in the sequence given by @code{org-agenda-files}.
4646Within each category, items are sorted by priority (@pxref{Priorities}),
4647which is composed of the base priority (2000 for priority @samp{A}, 1000
4648for @samp{B}, and 0 for @samp{C}), plus additional increments for
4649overdue scheduled or deadline items.
4650@item
4651For the TODO list, items remain in the order of categories, but within
4652each category, sorting takes place according to priority
4653(@pxref{Priorities}).
4654@item
4655For tags matches, items are not sorted at all, but just appear in the
4656sequence in which they are found in the agenda files.
4657@end itemize
4658
4659Sorting can be customized using the variable
4660@code{org-agenda-sorting-strategy}.
4661
4662
4663@node Agenda commands, Custom agenda views, Presentation and sorting, Agenda views
891f4676 4664@section Commands in the agenda buffer
cfbc5709 4665@cindex commands, in agenda buffer
891f4676 4666
525f4f90
CD
4667Entries in the agenda buffer are linked back to the org file or diary
4668file where they originate. You are not allowed to edit the agenda
4669buffer itself, but commands are provided to show and jump to the
4670original entry location, and to edit the org-files ``remotely'' from
4671the agenda buffer. In this way, all information is stored only once,
26ca33ed 4672removing the risk that your agenda and note files may diverge.
891f4676
RS
4673
4674Some commands can be executed with mouse clicks on agenda lines. For
d2eaec4d 4675the other commands, the cursor needs to be in the desired line.
891f4676
RS
4676
4677@table @kbd
5b69c9ca 4678@tsubheading{Motion}
86f46920 4679@cindex motion commands in agenda
5b69c9ca
CD
4680@kindex n
4681@item n
4682Next line (same as @key{up}).
4683@kindex p
4684@item p
4685Previous line (same as @key{down}).
891f4676
RS
4686@tsubheading{View/GoTo org file}
4687@kindex mouse-3
4688@kindex @key{SPC}
4689@item mouse-3
8485a053 4690@itemx @key{SPC}
891f4676 4691Display the original location of the item in another window.
31e5288c 4692@c
cfbc5709
CD
4693@kindex L
4694@item L
891f4676 4695Display original location and recenter that window.
31e5288c 4696@c
891f4676 4697@kindex mouse-2
5b10c9c4 4698@kindex mouse-1
891f4676
RS
4699@kindex @key{TAB}
4700@item mouse-2
5b10c9c4 4701@itemx mouse-1
891f4676 4702@itemx @key{TAB}
5b10c9c4 4703Go to the original location of the item in another window. Under Emacs
26ca33ed 470422, @kbd{mouse-1} will also works for this.
31e5288c 4705@c
891f4676
RS
4706@kindex @key{RET}
4707@itemx @key{RET}
4708Go to the original location of the item and delete other windows.
31e5288c 4709@c
891f4676
RS
4710@kindex f
4711@item f
99733580 4712Toggle Follow mode. In Follow mode, as you move the cursor through
891f4676 4713the agenda buffer, the other window always shows the corresponding
8ef8f2e6
CD
4714location in the org file. The initial setting for this mode in new
4715agenda buffers can be set with the variable
4716@code{org-agenda-start-with-follow-mode}.
31e5288c 4717@c
06341a67
CD
4718@kindex b
4719@item b
4720Display the entire subtree of the current item in an indirect buffer.
4721With numerical prefix ARG, go up to this level and then take that tree.
4722If ARG is negative, go up that many levels. With @kbd{C-u} prefix, do
4723not remove the previously used indirect buffer.
31e5288c 4724@c
cfbc5709
CD
4725@kindex l
4726@item l
99733580 4727Toggle Logbook mode. In Logbook mode, entries that where marked DONE while
91d85d5f
CD
4728logging was on (variable @code{org-log-done}) are shown in the agenda,
4729as are entries that have been clocked on that day.
99733580 4730
891f4676 4731@tsubheading{Change display}
86f46920 4732@cindex display changing, in agenda
891f4676
RS
4733@kindex o
4734@item o
4735Delete other windows.
31e5288c 4736@c
891f4676 4737@kindex d
386477e3
CD
4738@kindex w
4739@kindex m
4740@kindex y
4741@item d w m y
4d1daf59
CD
4742Switch to day/week/month/year view. When switching to day or week view,
4743this setting becomes the default for subseqent agenda commands. Since
4744month and year views are slow to create, the do not become the default.
31e5288c 4745@c
7837f272
CD
4746@kindex D
4747@item D
06341a67 4748Toggle the inclusion of diary entries. See @ref{Weekly/Daily agenda}.
31e5288c 4749@c
9bc3d124
CD
4750@kindex g
4751@item g
4752Toggle the time grid on and off. See also the variables
4753@code{org-agenda-use-time-grid} and @code{org-agenda-time-grid}.
31e5288c 4754@c
891f4676
RS
4755@kindex r
4756@item r
4757Recreate the agenda buffer, for example to reflect the changes
4758after modification of the time stamps of items with S-@key{left} and
7b93e84b
CD
4759S-@key{right}. When the buffer is the global todo list, a prefix
4760argument is interpreted to create a selective list for a specific TODO
4761keyword.
31e5288c 4762@c
c74a0b1f
CD
4763@kindex s
4764@item s
4765Save all Org-mode buffers in the current Emacs session.
31e5288c 4766@c
891f4676
RS
4767@kindex @key{right}
4768@item @key{right}
4769Display the following @code{org-agenda-ndays} days. For example, if
4770the display covers a week, switch to the following week. With prefix
d2eaec4d 4771arg, go forward that many times @code{org-agenda-ndays} days.
31e5288c 4772@c
891f4676
RS
4773@kindex @key{left}
4774@item @key{left}
d2eaec4d 4775Display the previous dates.
31e5288c 4776@c
891f4676
RS
4777@kindex .
4778@item .
4779Goto today.
4780
4781@tsubheading{Remote editing}
86f46920 4782@cindex remote editing, from agenda
891f4676
RS
4783
4784@item 0-9
4785Digit argument.
31e5288c 4786@c
06341a67
CD
4787@cindex undoing remote-editing events
4788@cindex remote editing, undo
4789@kindex C-_
4790@item C-_
4791Undo a change due to a remote editing command. The change is undone
4792both in the agenda buffer and in the remote buffer.
31e5288c 4793@c
891f4676
RS
4794@kindex t
4795@item t
4796Change the TODO state of the item, both in the agenda and in the
4797original org file.
31e5288c 4798@c
3a401219
CD
4799@kindex C-k
4800@item C-k
4801Delete the current agenda item along with the entire subtree belonging
4802to it in the original Org-mode file. If the text to be deleted remotely
4803is longer than one line, the kill needs to be confirmed by the user. See
4804variable @code{org-agenda-confirm-kill}.
31e5288c 4805@c
06341a67
CD
4806@kindex $
4807@item $
4808Archive the subtree corresponding to the current headline.
31e5288c 4809@c
6433d0c2
CD
4810@kindex T
4811@item T
26ca33ed 4812Show all tags associated with the current item. Because of
6433d0c2 4813inheritance, this may be more than the tags listed in the line itself.
31e5288c 4814@c
d924f2e5
CD
4815@kindex :
4816@item :
4817Set tags for the current headline.
31e5288c 4818@c
a1f058c6
CD
4819@kindex a
4820@item a
4821Toggle the ARCHIVE tag for the current headline.
31e5288c 4822@c
5b69c9ca
CD
4823@kindex ,
4824@item ,
891f4676
RS
4825Set the priority for the current item. Org-mode prompts for the
4826priority character. If you reply with @key{SPC}, the priority cookie
4827is removed from the entry.
31e5288c 4828@c
891f4676 4829@kindex P
06341a67 4830@item P
891f4676 4831Display weighted priority of current item.
31e5288c 4832@c
891f4676 4833@kindex +
5b69c9ca 4834@kindex S-@key{up}
891f4676 4835@item +
7837f272 4836@itemx S-@key{up}
891f4676
RS
4837Increase the priority of the current item. The priority is changed in
4838the original buffer, but the agenda is not resorted. Use the @kbd{r}
4839key for this.
31e5288c 4840@c
891f4676 4841@kindex -
5b69c9ca 4842@kindex S-@key{down}
891f4676 4843@item -
7837f272 4844@itemx S-@key{down}
891f4676 4845Decrease the priority of the current item.
31e5288c 4846@c
8ef8f2e6
CD
4847@kindex C-c C-s
4848@item C-c C-s
4849Schedule this item
31e5288c 4850@c
8ef8f2e6
CD
4851@kindex C-c C-d
4852@item C-c C-d
4853Set a deadline for this item.
31e5288c 4854@c
891f4676
RS
4855@kindex S-@key{right}
4856@item S-@key{right}
4857Change the time stamp associated with the current line by one day into
4858the future. With prefix argument, change it by that many days. For
4859example, @kbd{3 6 5 S-@key{right}} will change it by a year. The
4860stamp is changed in the original org file, but the change is not
8485a053 4861directly reflected in the agenda buffer. Use the
891f4676 4862@kbd{r} key to update the buffer.
31e5288c 4863@c
891f4676
RS
4864@kindex S-@key{left}
4865@item S-@key{left}
4866Change the time stamp associated with the current line by one day
4867into the past.
31e5288c 4868@c
891f4676
RS
4869@kindex >
4870@item >
4871Change the time stamp associated with the current line to today.
4872The key @kbd{>} has been chosen, because it is the same as @kbd{S-.}
4873on my keyboard.
31e5288c 4874@c
91d85d5f
CD
4875@kindex I
4876@item I
4877Start the clock on the current item. If a clock is running already, it
4878is stopped first.
31e5288c 4879@c
91d85d5f
CD
4880@kindex O
4881@item O
4882Stop the previously started clock.
31e5288c 4883@c
91d85d5f
CD
4884@kindex X
4885@item X
4886Cancel the currently running clock.
891f4676 4887
525f4f90 4888@tsubheading{Calendar commands}
86f46920 4889@cindex calendar commands, from agenda
525f4f90
CD
4890@kindex c
4891@item c
4892Open the Emacs calendar and move to the date at the agenda cursor.
31e5288c 4893@c
5b69c9ca
CD
4894@item c
4895When in the calendar, compute and show the Org-mode agenda for the
4896date at the cursor.
31e5288c 4897@c
91d85d5f
CD
4898@cindex diary entries, creating from agenda
4899@kindex i
4900@item i
4901Insert a new entry into the diary. Prompts for the type of entry
4902(day, weekly, monthly, yearly, anniversary, cyclic) and creates a new
4903entry in the diary, just as @kbd{i d} etc. would do in the calendar.
4904The date is taken from the cursor position.
31e5288c 4905@c
525f4f90
CD
4906@kindex M
4907@item M
26ca33ed 4908Show the phases of the moon for the three months around current date.
31e5288c 4909@c
525f4f90
CD
4910@kindex S
4911@item S
5b69c9ca
CD
4912Show sunrise and sunset times. The geographical location must be set
4913with calendar variables, see documentation of the Emacs calendar.
31e5288c 4914@c
5b69c9ca
CD
4915@kindex C
4916@item C
4917Convert the date at cursor into many other cultural and historic
4918calendars.
31e5288c 4919@c
525f4f90
CD
4920@kindex H
4921@item H
4922Show holidays for three month around the cursor date.
31e5288c 4923@c
77ef352e 4924@c FIXME: This should be a different key.
2b642957
CD
4925@kindex C-c C-x C-c
4926@item C-c C-x C-c
4927Export a single iCalendar file containing entries from all agenda files.
2b642957 4928
31e5288c
CD
4929@tsubheading{Exporting to a file}
4930@kindex C-x C-w
4931@item C-x C-w
4932@cindex exporting agenda views
4933@cindex agenda views, exporting
4934Write the agenda view to a file. Depending on the extension of the
4935selected file name, the view will be exported as HTML (extension
4936@file{.html} or @file{.htm}), Postscript (extension @file{.ps}), or
4937plain text (any other extension). Use the variable
4938@code{org-agenda-exporter-settings} to set options for @file{ps-print}
4939and for @file{htmlize} to be used during export.
4940
891f4676
RS
4941@tsubheading{Quit and Exit}
4942@kindex q
4943@item q
26ca33ed 4944Quit agenda, remove the agenda buffer.
31e5288c 4945@c
891f4676
RS
4946@kindex x
4947@cindex agenda files, removing buffers
4948@item x
4949Exit agenda, remove the agenda buffer and all buffers loaded by Emacs
4950for the compilation of the agenda. Buffers created by the user to
4951visit org files will not be removed.
891f4676
RS
4952@end table
4953
86f46920
CD
4954
4955@node Custom agenda views, , Agenda commands, Agenda views
4956@section Custom agenda views
4957@cindex custom agenda views
4958@cindex agenda views, custom
4959
4960Custom agenda commands serve two purposes: to store and quickly access
4961frequently used TODO and tags searches, and to create special composite
4962agenda buffers. Custom agenda commands will be accessible through the
4963dispatcher (@pxref{Agenda dispatcher}), just like the default commands.
4964
4965@menu
4966* Storing searches:: Type once, use often
4967* Block agenda:: All the stuff you need in a single buffer
4968* Setting Options:: Changing the rules
31e5288c
CD
4969* Exporting Agenda Views:: Writing agendas to files.
4970* Extracting Agenda Information for other programs::
86f46920
CD
4971@end menu
4972
4973@node Storing searches, Block agenda, Custom agenda views, Custom agenda views
4974@subsection Storing searches
4975
4976The first application of custom searches is the definition of keyboard
4977shortcuts for frequently used searches, either creating an agenda
4978buffer, or a sparse tree (the latter covering of course only the current
4979buffer).
4980@kindex C-c a C
4981Custom commands are configured in the variable
4982@code{org-agenda-custom-commands}. You can customize this variable, for
4983example by pressing @kbd{C-c a C}. You can also directly set it with
4984Emacs Lisp in @file{.emacs}. The following example contains all valid
4985search types:
4986
4987@lisp
4988@group
4989(setq org-agenda-custom-commands
4990 '(("w" todo "WAITING")
4991 ("W" todo-tree "WAITING")
4992 ("u" tags "+BOSS-URGENT")
4993 ("v" tags-todo "+BOSS-URGENT")
4994 ("U" tags-tree "+BOSS-URGENT")
4995 ("f" occur-tree "\\<FIXME\\>")))
4996@end group
4997@end lisp
4998
4999@noindent
5000The initial single-character string in each entry defines the character
5001you have to press after the dispatcher command @kbd{C-c a} in order to
5002access the command. The second parameter is the search type, followed
5003by the string or regular expression to be used for the matching. The
5004example above will therefore define:
5005
5006@table @kbd
5007@item C-c a w
5008as a global search for TODO entries with @samp{WAITING} as the TODO
5009keyword
5010@item C-c a W
5011as the same search, but only in the current buffer and displaying the
5012results as a sparse tree
5013@item C-c a u
5014as a global tags search for headlines marked @samp{:BOSS:} but not
5015@samp{:URGENT:}
5016@item C-c a v
5017as the same search as @kbd{C-c a u}, but limiting the search to
5018headlines that are also TODO items
5019@item C-c a U
5020as the same search as @kbd{C-c a u}, but only in the current buffer and
5021displaying the result as a sparse tree
5022@item C-c a f
5023to create a sparse tree (again: current buffer only) with all entries
5024containing the word @samp{FIXME}.
5025@end table
5026
5027@node Block agenda, Setting Options, Storing searches, Custom agenda views
5028@subsection Block agenda
5029@cindex block agenda
5030@cindex agenda, with block views
5031
5032Another possibility is the construction of agenda views that comprise
5033the results of @emph{several} commands, each of which creates a block in
5034the agenda buffer. The available commands include @code{agenda} for the
5035daily or weekly agenda (as created with @kbd{C-c a a}), @code{alltodo}
5036for the global todo list (as constructed with @kbd{C-c a t}), and the
5037matching commands discussed above: @code{todo}, @code{tags}, and
5038@code{tags-todo}. Here are two examples:
5039
5040@lisp
5041@group
5042(setq org-agenda-custom-commands
5043 '(("h" "Agenda and Home-related tasks"
5044 ((agenda)
5045 (tags-todo "HOME")
5046 (tags "GARDEN")))
5047 ("o" "Agenda and Office-related tasks"
5048 ((agenda)
5049 (tags-todo "WORK")
5050 (tags "OFFICE")))))
5051@end group
5052@end lisp
5053
5054@noindent
5055This will define @kbd{C-c a h} to create a multi-block view for stuff
5056you need to attend to at home. The resulting agenda buffer will contain
5057your agenda for the current week, all TODO items that carry the tag
5058@samp{HOME}, and also all lines tagged with @samp{GARDEN}. Finally the
5059command @kbd{C-c a o} provides a similar view for office tasks.
5060
5061
31e5288c 5062@node Setting Options, Exporting Agenda Views, Block agenda, Custom agenda views
86f46920
CD
5063@subsection Setting Options for custom commands
5064@cindex options, for custom agenda views
5065
5066Org-mode contains a number of variables regulating agenda construction
5067and display. The global variables define the behavior for all agenda
5068commands, including the custom commands. However, if you want to change
5069some settings just for a single custom view, you can do so. Setting
5070options requires inserting a list of variable names and values at the
5071right spot in @code{org-agenda-custom-commands}. For example:
5072
5073@lisp
5074@group
5075(setq org-agenda-custom-commands
5076 '(("w" todo "WAITING"
5077 ((org-agenda-sorting-strategy '(priority-down))
5078 (org-agenda-prefix-format " Mixed: ")))
5079 ("U" tags-tree "+BOSS-URGENT"
5080 ((org-show-following-heading nil)
5081 (org-show-hierarchy-above nil)))))
5082@end group
5083@end lisp
5084
5085@noindent
5086Now the @kbd{C-c a w} command will sort the collected entries only by
5087priority, and the prefix format is modified to just say @samp{ Mixed:}
5088instead of giving the category of the entry. The sparse tags tree of
5089@kbd{C-c a U} will now turn out ultra-compact, because neither the
5090headline hierarchy above the match, nor the headline following the match
5091will be shown.
5092
5093For command sets creating a block agenda,
5094@code{org-agenda-custom-commands} has two separate spots for setting
5095options. You can add options that should be valid for just a single
5096command in the set, and options that should be valid for all commands in
5097the set. The former are just added to the command entry, the latter
5098must come after the list of command entries. Going back to the block
5099agenda example (@pxref{Block agenda}), let's change the sorting strategy
5100for the @kbd{C-c a h} commands to @code{priority-down}, but let's sort
5101the results for GARDEN tags query in the opposite order,
5102@code{priority-up}. This would look like this:
5103
5104@lisp
5105@group
5106(setq org-agenda-custom-commands
5107 '(("h" "Agenda and Home-related tasks"
5108 ((agenda)
5109 (tags-todo "HOME")
31e5288c
CD
5110 (tags "GARDEN"
5111 ((org-agenda-sorting-strategy '(priority-up)))))
86f46920
CD
5112 ((org-agenda-sorting-strategy '(priority-down))))
5113 ("o" "Agenda and Office-related tasks"
5114 ((agenda)
5115 (tags-todo "WORK")
5116 (tags "OFFICE")))))
5117@end group
5118@end lisp
5119
5120As you see, the values and parenthesis setting is a little complex.
5121When in doubt, use the customize interface to set this variable - it
5122fully supports its structure. Just one caveat: When setting options in
5123this interface, the @emph{values} are just lisp expressions. So if the
5124value is a string, you need to add the double quotes around the value
5125yourself.
5126
86f46920 5127
31e5288c
CD
5128@node Exporting Agenda Views, Extracting Agenda Information for other programs, Setting Options, Custom agenda views
5129@subsection Exporting Agenda Views
5130@cindex agenda views, exporting
5131
5132If you are away from your computer, it can be very useful to have a
5133printed version of some agenda views to carry around. Org-mode can
5134export custom agenda views as plain text, HTML@footnote{You need to
5135install Hrvoje Niksic' @file{htmlize.el}.} and postscript. If you want
5136to do this only occasionally, use the commend
5137
5138@table @kbd
5139@kindex C-x C-w
5140@item C-x C-w
5141@cindex exporting agenda views
5142@cindex agenda views, exporting
5143Write the agenda view to a file. Depending on the extension of the
5144selected file name, the view will be exported as HTML (extension
5145@file{.html} or @file{.htm}), Postscript (extension @file{.ps}), or
5146plain text (any other extension). Use the variable
5147@code{org-agenda-exporter-settings} to set options for @file{ps-print}
5148and for @file{htmlize} to be used during export, for example
5149@lisp
5150(setq org-agenda-exporter-settings
5151 '((ps-number-of-columns 2)
5152 (ps-landscape-mode t)
5153 (htmlize-output-type 'css)))
5154@end lisp
5155@end table
5156
5157If you need to export certain agenda views frequently, you can associate
5158any custom agenda command with a list of output file names
5159@footnote{If you want to store standard views like the weekly agenda
5160or the global TODO list as well, you need to define custom commands for
5161them in order to be able to specify filenames.}. Here is an example
5162that first does define custom commands for the agenda and the global
5163todo list, together with a number of files to which to export them.
5164Then we define two block agenda commands and specify filenames for them
5165as well. File names can be relative to the current working directory,
5166or absolute.
5167
5168@lisp
5169@group
5170(setq org-agenda-custom-commands
5171 '(("X" agenda "" nil ("agenda.html" "agenda.ps"))
5172 ("Y" alltodo "" nil ("todo.html" "todo.txt" "todo.ps"))
5173 ("h" "Agenda and Home-related tasks"
5174 ((agenda)
5175 (tags-todo "HOME")
5176 (tags "GARDEN"))
5177 nil
5178 ("~/views/home.html"))
5179 ("o" "Agenda and Office-related tasks"
5180 ((agenda)
5181 (tags-todo "WORK")
5182 (tags "OFFICE"))
5183 nil
5184 ("~/views/office.ps"))))
5185@end group
5186@end lisp
5187
5188The extension of the file name determines the type of export. If it is
5189@file{.html}, Org-mode will use the @file{htmlize.el} package to convert
5190the buffer to HTML and save it to this file name. If the extension is
5191@file{.ps}, @code{ps-print-buffer-with-faces} is used to produce
5192postscript output. Any other extension produces a plain ASCII file.
5193
5194The export files are @emph{not} created when you use one of those
5195commands interactively. Instead, there is a special command to produce
5196@emph{all} specified files in one step:
5197
5198@table @kbd
5199@kindex C-c a e
5200@item C-c a e
5201Export all agenda views that have export filenames associated with
5202them.
5203@end table
5204
5205You can use the options section of the custom agenda commands to also
5206set options for the export commands. For example:
5207
5208@lisp
5209(setq org-agenda-custom-commands
5210 '(("X" agenda ""
5211 ((ps-number-of-columns 2)
5212 (ps-landscape-mode t)
5213 (org-agenda-prefix-format " [ ] ")
5214 (org-agenda-with-colors nil)
5215 (org-agenda-remove-tags t))
5216 ("theagenda.ps"))))
5217@end lisp
5218
5219@noindent
5220This command sets two options for the postscript exporter, to make it
5221print in two columns in landscape format - the resulting page can be cut
5222in two and then used in a paper agenda. The remaining settings modify
5223the agenda prefix to omit category and scheduling information, and
5224instead include a checkbox to check off items. We also remove the tags
5225to make the lines compact, and we don't want to use colors for the
5226black-and-white printer. Settings specified in
5227@code{org-agenda-exporter-settings} will also apply, but the settings
5228in @code{org-agenda-custom-commands} take precedence.
5229
5230@noindent
5231From the command line you may also use
5232@example
5233emacs -f org-batch-store-agenda-views -kill
5234@end example
5235@noindent
5236or, if you need to modify some parameters
5237@example
5238emacs -eval '(org-batch-store-agenda-views \
5239 org-agenda-ndays 30 \
5240 org-agenda-include-diary nil \
5241 org-agenda-files (quote ("~/org/project.org")))' \
5242 -kill
5243@end example
5244@noindent
5245which will create the agenda views restricted to the file
5246@file{~/org/project.org}, without diary entries and with 30 days
5247extent.
5248
5249@node Extracting Agenda Information for other programs, , Exporting Agenda Views, Custom agenda views
5250@subsection Extracting Agenda Information for other programs
5251@cindex agenda, pipe
5252@cindex Scripts, for agenda processing
5253
5254Org-mode provides commands to access agenda information for the command
5255line in emacs batch mode. This extracted information can be sent
5256directly to a printer, or it can be read by a program that does further
5257processing of the data. The first of these commands is the function
5258@code{org-batch-agenda}, that produces an agenda view and sends it as
5259ASCII text to STDOUT. The command takes a single string as parameter.
5260If the string has length 1, it is used as a key to one of the commands
5261you have configured in @code{org-agenda-custom-commands}, basically any
5262key you can use after @kbd{C-c a}. For example, to directly print the
5263current TODO list, you could use
86f46920
CD
5264
5265@example
5266emacs -batch -l ~/.emacs -eval '(org-batch-agenda "t")' | lpr
5267@end example
5268
31e5288c
CD
5269If the parameter is a string with 2 or more characters, it is used as a
5270tags/todo match string. For example, to print your local shopping list
5271(all items with the tag @samp{shop}, but excluding the tag
5272@samp{NewYork}), you could use
5273
5274@example
5275emacs -batch -l ~/.emacs \
5276 -eval '(org-batch-agenda "+shop-NewYork")' | lpr
5277@end example
5278
86f46920
CD
5279@noindent
5280You may also modify parameters on the fly like this:
5281
5282@example
5283emacs -batch -l ~/.emacs \
5284 -eval '(org-batch-agenda "a" \
31e5288c 5285 org-agenda-ndays 30 \
86f46920
CD
5286 org-agenda-include-diary nil \
5287 org-agenda-files (quote ("~/org/project.org")))' \
5288 | lpr
5289@end example
5290
5291@noindent
31e5288c 5292which will produce a 30 day agenda, fully restricted to the Org file
86f46920
CD
5293@file{~/org/projects.org}, not even including the diary.
5294
31e5288c
CD
5295If you want to process the agenda data in more sophisticated ways, you
5296can use the command @code{org-batch-agenda-csv} to get a comma-separated
5297list of values for each agenda item. Each line in the output will
5298contain a number of fields separated by commas. The fields in a line
5299are:
5300
5301@example
5302category @r{The category of the item}
5303head @r{The headline, without TODO kwd, TAGS and PRIORITY}
5304type @r{The type of the agenda entry, can be}
5305 todo @r{selected in TODO match}
5306 tagsmatch @r{selected in tags match}
5307 diary @r{imported from diary}
5308 deadline @r{a deadline}
5309 scheduled @r{scheduled}
5310 timestamp @r{appointment, selected by timestamp}
5311 closed @r{entry was closed on date}
5312 upcoming-deadline @r{warning about nearing deadline}
5313 past-scheduled @r{forwarded scheduled item}
5314 block @r{entry has date block including date}
5315todo @r{The todo keyword, if any}
5316tags @r{All tags including inherited ones, separated by colons}
5317date @r{The relevant date, like 2007-2-14}
5318time @r{The time, like 15:00-16:50}
5319extra @r{String with extra planning info}
5320priority-l @r{The priority letter if any was given}
5321priority-n @r{The computed numerical priority}
5322@end example
5323
5324@noindent
5325Time and date will only be given if a timestamp (or deadline/scheduled)
5326lead to the selection of the item.
5327
5328A CSV list like this is very easy to use in a post processing script.
5329For example, here is a Perl program that gets the TODO list from
5330Emacs/org-mode and prints all the items, preceded by a checkbox:
5331
5332@example
5333@group
5334#!/usr/bin/perl
5335
5336# define the Emacs command to run
5337$cmd = "emacs -batch -l ~/.emacs -eval '(org-batch-agenda-csv \"t\")'";
5338
5339# run it and capture the output
5340$agenda = qx@{$cmd 2>/dev/null@};
5341
5342# loop over all lines
5343foreach $line (split(/\n/,$agenda)) @{
5344
5345 # get the individual values
5346 ($category,$head,$type,$todo,$tags,$date,$time,$extra,
5347 $priority_l,$priority_n) = split(/,/,$line);
5348
5349 # proccess and print
5350 print "[ ] $head\n";
5351@}
5352@end group
5353@end example
5354
a1f058c6
CD
5355@node Embedded LaTeX, Exporting, Agenda views, Top
5356@chapter Embedded LaTeX
5357@cindex @TeX{} interpretation
5358@cindex La@TeX{} interpretation
5359
5360Plain ASCII is normally sufficient for almost all note taking. One
5361exception, however, are scientific notes which need to be able to
5362contain mathematical symbols and the occasional formula.
5363La@TeX{}@footnote{La@TeX{} is a macro system based on Donald E. Knuth's
5364@TeX{} system. Many of the features described here as ``La@TeX{}'' are
5365really from @TeX{}, but for simplicity I am blurring this distinction.}
5366is widely used to typeset scientific documents. Org-mode supports
5367embedding La@TeX{} code into its files, because many academics are used
5368to read La@TeX{} source code, and because it can be readily processed
5369into images for HTML production.
5370
5371It is not necessary to mark La@TeX{} macros and code in any special way.
5372If you observe a few conventions, Org-mode knows how to find it and what
5373to do with it.
5374
5375@menu
5376* Math symbols:: TeX macros for symbols and Greek letters
5377* Subscripts and Superscripts:: Simple syntax for raising/lowering text
5378* LaTeX fragments:: Complex formulas made easy
5379* Processing LaTeX fragments:: Previewing LaTeX processing
5380* CDLaTeX mode:: Speed up entering of formulas
5381@end menu
5382
5383@node Math symbols, Subscripts and Superscripts, Embedded LaTeX, Embedded LaTeX
5384@section Math symbols
86f46920
CD
5385@cindex math symbols
5386@cindex TeX macros
a1f058c6
CD
5387
5388You can use La@TeX{} macros to insert special symbols like @samp{\alpha}
5389to indicate the Greek letter, or @samp{\to} to indicate an arrow.
5390Completion for these macros is available, just type @samp{\} and maybe a
5391few letters, and press @kbd{M-@key{TAB}} to see possible completions.
5392Unlike La@TeX{} code, Org-mode allows these macros to be present
5393without surrounding math delimiters, for example:
5394
5395@example
5396Angles are written as Greek letters \alpha, \beta and \gamma.
5397@end example
5398
5399During HTML export (@pxref{HTML export}), these symbols are translated
5400into the proper syntax for HTML, for the above examples this is
5401@samp{&alpha;} and @samp{&rarr;}, respectively.
5402
5403@node Subscripts and Superscripts, LaTeX fragments, Math symbols, Embedded LaTeX
5404@section Subscripts and Superscripts
86f46920
CD
5405@cindex subscript
5406@cindex superscript
a1f058c6
CD
5407
5408Just like in La@TeX{}, @samp{^} and @samp{_} are used to indicate super-
5409and subscripts. Again, these can be used without embedding them in
5410math-mode delimiters. To increase the readability of ASCII text, it is
5411not necessary (but OK) to surround multi-character sub- and superscripts
5412with curly braces. For example
5413
5414@example
dbdd7534 5415The mass if the sun is M_sun = 1.989 x 10^30 kg. The radius of
a1f058c6
CD
5416the sun is R_@{sun@} = 6.96 x 10^8 m.
5417@end example
5418
5419To avoid interpretation as raised or lowered text, you can quote
5420@samp{^} and @samp{_} with a backslash: @samp{\_} and @samp{\^}.
5421
5422During HTML export (@pxref{HTML export}), subscript and superscripts
5423are surrounded with @code{<sub>} and @code{<sup>} tags, respectively.
5424
5425@node LaTeX fragments, Processing LaTeX fragments, Subscripts and Superscripts, Embedded LaTeX
5426@section LaTeX fragments
86f46920 5427@cindex LaTeX fragments
a1f058c6
CD
5428
5429With symbols, sub- and superscripts, HTML is pretty much at its end when
86f46920
CD
5430it comes to representing mathematical formulas@footnote{Yes, there is
5431MathML, but that is not yet fully supported by many browsers, and there
5432is no decent converter for turning LaTeX of ASCII representations of
5433formulas into MathML. So for the time being, converting formulas into
5434images seems the way to go.}. More complex
a1f058c6
CD
5435expressions need a dedicated formula processor. To this end, Org-mode
5436can contain arbitrary La@TeX{} fragments. It provides commands to
5437preview the typeset result of these fragments, and upon export to HTML,
5438all fragments will be converted to images and inlined into the HTML
5439document. For this to work you need to be on a system with a working
5440La@TeX{} installation. You also need the @file{dvipng} program,
31e5288c
CD
5441available at @url{http://sourceforge.net/projects/dvipng/}. The LaTeX
5442header that will be used when processing a fragment can be configured
5443with the variable @code{org-format-latex-header}.
a1f058c6
CD
5444
5445La@TeX{} fragments don't need any special marking at all. The following
5446snippets will be identified as LaTeX source code:
5447@itemize @bullet
5448@item
5449Environments of any kind. The only requirement is that the
dbdd7534 5450@code{\begin} statement appears on a new line, preceded by only
a1f058c6
CD
5451whitespace.
5452@item
dbdd7534
CD
5453Text within the usual La@TeX{} math delimiters. To avoid conflicts with
5454currency specifications, single @samp{$} characters are only recognized
5455as math delimiters if the enclosed text contains at most two line breaks,
5456is directly attached to the @samp{$} characters with no whitespace in
5457between, and if the closing @samp{$} is followed by whitespace or
5458punctuation. For the other delimiters, there is no such restriction, so
5459when in doubt, use @samp{\(...\)} as inline math delimiters.
a1f058c6
CD
5460@end itemize
5461
5462@noindent For example:
5463
5464@example
5465\begin@{equation@} % arbitrary environments,
5466x=\sqrt@{b@} % even tables, figures
5467\end@{equation@} % etc
5468
dbdd7534 5469If $a^2=b$ and \( b=2 \), then the solution must be
a1f058c6
CD
5470either $$ a=+\sqrt@{2@} $$ or \[ a=-\sqrt@{2@} \].
5471@end example
5472
5473@noindent
5474If you need any of the delimiter ASCII sequences for other purposes, you
5475can configure the option @code{org-format-latex-options} to deselect the
5476ones you do not wish to have interpreted by the La@TeX{} converter.
5477
5478@node Processing LaTeX fragments, CDLaTeX mode, LaTeX fragments, Embedded LaTeX
5479@section Processing LaTeX fragments
86f46920 5480@cindex LaTeX fragments, preview
a1f058c6
CD
5481
5482La@TeX{} fragments can be processed to produce a preview images of the
5483typeset expressions:
5484
5485@table @kbd
5486@kindex C-c C-x C-l
5487@item C-c C-x C-l
5488Produce a preview image of the La@TeX{} fragment at point and overlay it
5489over the source code. If there is no fragment at point, process all
5490fragments in the current entry (between two headlines). When called
5491with a prefix argument, process the entire subtree. When called with
5492two prefix arguments, or when the cursor is before the first headline,
5493process the entire buffer.
5494@kindex C-c C-c
5495@item C-c C-c
5496Remove the overlay preview images.
5497@end table
5498
5499During HTML export (@pxref{HTML export}), all La@TeX{} fragments are
5500converted into images and inlined into the document if the following
5501setting is active:
5502
5503@lisp
5504(setq org-export-with-LaTeX-fragments t)
5505@end lisp
5506
5507@node CDLaTeX mode, , Processing LaTeX fragments, Embedded LaTeX
5508@section Using CDLaTeX to enter math
86f46920 5509@cindex CDLaTeX
a1f058c6
CD
5510
5511CDLaTeX-mode is a minor mode that is normally used in combination with a
5512major LaTeX mode like AUCTeX in order to speed-up insertion of
5513environments and math templates. Inside Org-mode, you can make use of
dbdd7534
CD
5514some of the features of cdlatex-mode. You need to install
5515@file{cdlatex.el} and @file{texmathp.el} (the latter comes also with
5516AUCTeX) from @url{http://www.astro.uva.nl/~dominik/Tools/cdlatex}.
5517Don't turn cdlatex-mode itself under Org-mode, but use the light
5518version @code{org-cdlatex-mode} that comes as part of Org-mode. Turn it
5519on for the current buffer with @code{M-x org-cdlatex-mode}, or for all
a1f058c6
CD
5520Org-mode files with
5521
5522@lisp
5523(add-hook 'org-mode-hook 'turn-on-org-cdlatex)
5524@end lisp
5525
5526When this mode is enabled, the following features are present (for more
5527details see the documentation of cdlatex-mode):
5528@itemize @bullet
5529@kindex C-c @{
5530@item
5531Environment templates can be inserted with @kbd{C-c @{}.
5532@item
5533@kindex @key{TAB}
5534The @key{TAB} key will do template expansion if the cursor is inside a
dbdd7534
CD
5535LaTeX fragment@footnote{Org-mode has a method to test if the cursor is
5536inside such a fragment, see the documentation of the function
a1f058c6
CD
5537@code{org-inside-LaTeX-fragment-p}.}. For example, @key{TAB} will
5538expand @code{fr} to @code{\frac@{@}@{@}} and position the cursor
5539correctly inside the first brace. Another @key{TAB} will get you into
5540the second brace. Even outside fragments, @key{TAB} will expand
5541environment abbreviations at the beginning of a line. For example, if
5542you write @samp{equ} at the beginning of a line and press @key{TAB},
5543this abbreviation will be expanded to an @code{equation} environment.
dbdd7534 5544To get a list of all abbreviations, type @kbd{M-x cdlatex-command-help}.
a1f058c6
CD
5545@item
5546@kindex _
5547@kindex ^
5548Pressing @kbd{_} and @kbd{^} inside a LaTeX fragment will insert these
5549characters together with a pair of braces. If you use @key{TAB} to move
5550out of the braces, and if the braces surround only a single character or
5551macro, they are removed again (depending on the variable
5552@code{cdlatex-simplify-sub-super-scripts}).
5553@item
5554@kindex `
5555Pressing the backquote @kbd{`} followed by a character inserts math
5556macros, also outside LaTeX fragments. If you wait more than 1.5 seconds
5557after the backquote, a help window will pop up.
5558@item
5559@kindex '
5560Pressing the normal quote @kbd{'} followed by another character modifies
5561the symbol before point with an accent or a font. If you wait more than
55621.5 seconds after the backquote, a help window will pop up. Character
5563modification will work only inside La@TeX{} fragments, outside the quote
5564is normal.
5565@end itemize
5566
5567@node Exporting, Publishing, Embedded LaTeX, Top
891f4676
RS
5568@chapter Exporting
5569@cindex exporting
891f4676 5570
d9f6d794
CD
5571Org-mode documents can be exported into a variety of other formats. For
5572printing and sharing of notes, ASCII export produces a readable and
8ef8f2e6
CD
5573simple version of an Org-mode file. HTML export allows you to publish a
5574notes file on the web, while the XOXO format provides a solid base for
d9f6d794
CD
5575exchange with a broad range of other applications. To incorporate
5576entries with associated times like deadlines or appointments into a
5577desktop calendar program like iCal, Org-mode can also produce extracts
5578in the iCalendar format. Currently Org-mode only supports export, not
5579import of these different formats.
5580
5581When exporting, Org-mode uses special conventions to enrich the output
5582produced. @xref{Text interpretation}, for more details.
891f4676 5583
77ef352e
CD
5584@table @kbd
5585@kindex C-c C-e
5586@item C-c C-e
5587Dispatcher for export and publishing commands. Displays a help-window
5588listing the additional key(s) needed to launch an export or publishing
5589command.
5590@end table
5591
891f4676 5592@menu
d9f6d794
CD
5593* ASCII export:: Exporting to plain ASCII
5594* HTML export:: Exporting to HTML
8ef8f2e6 5595* XOXO export:: Exporting to XOXO
d9f6d794
CD
5596* iCalendar export:: Exporting in iCalendar format
5597* Text interpretation:: How the exporter looks at the file
891f4676
RS
5598@end menu
5599
2b642957
CD
5600@node ASCII export, HTML export, Exporting, Exporting
5601@section ASCII export
5602@cindex ASCII export
891f4676 5603
6a04ed1c 5604ASCII export produces a simple and very readable version of an Org-mode
d9f6d794
CD
5605file.
5606
891f4676
RS
5607@cindex region, active
5608@cindex active region
5609@cindex transient-mark-mode
5610@table @kbd
77ef352e
CD
5611@kindex C-c C-e a
5612@item C-c C-e a
891f4676
RS
5613Export as ASCII file. If there is an active region, only the region
5614will be exported. For an org file @file{myfile.org}, the ASCII file
5615will be @file{myfile.txt}. The file will be overwritten without
5616warning.
77ef352e
CD
5617@kindex C-c C-e v a
5618@item C-c C-e v a
8ef8f2e6 5619Export only the visible part of the document.
2b642957
CD
5620@end table
5621
5622@cindex headline levels, for exporting
5623In the exported version, the first 3 outline levels will become
5624headlines, defining a general document structure. Additional levels
26ca33ed 5625will be exported as itemized lists. If you want that transition to occur
2b642957 5626at a different level, specify it with a prefix argument. For example,
26ca33ed 5627
2b642957 5628@example
77ef352e 5629@kbd{C-1 C-c C-e a}
2b642957 5630@end example
26ca33ed 5631
2b642957 5632@noindent
2dcffa1c
CD
5633creates only top level headlines and does the rest as items. When
5634headlines are converted to items, the indentation of the text following
5635the headline is changed to fit nicely under the item. This is done with
dbdd7534
CD
5636the assumption that the first bodyline indicates the base indentation of
5637the body text. Any indentation larger than this is adjusted to preserve
2dcffa1c
CD
5638the layout relative to the first line. Should there be lines with less
5639indentation than the first, these are left alone.
2b642957 5640
8ef8f2e6 5641@node HTML export, XOXO export, ASCII export, Exporting
2b642957
CD
5642@section HTML export
5643@cindex HTML export
5644
6a04ed1c
CD
5645Org-mode contains an HTML (XHTML 1.0 strict) exporter with extensive
5646HTML formatting, in ways similar to John Grubers @emph{markdown}
5647language, but with additional support for tables.
2b642957 5648
06341a67 5649@menu
31e5288c 5650* Export commands:: How to invoke HTML export
06341a67
CD
5651* Quoting HTML tags:: Using direct HTML in Org-mode
5652* Links:: How hyperlinks get transferred to HTML
5653* Images:: To inline or not to inline?
5654* CSS support:: Style specifications
5655@end menu
5656
5657@node Export commands, Quoting HTML tags, HTML export, HTML export
5658@subsection HTML export commands
5659
2b642957
CD
5660@cindex region, active
5661@cindex active region
5662@cindex transient-mark-mode
5663@table @kbd
77ef352e
CD
5664@kindex C-c C-e h
5665@item C-c C-e h
891f4676 5666Export as HTML file @file{myfile.html}.
77ef352e
CD
5667@kindex C-c C-e b
5668@item C-c C-e b
891f4676 5669Export as HTML file and open it with a browser.
31e5288c
CD
5670@kindex C-c C-e H
5671@item C-c C-e H
5672Export to a temporary buffer, do not create a file.
5673@kindex C-c C-e R
5674@item C-c C-e H
5675Export the active region to a temporary buffer. With prefix arg, do not
5676produce file header and foot, but just the plain HTML section for the
5677region. This is good for cut-and-paste operations.
77ef352e
CD
5678@kindex C-c C-e v h
5679@kindex C-c C-e v b
31e5288c
CD
5680@kindex C-c C-e v H
5681@kindex C-c C-e v R
77ef352e
CD
5682@item C-c C-e v h
5683@item C-c C-e v b
31e5288c
CD
5684@item C-c C-e v H
5685@item C-c C-e v R
8ef8f2e6 5686Export only the visible part of the document.
31e5288c
CD
5687@item M-x org-export-region-as-html
5688Convert the region to HTML under the assumption that it was org-mode
5689syntax before. This is a global command that can be invoked in any
5690buffer.
891f4676
RS
5691@end table
5692
2b642957
CD
5693@cindex headline levels, for exporting
5694In the exported version, the first 3 outline levels will become
5695headlines, defining a general document structure. Additional levels
26ca33ed 5696will be exported as itemized lists. If you want that transition to occur
2b642957 5697at a different level, specify it with a prefix argument. For example,
26ca33ed 5698
2b642957 5699@example
77ef352e 5700@kbd{C-2 C-c C-e b}
2b642957 5701@end example
26ca33ed 5702
2b642957
CD
5703@noindent
5704creates two levels of headings and does the rest as items.
5705
06341a67
CD
5706@node Quoting HTML tags, Links, Export commands, HTML export
5707@subsection Quoting HTML tags
5708
d9f6d794 5709Plain @samp{<} and @samp{>} are always transformed to @samp{&lt;} and
06341a67
CD
5710@samp{&gt;} in HTML export. If you want to include simple HTML tags
5711which should be interpreted as such, mark them with @samp{@@} as in
5712@samp{@@<b>bold text@@</b>}. Note that this really works only for
5713simple tags. For more extensive HTML that should be copied verbatim to
5714the exported file use either
5715
5716@example
5717#+HTML: Literal HTML code for export
5718@end example
5719
5720@noindent or
5721
5722@example
5723#+BEGIN_HTML
5724All lines between these markers are exported literally
5725#+END_HTML
5726@end example
5727
5728
5729@node Links, Images, Quoting HTML tags, HTML export
5730@subsection Links
d9f6d794 5731
8ef8f2e6
CD
5732@cindex links, in HTML export
5733@cindex internal links, in HTML export
5734@cindex external links, in HTML export
5735Internal links (@pxref{Internal links}) will continue to work in HTML
5736files only if they match a dedicated @samp{<<target>>}. Automatic links
5737created by radio targets (@pxref{Radio targets}) will also work in the
5738HTML file. Links to external files will still work if the HTML file is
5739in the same directory as the Org-mode file. Links to other @file{.org}
5740files will be translated into HTML links under the assumption that an
5741HTML version also exists of the linked file. For information related to
5742linking files while publishing them to a publishing directory see
5743@ref{Publishing links}.
5744
06341a67
CD
5745@node Images, CSS support, Links, HTML export
5746@subsection Images
5747
5748@cindex images, inline in HTML
5749@cindex inlining images in HTML
5750HTML export can inline images given as links in the Org-mode file, and
5751it can make an image the clickable part of a link. By
5752default@footnote{but see the variable
5753@code{org-export-html-inline-images}}, images are inlined if a link does
5754not have a description. So @samp{[[file:myimg.jpg]]} will be inlined,
5755while @samp{[[file:myimg.jpg][the image]]} will just produce a link
5756@samp{the image} that points to the image. If the description part
5757itself is a @code{file:} link or a @code{http:} URL pointing to an
5758image, this image will be inlined and activated so that clicking on the
5759image will activate the link. For example, to include a thumbnail that
5760will link to a high resolution version of the image, you could use:
5761
5762@example
5763[[file:highres.jpg][file:thumb.jpg]]
5764@end example
5765
5766@noindent
5767and you could use @code{http} addresses just as well.
5768
5769@node CSS support, , Images, HTML export
5770@subsection CSS support
5771
8ef8f2e6
CD
5772You can also give style information for the exported file. The HTML
5773exporter assigns the following CSS classes to appropriate parts of the
5774document - your style specifications may change these:
5775@example
5776.todo @r{TODO keywords}
5777.done @r{the DONE keyword}
5778.timestamp @r{time stamp}
5779.timestamp-kwd @r{keyword associated with a time stamp, like SCHEDULED}
5780.tag @r{tag in a headline}
5781.target @r{target for links}
5782@end example
5783
5784The default style specification can be configured through the option
d9f6d794
CD
5785@code{org-export-html-style}. If you want to use a file-local style,
5786you may use file variables, best wrapped into a COMMENT section at the
06341a67
CD
5787end of the outline tree. For example@footnote{Under Emacs 21, the
5788continuation lines for a variable value should have no @samp{#} at the
5789start of the line.}:
d9f6d794
CD
5790
5791@example
06341a67 5792* COMMENT html style specifications
d9f6d794
CD
5793
5794# Local Variables:
5795# org-export-html-style: " <style type=\"text/css\">
0730c539
CD
5796# p @{font-weight: normal; color: gray; @}
5797# h1 @{color: black; @}
5798# </style>"
5799# End:
d9f6d794
CD
5800@end example
5801
5802Remember to execute @kbd{M-x normal-mode} after changing this to make
5803the new style visible to Emacs. This command restarts org-mode for the
5804current buffer and forces Emacs to re-evaluate the local variables
5805section in the buffer.
5806
6bef8c45
CD
5807@c FIXME: More about header and footer styles
5808@c FIXME: Talk about links and targets.
5809
8ef8f2e6
CD
5810@node XOXO export, iCalendar export, HTML export, Exporting
5811@section XOXO export
5812@cindex XOXO export
d9f6d794 5813
8ef8f2e6 5814Org-mode contains an exporter that produces XOXO-style output.
d9f6d794
CD
5815Currently, this exporter only handles the general outline structure and
5816does not interpret any additional Org-mode features.
5817
5818@table @kbd
77ef352e
CD
5819@kindex C-c C-e x
5820@item C-c C-e x
8ef8f2e6 5821Export as XOXO file @file{myfile.html}.
77ef352e
CD
5822@kindex C-c C-e v
5823@item C-c C-e v x
8ef8f2e6 5824Export only the visible part of the document.
d9f6d794
CD
5825@end table
5826
8ef8f2e6 5827@node iCalendar export, Text interpretation, XOXO export, Exporting
d9f6d794
CD
5828@section iCalendar export
5829@cindex iCalendar export
5830
5831Some people like to use Org-mode for keeping track of projects, but
5832still prefer a standard calendar application for anniversaries and
5833appointments. In this case it can be useful to have deadlines and
5834other time-stamped items in Org-mode files show up in the calendar
5835application. Org-mode can export calendar information in the standard
06341a67
CD
5836iCalendar format. If you also want to have TODO entries included in the
5837export, configure the variable @code{org-icalendar-include-todo}.
d9f6d794
CD
5838
5839@table @kbd
77ef352e
CD
5840@kindex C-c C-e i
5841@item C-c C-e i
d9f6d794
CD
5842Create iCalendar entries for the current file and store them in the same
5843directory, using a file extension @file{.ics}.
77ef352e
CD
5844@kindex C-c C-e I
5845@item C-c C-e I
5846Like @kbd{C-c C-e i}, but do this for all files in
d9f6d794
CD
5847@code{org-agenda-files}. For each of these files, a separate iCalendar
5848file will be written.
77ef352e
CD
5849@kindex C-c C-e c
5850@item C-c C-e c
d9f6d794
CD
5851Create a single large iCalendar file from all files in
5852@code{org-agenda-files} and write it to the file given by
5853@code{org-combined-agenda-icalendar-file}.
5854@end table
5855
5856How this calendar is best read and updated, depends on the application
06341a67
CD
5857you are using. The FAQ covers this issue.
5858
d9f6d794
CD
5859
5860@node Text interpretation, , iCalendar export, Exporting
5861@section Text interpretation by the exporter
5862
5863The exporter backends interpret additional structure in the Org-mode file
5864in order to produce better output.
5865
2b642957 5866@menu
d9f6d794 5867* Comment lines:: Some lines will not be exported
31e5288c
CD
5868* Initial text:: Text before the first headline
5869* Footnotes:: Numbers like [1]
d9f6d794
CD
5870* Enhancing text:: Subscripts, symbols and more
5871* Export options:: How to influence the export settings
2b642957
CD
5872@end menu
5873
31e5288c 5874@node Comment lines, Initial text, Text interpretation, Text interpretation
d9f6d794
CD
5875@subsection Comment lines
5876@cindex comment lines
5877@cindex exporting, not
5878
5879Lines starting with @samp{#} in column zero are treated as comments
5880and will never be exported. Also entire subtrees starting with the
31e5288c 5881word @samp{COMMENT} will never be exported.
d9f6d794
CD
5882
5883@table @kbd
5884@kindex C-c ;
5885@item C-c ;
5886Toggle the COMMENT keyword at the beginning of an entry.
5887@end table
5888
31e5288c
CD
5889@node Initial text, Footnotes, Comment lines, Text interpretation
5890@subsection Text before the first headline
5891
5892Org-mode normally ignores any text before the first headline when
5893exporting, leaving this region for internal links to speed up navigation
5894etc. However, in publishing-oriented files, you might want to have some
5895text before the first headline, like a small introduction, special HTML
5896code with a navigation bar, etc. You can ask to have this part of the
5897file exported as well by setting the variable
5898@code{org-export-skip-text-before-1st-heading} to @code{nil}. On a
5899per-file basis, you can get the same effect with
5900
5901@example
5902#+OPTIONS: skip:nil
5903@end example
5904
5905The text before the first headline will be fully processed
5906(@pxref{Enhancing text}), and the first non-comment line becomes the
5907title of the exported document. If you need to include literal HTML,
5908use the special constructs described in @ref{Quoting HTML tags}. The
5909table of contents is normally inserted directly before the first
5910headline of the file. If you would like to get it to a different
5911location, insert the string @code{[TABLE-OF-CONTENTS]} on a line by
5912itself at the desired location.
5913
5914Finally, if you want to use the space before the first headline for
5915internal purposes, but @emph{still} want to place something before the
5916first headline when exporting the file, you can use the @code{#+TEXT}
5917construct:
5918
5919@example
5920#+OPTIONS: skip:t
5921#+TEXT: This text will go before the *first* headline.
5922#+TEXT: We place the table of contents here:
5923#+TEXT: [TABLE-OF-CONTENTS]
5924#+TEXT: This goes between the table of contents and the first headline
5925@end example
5926
5927@node Footnotes, Enhancing text, Initial text, Text interpretation
5928@subsection Footnotes
5929@cindex footnotes
5930@cindex @file{footnote.el}
5931
5932Numbers in square brackets are treated as footnotes, so that you can use
5933the Emacs package @file{footnote.el} to create footnotes. For example:
5934
5935@example
5936The org-mode homepage[1] clearly needs help from
5937a good web designer.
5938
5939[1] The link is: http://www.astro.uva.nl/~dominik/Tools/org
5940@end example
5941
5942@noindent
5943@kindex C-c !
5944Note that the @file{footnote} package uses @kbd{C-c !} to invoke its
5945commands. This binding conflicts with the org-mode command for
5946inserting inactive time stamps. You could use the variable
5947@code{footnote-prefix} to switch footnotes commands to another key. Or,
5948if you are too used to this binding, you could use
5949@code{org-replace-disputed-keys} and @code{org-disputed-keys} to change
5950the settings in Org-mode.
5951
5952@node Enhancing text, Export options, Footnotes, Text interpretation
d9f6d794
CD
5953@subsection Enhancing text for export
5954@cindex enhancing text
5955@cindex richer text
5956
5957Some of the export backends of Org-mode allow for sophisticated text
5958formatting, this is true in particular for the HTML backend. Org-mode
5959has a number of typing conventions that allow to produce a richly
5960formatted output.
891f4676 5961
891f4676 5962@itemize @bullet
6fd41b1f
CD
5963
5964@cindex hand-formatted lists
5965@cindex lists, hand-formatted
5966@item
d9f6d794
CD
5967Plain lists @samp{-}, @samp{*} or @samp{+} as bullet, or with @samp{1.}
5968or @samp{2)} as enumerator will be recognized and transformed if the
6bef8c45 5969backend supports lists. See @xref{Plain lists}.
ebfe0a9c 5970
891f4676
RS
5971@cindex underlined text
5972@cindex bold text
5973@cindex italic text
5974@item
a1f058c6 5975You can make words @b{*bold*}, @i{/italic/}, _underlined_,
31e5288c
CD
5976@code{=code=}, and even @samp{+strikethrough+}@footnote{but remember
5977that strikethrough is typographically evil and should @i{never} be
5978used.}.
891f4676 5979
06341a67
CD
5980@cindex horizontal rules, in exported files
5981@item
5982A line consisting of only dashes, and at least 5 of them, will be
5983exported as a horizontal line (@samp{<hr/>} in HTML).
5984
a1f058c6
CD
5985@cindex LaTeX fragments, export
5986@cindex TeX macros, export
891f4676 5987@item
a1f058c6
CD
5988Many @TeX{} macros and entire La@TeX{} fragments are converted into HTML
5989entities or images (@pxref{Embedded LaTeX}).
891f4676 5990
d9f6d794 5991@cindex tables, export
891f4676 5992@item
d9f6d794
CD
5993Tables are transformed into native tables under the exporter, if the
5994export backend supports this. Data fields before the first horizontal
5995separator line will be formatted as table header fields.
891f4676
RS
5996
5997@cindex fixed width
5998@item
6c304986
CD
5999If a headline starts with the word @samp{QUOTE}, the text below the
6000headline will be typeset as fixed-width, to allow quoting of computer
219513ac
CD
6001codes etc. Lines starting with @samp{:} are also typeset in fixed-width
6002font.
d9f6d794
CD
6003@table @kbd
6004@kindex C-c :
6005@item C-c :
6006Toggle fixed-width for entry (QUOTE) or region, see below.
6007@end table
2dcffa1c
CD
6008
6009@cindex linebreak, forced
6010@item
6011A double backslash @emph{at the end of a line} enforces a line break at
6012this position.
891f4676
RS
6013@end itemize
6014
6015If these conversions conflict with your habits of typing ASCII text,
31e5288c 6016they can all be turned off with corresponding variables. See the
d9f6d794
CD
6017customization group @code{org-export-general}, and the following section
6018which explains how to set export options with special lines in a
6019buffer.
891f4676 6020
a1f058c6 6021
d9f6d794 6022@node Export options, , Enhancing text, Text interpretation
2b642957 6023@subsection Export options
891f4676
RS
6024@cindex options, for export
6025
7837f272 6026@cindex completion, of option keywords
891f4676
RS
6027The exporter recognizes special lines in the buffer which provide
6028additional information. These lines may be put anywhere in the file.
6029The whole set of lines can be inserted into the buffer with @kbd{C-c
77ef352e 6030C-e t}. For individual lines, a good way to make sure the keyword is
bc07911a 6031correct is to type @samp{#+} and then use @kbd{M-@key{TAB}} completion
8485a053 6032(@pxref{Completion}).
891f4676 6033
d9f6d794 6034@table @kbd
77ef352e
CD
6035@kindex C-c C-e t
6036@item C-c C-e t
d9f6d794
CD
6037Insert template with export options, see example below.
6038@end table
6039
891f4676
RS
6040@example
6041#+TITLE: the title to be shown (default is the buffer name)
6042#+AUTHOR: the author (default taken from @code{user-full-name})
6043#+EMAIL: his/her email address (default from @code{user-mail-address})
6044#+LANGUAGE: language for HTML, e.g. @samp{en} (@code{org-export-default-language})
6045#+TEXT: Some descriptive text to be inserted at the beginning.
6046#+TEXT: Several lines may be given.
e47e2242 6047#+OPTIONS: H:2 num:t toc:t \n:nil @@:t ::t |:t ^:t f:t *:nil TeX:t LaTeX:t skip:t
891f4676 6048@end example
26ca33ed 6049
891f4676
RS
6050@noindent
6051The OPTIONS line is a compact form to specify export settings. Here
26ca33ed 6052you can:
891f4676
RS
6053@cindex headline levels
6054@cindex section-numbers
6055@cindex table of contents
7837f272 6056@cindex linebreak preservation
8ef8f2e6 6057@cindex quoted HTML tags
891f4676
RS
6058@cindex fixed-width sections
6059@cindex tables
6060@cindex @TeX{}-like syntax for sub- and superscripts
e47e2242 6061@cindex footnotes
891f4676
RS
6062@cindex emphasized text
6063@cindex @TeX{} macros
a1f058c6 6064@cindex La@TeX{} fragments
891f4676
RS
6065@example
6066H: @r{set the number of headline levels for export}
6067num: @r{turn on/off section-numbers}
06341a67 6068toc: @r{turn on/off table of contents, or set level limit (integer)}
891f4676 6069\n: @r{turn on/off linebreak-preservation}
8ef8f2e6 6070@@: @r{turn on/off quoted HTML tags}
891f4676
RS
6071:: @r{turn on/off fixed-width sections}
6072|: @r{turn on/off tables}
31e5288c
CD
6073^: @r{turn on/off @TeX{}-like syntax for sub- and superscripts. If}
6074 @r{you write "^:@{@}", @code{a_@{b@}} will be interpreted, but}
6075 @r{the simple @code{a_b} will be left as it is.}
e47e2242 6076f: @r{turn on/off foototes like this[1].}
891f4676 6077*: @r{turn on/off emphasized text (bold, italic, underlined)}
a1f058c6
CD
6078TeX: @r{turn on/off simple @TeX{} macros in plain text}
6079LaTeX: @r{turn on/off La@TeX{} fragments}
31e5288c 6080skip: @r{turn on/off skipping the text before the first heading}
891f4676
RS
6081@end example
6082
8ef8f2e6
CD
6083@node Publishing, Miscellaneous, Exporting, Top
6084@chapter Publishing
a1f058c6 6085@cindex publishing
8ef8f2e6 6086
4d1daf59
CD
6087Org-mode includes@footnote{@file{org-publish.el} is not distributed with
6088Emacs 21, if you are still using Emacs 21, you need you need to download
6089this file separately.} a publishing management system that allows you to
6090configure automatic HTML conversion of @emph{projects} composed of
6091interlinked org files. This system is called @emph{org-publish}. You
6092can also configure org-publish to automatically upload your exported
6093HTML pages and related attachments, such as images and source code
6094files, to a web server. Org-publish turns org-mode into a web-site
6095authoring tool.
8ef8f2e6
CD
6096
6097Org-publish has been contributed to Org-mode by David O'Toole.
6098
6099@menu
6100* Configuration:: Defining projects
6101* Sample configuration:: Example projects
6102* Triggering publication:: Publication commands
6103@end menu
6104
6105@node Configuration, Sample configuration, Publishing, Publishing
6106@section Configuration
6107
6108Publishing needs significant configuration to specify files, destination
6109and many other properties of a project.
6110
6111@menu
6112* Project alist:: The central configuration variable
a1f058c6 6113* Sources and destinations:: From here to there
8ef8f2e6
CD
6114* Selecting files:: What files are part of the project?
6115* Publishing action:: Setting the function doing the publishing
6116* Publishing options:: Tweaking HTML export
6117* Publishing links:: Which links keep working after publishing?
6118* Project page index:: Publishing a list of project files
6119@end menu
6120
a1f058c6 6121@node Project alist, Sources and destinations, Configuration, Configuration
8ef8f2e6 6122@subsection The variable @code{org-publish-project-alist}
a1f058c6
CD
6123@cindex org-publish-project-alist
6124@cindex projects, for publishing
8ef8f2e6
CD
6125
6126Org-publish is configured almost entirely through setting the value of
6127one variable, called @code{org-publish-project-alist}.
6128Each element of the list configures one project, and may be in one of
6129the two following forms:
6130
6131@lisp
6132("project-name" :property value :property value ...)
6133
6134@r{or}
6135
6a04ed1c
CD
6136("project-name" :components ("project-name" "project-name" ...))
6137
8ef8f2e6
CD
6138@end lisp
6139
6140In both cases, projects are configured by specifying property values.
6141A project defines the set of files that will be published, as well as
6a04ed1c
CD
6142the publishing configuration to use when publishing those files. When
6143a project takes the second form listed above, the individual members
6144of the ``components'' property are taken to be components of the
6145project, which group together files requiring different publishing
6146options. When you publish such a ``meta-project'' all the components
6147will also publish.
8ef8f2e6 6148
a1f058c6 6149@node Sources and destinations, Selecting files, Project alist, Configuration
8ef8f2e6 6150@subsection Sources and destinations for files
a1f058c6 6151@cindex directories, for publishing
8ef8f2e6
CD
6152
6153Most properties are optional, but some should always be set. In
6154particular, org-publish needs to know where to look for source files,
6155and where to put published files.
6156
6157@multitable @columnfractions 0.3 0.7
6158@item @code{:base-directory}
6159@tab Directory containing publishing source files
6160@item @code{:publishing-directory}
6161@tab Directory (possibly remote) where output files will be published.
86f46920
CD
6162@item @code{:preparation-function}
6163@tab Function called before starting publishing process, for example to
6164run @code{make} for updating files to be published.
8ef8f2e6
CD
6165@end multitable
6166@noindent
6167
a1f058c6 6168@node Selecting files, Publishing action, Sources and destinations, Configuration
8ef8f2e6 6169@subsection Selecting files
a1f058c6 6170@cindex files, selecting for publishing
8ef8f2e6
CD
6171
6172By default, all files with extension @file{.org} in the base directory
6173are considered part of the project. This can be modified by setting the
6174properties
6175@multitable @columnfractions 0.25 0.75
6176@item @code{:base-extension}
6177@tab Extension (without the dot!) of source files. This actually is a
6178regular expression.
6179
6180@item @code{:exclude}
6181@tab Regular expression to match file names that should not be
6182published, even though they have been selected on the basis of their
6183extension.
6184
6185@item @code{:include}
6186@tab List of files to be included regardless of @code{:base-extension}
6187and @code{:exclude}.
6188@end multitable
6189
6190@node Publishing action, Publishing options, Selecting files, Configuration
6191@subsection Publishing Action
a1f058c6 6192@cindex action, for publishing
8ef8f2e6
CD
6193
6194Publishing means that a file is copied to the destination directory and
6195possibly transformed in the process. The default transformation is to
6196export Org-mode files as HTML files, and this is done by the function
6197@code{org-publish-org-to-html} which calls the HTML exporter
6198(@pxref{HTML export}). Other files like images only need to be copied
6199to the publishing destination. For non-Org-mode files, you need to
6200specify the publishing function.
6201
6202@multitable @columnfractions 0.3 0.7
6203@item @code{:publishing-function}
86f46920
CD
6204@tab Function executing the publication of a file. This may also be a
6205list of functions, which will all be called in turn.
8ef8f2e6
CD
6206@end multitable
6207
6208The function must accept two arguments: a property list containing at
6209least a @code{:publishing-directory} property, and the name of the file
2dcffa1c 6210to be published. It should take the specified file, make the necessary
8ef8f2e6
CD
6211transformation (if any) and place the result into the destination folder.
6212You can write your own publishing function, but @code{org-publish}
6213provides one for attachments (files that only need to be copied):
6214@code{org-publish-attachment}.
6215
6216@node Publishing options, Publishing links, Publishing action, Configuration
6217@subsection Options for the HTML exporter
a1f058c6 6218@cindex options, for publishing
8ef8f2e6
CD
6219
6220The property list can be used to set many export options for the HTML
6221exporter. In most cases, these properties correspond to user variables
6222in Org-mode. The table below lists these properties along with the
6223variable they belong to. See the documentation string for the
6224respective variable for details.
6225
6226@multitable @columnfractions 0.3 0.7
6227@item @code{:language} @tab @code{org-export-default-language}
6228@item @code{:headline-levels} @tab @code{org-export-headline-levels}
6229@item @code{:section-numbers} @tab @code{org-export-with-section-numbers}
6230@item @code{:table-of-contents} @tab @code{org-export-with-toc}
a1f058c6 6231@item @code{:archived-trees} @tab @code{org-export-with-archived-trees}
8ef8f2e6
CD
6232@item @code{:emphasize} @tab @code{org-export-with-emphasize}
6233@item @code{:sub-superscript} @tab @code{org-export-with-sub-superscripts}
6234@item @code{:TeX-macros} @tab @code{org-export-with-TeX-macros}
a1f058c6 6235@item @code{:LaTeX-fragments} @tab @code{org-export-with-LaTeX-fragments}
8ef8f2e6
CD
6236@item @code{:fixed-width} @tab @code{org-export-with-fixed-width}
6237@item @code{:timestamps} .@tab @code{org-export-with-timestamps}
6238@item @code{:tags} .@tab @code{org-export-with-tags}
6239@item @code{:tables} @tab @code{org-export-with-tables}
6240@item @code{:table-auto-headline} @tab @code{org-export-highlight-first-table-line}
6241@item @code{:style} @tab @code{org-export-html-style}
6242@item @code{:convert-org-links} @tab @code{org-export-html-link-org-files-as-html}
6243@item @code{:inline-images} @tab @code{org-export-html-inline-images}
6244@item @code{:expand-quoted-html} @tab @code{org-export-html-expand}
6245@item @code{:timestamp} @tab @code{org-export-html-with-timestamp}
6246@item @code{:publishing-directory} @tab @code{org-export-publishing-directory}
6247@item @code{:preamble} @tab @code{org-export-html-preamble}
6248@item @code{:postamble} @tab @code{org-export-html-postamble}
6249@item @code{:auto-preamble} @tab @code{org-export-html-auto-preamble}
6250@item @code{:auto-postamble} @tab @code{org-export-html-auto-postamble}
6251@item @code{:author} @tab @code{user-full-name}
6252@item @code{:email} @tab @code{user-mail-address}
6253@end multitable
6254
6255When a property is given a value in org-publish-project-alist, its
6256setting overrides the value of the corresponding user variable (if any)
4d1daf59 6257during publishing. Options set within a file (@pxref{Export
8ef8f2e6
CD
6258options}), however, override everything.
6259
6260@node Publishing links, Project page index, Publishing options, Configuration
6261@subsection Links between published files
a1f058c6 6262@cindex links, publishing
8ef8f2e6
CD
6263
6264To create a link from one Org-mode file to another, you would use
6265something like @samp{[[file:foo.org][The foo]]} or simply
6266@samp{file:foo.org.} (@pxref{Hyperlinks}). Upon publishing this link
6267becomes a link to @file{foo.html}. In this way, you can interlink the
6268pages of your "org web" project and the links will work as expected when
6269you publish them to HTML.
6270
6271You may also link to related files, such as images. Provided you are
6272careful with relative pathnames, and provided you have also configured
6273org-publish to upload the related files, these links will work
6274too. @ref{Complex example} for an example of this usage.
6275
5aafad2e
CD
6276Sometime an Org-mode file to be published may contain links that are
6277only valid in your production environment, but not in the publishing
6278location. In this case, use the property
6279
6280@multitable @columnfractions 0.4 0.6
6281@item @code{:link-validation-function}
6282@tab Function to validate links
6283@end multitable
6284
6285@noindent
6286to define a function for checking link validity. This function must
6287accept two arguments, the file name and a directory relative to which
6288the file name is interpreted in the production environment. If this
6289function returns @code{nil}, then the HTML generator will only insert a
6290description into the HTML file, but no link. One option for this
6291function is @code{org-publish-validate-link} which checks if the given
6292file is part of any project in @code{org-publish-project-alist}.
6293
8ef8f2e6
CD
6294@node Project page index, , Publishing links, Configuration
6295@subsection Project page index
a1f058c6 6296@cindex index, of published pages
8ef8f2e6
CD
6297
6298The following properties may be used to control publishing of an
6299index of files or summary page for a given project.
6300
6301@multitable @columnfractions 0.25 0.75
6302@item @code{:auto-index}
6303@tab When non-nil, publish an index during org-publish-current-project or
6304org-publish-all.
6305
6306@item @code{:index-filename}
6307@tab Filename for output of index. Defaults to @file{index.org} (which
6308becomes @file{index.html}).
6309
6310@item @code{:index-title}
6311@tab Title of index page. Defaults to name of file.
6312
6313@item @code{:index-function}
6314@tab Plugin function to use for generation of index.
6315Defaults to @code{org-publish-org-index}, which generates a plain list
6316of links to all files in the project.
6317@end multitable
6318
6319@node Sample configuration, Triggering publication, Configuration, Publishing
6320@section Sample configuration
6321
6322Below we provide two example configurations. The first one is a simple
6323project publishing only a set of Org-mode files. The second example is
6324more complex, with a multi-component project.
6325
6326@menu
6327* Simple example:: One-component publishing
6328* Complex example:: A multi-component publishing example
6329@end menu
6330
6331@node Simple example, Complex example, Sample configuration, Sample configuration
6332@subsection Example: simple publishing configuration
6333
6334This example publishes a set of Org-mode files to the @file{public_html}
6335directory on the local machine.
6336
6337@lisp
6338(setq org-publish-project-alist
6339 '(("org"
6340 :base-directory "~/org/"
6341 :publishing-directory "~/public_html"
6342 :section-numbers nil
6343 :table-of-contents nil
6344 :style "<link rel=stylesheet
6345 href=\"../other/mystyle.css\"
6346 type=\"text/css\">")))
6347@end lisp
6348
6349@node Complex example, , Simple example, Sample configuration
6350@subsection Example: complex publishing configuration
6351
6352This more complicated example publishes an entire website, including
6353org files converted to HTML, image files, emacs lisp source code, and
6354stylesheets. The publishing-directory is remote and private files are
6355excluded.
6356
6357To ensure that links are preserved, care should be taken to replicate
6358your directory structure on the web server, and to use relative file
6359paths. For example, if your org files are kept in @file{~/org} and your
6360publishable images in @file{~/images}, you'd link to an image with
6361@c
6362@example
6363file:../images/myimage.png
6364@end example
6365@c
6366On the web server, the relative path to the image should be the
6367same. You can accomplish this by setting up an "images" folder in the
6368right place on the webserver, and publishing images to it.
6369
6370@lisp
6371(setq org-publish-project-alist
6a04ed1c 6372 '(("orgfiles"
8ef8f2e6
CD
6373 :base-directory "~/org/"
6374 :base-extension "org"
6375 :publishing-directory "/ssh:user@@host:~/html/notebook/"
6376 :publishing-function org-publish-org-to-html
6377 :exclude "PrivatePage.org" ;; regexp
6378 :headline-levels 3
6379 :section-numbers nil
6380 :table-of-contents nil
6381 :style "<link rel=stylesheet
6382 href=\"../other/mystyle.css\" type=\"text/css\">"
6383 :auto-preamble t
6384 :auto-postamble nil)
6385
6386 ("images"
6387 :base-directory "~/images/"
6388 :base-extension "jpg\\|gif\\|png"
6389 :publishing-directory "/ssh:user@@host:~/html/images/"
6390 :publishing-function org-publish-attachment)
6391
6392 ("other"
6393 :base-directory "~/other/"
6394 :base-extension "css\\|el"
6395 :publishing-directory "/ssh:user@@host:~/html/other/"
6a04ed1c
CD
6396 :publishing-function org-publish-attachment)
6397 ("website" :components ("orgfiles" "images" "other"))))
8ef8f2e6
CD
6398@end lisp
6399
6400@node Triggering publication, , Sample configuration, Publishing
6401@section Triggering publication
6402
6403Once org-publish is properly configured, you can publish with the
6404following functions:
6405
6406@table @kbd
31e5288c 6407@item C-c C-e C
77ef352e 6408Prompt for a specific project and publish all files that belong to it.
31e5288c 6409@item C-c C-e P
86f46920 6410Publish the project containing the current file.
31e5288c 6411@item C-c C-e F
77ef352e 6412Publish only the current file.
31e5288c 6413@item C-c C-e A
8ef8f2e6
CD
6414Publish all projects.
6415@end table
6416
6417Org uses timestamps to track when a file has changed. The above
6418functions normally only publish changed files. You can override this and
77ef352e 6419force publishing of all files by giving a prefix argument.
8ef8f2e6 6420
5aafad2e 6421@node Miscellaneous, Extensions and Hacking, Publishing, Top
891f4676
RS
6422@chapter Miscellaneous
6423
6424@menu
6425* Completion:: M-TAB knows what you need
6426* Customization:: Adapting Org-mode to your taste
a1f058c6 6427* In-buffer settings:: Overview of the #+KEYWORDS
d9f6d794 6428* The very busy C-c C-c key:: When in doubt, press C-c C-c
5b10c9c4
CD
6429* Clean view:: Getting rid of leading stars in the outline
6430* TTY keys:: Using Org-mode on a tty
891f4676 6431* Interaction:: Other Emacs packages
891f4676
RS
6432* Bugs:: Things which do not work perfectly
6433@end menu
6434
6435@node Completion, Customization, Miscellaneous, Miscellaneous
6436@section Completion
7837f272
CD
6437@cindex completion, of @TeX{} symbols
6438@cindex completion, of TODO keywords
6439@cindex completion, of dictionary words
6440@cindex completion, of option keywords
cfbc5709 6441@cindex completion, of tags
386477e3 6442@cindex completion, of property keys
06341a67 6443@cindex completion, of link abbreviations
cfbc5709
CD
6444@cindex @TeX{} symbol completion
6445@cindex TODO keywords completion
6446@cindex dictionary word completion
6447@cindex option keyword completion
cfbc5709 6448@cindex tag completion
06341a67 6449@cindex link abbreviations, completion of
891f4676
RS
6450
6451Org-mode supports in-buffer completion. This type of completion does
6452not make use of the minibuffer. You simply type a few letters into
6453the buffer and use the key to complete text right there.
6454
6455@table @kbd
6456@kindex M-@key{TAB}
6457@item M-@key{TAB}
6458Complete word at point
6459@itemize @bullet
6460@item
6461At the beginning of a headline, complete TODO keywords.
6462@item
6463After @samp{\}, complete @TeX{} symbols supported by the exporter.
6464@item
86f46920
CD
6465After @samp{*}, complete headlines in the current buffer so that they
6466can be used in search links like @samp{[[*find this headline]]}.
6467@item
386477e3
CD
6468After @samp{:} in a headline, complete tags. The list of tags is taken
6469from the variable @code{org-tag-alist} (possibly set through the
6470@samp{#+TAGS} in-buffer option, @pxref{Setting tags}), or it is created
6471dynamically from all tags used in the current buffer.
6472@item
6473After @samp{:} and not in a headline, complete property keys. The list
6474of keys is constructed dynamically from all keys used in the current
6475buffer.
7b93e84b 6476@item
86f46920 6477After @samp{[}, complete link abbreviations (@pxref{Link abbreviations}).
cfbc5709 6478@item
891f4676
RS
6479After @samp{#+}, complete the special keywords like @samp{TYP_TODO} or
6480@samp{OPTIONS} which set file-specific options for Org-mode. When the
6481option keyword is already complete, pressing @kbd{M-@key{TAB}} again
6482will insert example settings for this keyword.
6483@item
86f46920
CD
6484In the line after @samp{#+STARTUP: }, complete startup keywords,
6485i.e. valid keys for this line.
6486@item
891f4676
RS
6487Elsewhere, complete dictionary words using ispell.
6488@end itemize
6489@end table
6490
a1f058c6 6491@node Customization, In-buffer settings, Completion, Miscellaneous
891f4676
RS
6492@section Customization
6493@cindex customization
6494@cindex options, for customization
6495@cindex variables, for customization
6496
06341a67
CD
6497There are more than 180 variables that can be used to customize
6498Org-mode. For the sake of compactness of the manual, I am not
d924f2e5
CD
6499describing the variables here. A structured overview of customization
6500variables is available with @kbd{M-x org-customize}. Or select
d9f6d794
CD
6501@code{Browse Org Group} from the @code{Org->Customization} menu. Many
6502settings can also be activated on a per-file basis, by putting special
a1f058c6 6503lines into the buffer (@pxref{In-buffer settings}).
d9f6d794 6504
a1f058c6 6505@node In-buffer settings, The very busy C-c C-c key, Customization, Miscellaneous
d9f6d794
CD
6506@section Summary of in-buffer settings
6507@cindex in-buffer settings
6508@cindex special keywords
6509
6510Org-mode uses special lines in the buffer to define settings on a
6511per-file basis. These lines start with a @samp{#+} followed by a
6512keyword, a colon, and then individual words defining a setting. Several
0730c539 6513setting words can be in the same line, but you can also have multiple
d9f6d794
CD
6514lines for the keyword. While these settings are described throughout
6515the manual, here is a summary. After changing any of those lines in the
6516buffer, press @kbd{C-c C-c} with the cursor still in the line to
6517activate the changes immediately. Otherwise they become effective only
6518when the file is visited again in a new Emacs session.
891f4676 6519
d9f6d794 6520@table @kbd
386477e3
CD
6521@item #+ARCHIVE: %s_done::
6522This line sets the archive location for the agenda file. It applies for
6523all subsequent lines until the next @samp{#+CATEGORY} line, or the end
6524of the file. The first such line also applies to any entries before it.
6525The corresponding variable is @code{org-archive-location}.
6526@item #+CATEGORY:
6527This line sets the category for the agenda file. The category applies
6528for all subsequent lines until the next @samp{#+CATEGORY} line, or the
6529end of the file. The first such line also applies to any entries before it.
6530@item #+COLUMNS: %25ITEM .....
6531Set the default format for columns view. This format applies when
6532columns view is invoked in location where no COLUMNS property applies.
6533@item #+CONSTANTS: name1=value1 ...
6534Set file-local values for constants to be used in table formulas. This
6535line set the local variable @code{org-table-formula-constants-local}.
6536The global version of theis variable is
6537@code{org-table-formula-constants}.
6538corresponding
6539@item #+LINK: linkword replace
6540These lines (several are allowed) specify link abbreviations.
6541@xref{Link abbreviations}. The corresponding variable is
6542@code{org-link-abbrev-alist}.
6543@item #+PRIORITIES: highest lowest default
6544This line sets the limits and the default for the priorities. All three
6545must be either letters A-Z or numbers 0-9. The highest priority must
6546have a lower ASCII number that the lowest priority.
d9f6d794
CD
6547@item #+STARTUP:
6548This line sets options to be used at startup of org-mode, when an
6549Org-mode file is being visited. The first set of options deals with the
6550initial visibility of the outline tree. The corresponding variable for
6551global default settings is @code{org-startup-folded}, with a default
6552value @code{t}, which means @code{overview}.
06341a67
CD
6553@cindex @code{overview}, STARTUP keyword
6554@cindex @code{content}, STARTUP keyword
6555@cindex @code{showall}, STARTUP keyword
d9f6d794
CD
6556@example
6557overview @r{top-level headlines only}
6558content @r{all headlines}
6559showall @r{no folding at all, show everything}
6560@end example
6561Then there are options for aligning tables upon visiting a file. This
6562is useful in files containing narrowed table columns. The corresponding
6563variable is @code{org-startup-align-all-tables}, with a default value
6564@code{nil}.
06341a67
CD
6565@cindex @code{align}, STARTUP keyword
6566@cindex @code{noalign}, STARTUP keyword
d9f6d794
CD
6567@example
6568align @r{align all tables}
67cb614c 6569noalign @r{don't align tables on startup}
d9f6d794 6570@end example
06341a67
CD
6571Logging TODO state changes and clock intervals (variable
6572@code{org-log-done}) can be configured using these options.
6573@cindex @code{logdone}, STARTUP keyword
6574@cindex @code{nologging}, STARTUP keyword
6575@cindex @code{lognotedone}, STARTUP keyword
6576@cindex @code{lognoteclock-out}, STARTUP keyword
6577@cindex @code{lognotestate}, STARTUP keyword
31e5288c
CD
6578@cindex @code{logrepeat}, STARTUP keyword
6579@cindex @code{nologrepeat}, STARTUP keyword
8ef8f2e6 6580@example
06341a67
CD
6581logging @r{record a timestamp when an item is marked DONE}
6582nologging @r{don't record when items are marked DONE}
6583lognotedone @r{record timestamp and a note when DONE}
4d1daf59
CD
6584lognotestate @r{record timestamp and a note when TODO state changes}
6585logrepeat @r{record a note when re-instating a repeating item}
31e5288c 6586nologrepeat @r{do not record when re-instating repeating item}
06341a67 6587lognoteclock-out @r{record timestamp and a note when clocking out}
8ef8f2e6 6588@end example
d9f6d794
CD
6589Here are the options for hiding leading stars in outline headings. The
6590corresponding variables are @code{org-hide-leading-stars} and
6591@code{org-odd-levels-only}, both with a default setting @code{nil}
6592(meaning @code{showstars} and @code{oddeven}).
06341a67
CD
6593@cindex @code{hidestars}, STARTUP keyword
6594@cindex @code{showstars}, STARTUP keyword
6595@cindex @code{odd}, STARTUP keyword
6596@cindex @code{even}, STARTUP keyword
d9f6d794
CD
6597@example
6598hidestars @r{make all but one of the stars starting a headline invisible.}
6599showstars @r{show all stars starting a headline}
6600odd @r{allow only odd outline levels (1,3,...)}
6601oddeven @r{allow all outline levels}
6602@end example
3a401219 6603To turn on custom format overlays over time stamps (variables
86f46920
CD
6604@code{org-put-time-stamp-overlays} and
6605@code{org-time-stamp-overlay-formats}), use
06341a67 6606@cindex @code{customtime}, STARTUP keyword
86f46920
CD
6607@example
6608customtime @r{overlay custom time format}
6609@end example
31e5288c
CD
6610The following options influence the table spreadsheet (variable
6611@code{constants-unit-system}).
6612@cindex @code{constcgs}, STARTUP keyword
6613@cindex @code{constSI}, STARTUP keyword
6614@example
6615constcgs @r{@file{constants.el} should use the c-g-s unit system}
6616constSI @r{@file{constants.el} should use the SI unit system}
6617@end example
8ef8f2e6
CD
6618@item #+TAGS: TAG1(c1) TAG2(c2)
6619These lines (several such lines are allowed) specify the legal tags in
6a04ed1c 6620this file, and (potentially) the corresponding @emph{fast tag selection}
8ef8f2e6 6621keys. The corresponding variable is @code{org-tag-alist}.
d9f6d794
CD
6622@item #+TBLFM:
6623This line contains the formulas for the table directly above the line.
6624@item #+TITLE:, #+AUTHOR:, #+EMAIL:, #+LANGUAGE:, #+TEXT:, #+OPTIONS:
6a04ed1c 6625These lines provide settings for exporting files. For more details see
d9f6d794 6626@ref{Export options}.
386477e3
CD
6627@item #+SEQ_TODO: #+TYP_TODO:
6628These lines set the TODO keywords and their interpretation in the
6629current file. The corresponding variables are @code{org-todo-keywords}
6630and @code{org-todo-interpretation}.
d9f6d794
CD
6631@end table
6632
a1f058c6 6633@node The very busy C-c C-c key, Clean view, In-buffer settings, Miscellaneous
d9f6d794 6634@section The very busy C-c C-c key
26ca33ed 6635@kindex C-c C-c
86f46920 6636@cindex C-c C-c, overview
26ca33ed 6637
d9f6d794
CD
6638The key @kbd{C-c C-c} has many purposes in org-mode, which are all
6639mentioned scattered throughout this manual. One specific function of
6640this key is to add @emph{tags} to a headline (@pxref{Tags}). In many
6641other circumstances it means something like @emph{Hey Org-mode, look
5aafad2e
CD
6642here and update according to what you see here}. Here is a summary of
6643what this means in different contexts.
26ca33ed 6644
d9f6d794 6645@itemize @minus
5aafad2e 6646@item
dbdd7534 6647If there are highlights in the buffer from the creation of a sparse
5aafad2e 6648tree, or from clock display, remove these highlights.
d9f6d794 6649@item
8ef8f2e6 6650If the cursor is in one of the special @code{#+KEYWORD} lines, this
d9f6d794
CD
6651triggers scanning the buffer for these lines and updating the
6652information.
6653@item
6654If the cursor is inside a table, realign the table. This command
6655works even if the automatic table editor has been turned off.
26ca33ed 6656@item
8ef8f2e6 6657If the cursor is on a @code{#+TBLFM} line, re-apply the formulas to
d9f6d794 6658the entire table.
26ca33ed 6659@item
d9f6d794
CD
6660If the cursor is inside a table created by the @file{table.el} package,
6661activate that table.
26ca33ed 6662@item
86f46920
CD
6663If the current buffer is a remember buffer, close the note and file it.
6664With a prefix argument, file it, without further interaction, to the
6665default location.
26ca33ed 6666@item
8ef8f2e6
CD
6667If the cursor is on a @code{<<<target>>>}, update radio targets and
6668corresponding links in this buffer.
6669@item
4d1daf59
CD
6670If the cursor is in a property line or at the start or end of a property
6671drawer, offer property commands.
6672@item
8ef8f2e6
CD
6673If the cursor is in a plain list item with a checkbox, toggle the status
6674of the checkbox.
26ca33ed 6675@item
d9f6d794
CD
6676If the cursor is on a numbered item in a plain list, renumber the
6677ordered list.
26ca33ed
CD
6678@end itemize
6679
d9f6d794 6680@node Clean view, TTY keys, The very busy C-c C-c key, Miscellaneous
5b10c9c4
CD
6681@section A cleaner outline view
6682@cindex hiding leading stars
6683@cindex clean outline view
6684
6685Some people find it noisy and distracting that the Org-mode headlines
26ca33ed
CD
6686are starting with a potentially large number of stars. For example
6687the tree from @ref{Headlines}:
5b10c9c4
CD
6688
6689@example
6690* Top level headline
6691** Second level
6692*** 3rd level
6693 some text
6694*** 3rd level
6695 more text
6696* Another top level headline
6697@end example
6698
6699@noindent
6700Unfortunately this is deeply ingrained into the code of Org-mode and
6701cannot be easily changed. You can, however, modify the display in such
6702a way that all leading stars become invisible and the outline more easy
6703to read. To do this, customize the variable
6704@code{org-hide-leading-stars} like this:
6705
6706@lisp
6707(setq org-hide-leading-stars t)
6708@end lisp
6709
6710@noindent
f029a017
CD
6711or change this on a per-file basis with one of the lines (anywhere in
6712the buffer)
6713
6714@example
6715#+STARTUP: showstars
6716#+STARTUP: hidestars
6717@end example
26ca33ed 6718
f029a017
CD
6719@noindent
6720Press @kbd{C-c C-c} with the cursor in a @samp{STARTUP} line to activate
26ca33ed 6721the modifications.
f029a017
CD
6722
6723With stars hidden, the tree becomes:
5b10c9c4
CD
6724
6725@example
6726* Top level headline
6727 * Second level
6728 * 3rd level
6729 some text
6730 * 3rd level
6731 more text
6732* Another top level headline
6733@end example
6734
6735@noindent
6736Note that the leading stars are not truly replaced by whitespace, they
6737are only fontified with the face @code{org-hide} that uses the
c3c04119 6738background color as font color. If you are not using either white or
5b10c9c4
CD
6739black background, you may have to customize this face to get the wanted
6740effect. Another possibility is to set this font such that the extra
6741stars are @i{almost} invisible, for example using the color
6742@code{grey90} on a white background.
6743
6744Things become cleaner still if you skip all the even levels and use only
6745odd levels 1, 3, 5..., effectively adding two stars to go from one
6746outline level to the next:
6747
6748@example
6749* Top level headline
6750 * Second level
6751 * 3rd level
6752 some text
6753 * 3rd level
6754 more text
6755* Another top level headline
6756@end example
6757
6758@noindent
6759In order to make the structure editing and export commands handle this
f029a017 6760convention correctly, use
5b10c9c4
CD
6761
6762@lisp
6763(setq org-odd-levels-only t)
6764@end lisp
6765
6766@noindent
f029a017
CD
6767or set this on a per-file basis with one of the following lines (don't
6768forget to press @kbd{C-c C-c} with the cursor in the startup line to
6769activate changes immediately).
6770
6771@example
6772#+STARTUP: odd
6773#+STARTUP: oddeven
6774@end example
6775
02d166dc
CD
6776You can convert an Org-mode file from single-star-per-level to the
6777double-star-per-level convention with @kbd{M-x org-convert-to-odd-levels
6778RET} in that file. The reverse operation is @kbd{M-x
6779org-convert-to-oddeven-levels}.
5b10c9c4 6780
5aafad2e 6781@node TTY keys, Interaction, Clean view, Miscellaneous
5b10c9c4
CD
6782@section Using org-mode on a tty
6783@cindex tty keybindings
6784
6785Org-mode uses a number of keys that are not accessible on a tty. This
6786applies to most special keys like cursor keys, @key{TAB} and
6787@key{RET}, when these are combined with modifier keys like @key{Meta}
6788and/or @key{Shift}. Org-mode uses these bindings because it needs to
6789provide keys for a large number of commands, and because these keys
6790appeared particularly easy to remember. In order to still be able to
6791access the core functionality of Org-mode on a tty, alternative
6792bindings are provided. Here is a complete list of these bindings,
6793which are obviously more cumbersome to use. Note that sometimes a
6794work-around can be better. For example changing a time stamp is
6795really only fun with @kbd{S-@key{cursor}} keys. On a tty you would
6796rather use @kbd{C-c .} to re-insert the timestamp.
6797
5b10c9c4
CD
6798@multitable @columnfractions 0.15 0.2 0.2
6799@item @b{Default} @tab @b{Alternative 1} @tab @b{Alternative 2}
6800@item @kbd{S-@key{TAB}} @tab @kbd{C-u @key{TAB}} @tab
6801@item @kbd{M-@key{left}} @tab @kbd{C-c C-x l} @tab @kbd{@key{Esc} @key{left}}
6802@item @kbd{M-S-@key{left}} @tab @kbd{C-c C-x L} @tab
6803@item @kbd{M-@key{right}} @tab @kbd{C-c C-x r} @tab @kbd{@key{Esc} @key{right}}
6804@item @kbd{M-S-@key{right}} @tab @kbd{C-c C-x R} @tab
6805@item @kbd{M-@key{up}} @tab @kbd{C-c C-x u} @tab @kbd{@key{Esc} @key{up}}
6806@item @kbd{M-S-@key{up}} @tab @kbd{C-c C-x U} @tab
6807@item @kbd{M-@key{down}} @tab @kbd{C-c C-x d} @tab @kbd{@key{Esc} @key{down}}
6808@item @kbd{M-S-@key{down}} @tab @kbd{C-c C-x D} @tab
6809@item @kbd{S-@key{RET}} @tab @kbd{C-c C-x c} @tab
6810@item @kbd{M-@key{RET}} @tab @kbd{C-c C-x m} @tab @kbd{@key{Esc} @key{RET}}
6811@item @kbd{M-S-@key{RET}} @tab @kbd{C-c C-x M} @tab
31e5288c
CD
6812@item @kbd{S-@key{left}} @tab @kbd{C-c @key{left}} @tab
6813@item @kbd{S-@key{right}} @tab @kbd{C-c @key{right}} @tab
6814@item @kbd{S-@key{up}} @tab @kbd{C-c @key{up}} @tab
6815@item @kbd{S-@key{down}} @tab @kbd{C-c @key{down}} @tab
6816@item @kbd{C-S-@key{left}} @tab @kbd{C-c C-x @key{left}} @tab
6817@item @kbd{C-S-@key{right}} @tab @kbd{C-c C-x @key{right}} @tab
5b10c9c4
CD
6818@end multitable
6819
5aafad2e 6820@node Interaction, Bugs, TTY keys, Miscellaneous
891f4676
RS
6821@section Interaction with other packages
6822@cindex packages, interaction with other
8ef8f2e6
CD
6823Org-mode lives in the world of GNU Emacs and interacts in various ways
6824with other code out there.
6825
6826@menu
8ef8f2e6
CD
6827* Cooperation:: Packages Org-mode cooperates with
6828* Conflicts:: Packages that lead to conflicts
6829@end menu
6830
5aafad2e 6831@node Cooperation, Conflicts, Interaction, Interaction
8ef8f2e6
CD
6832@subsection Packages that Org-mode cooperates with
6833
6834@table @asis
7837f272
CD
6835@cindex @file{calc.el}
6836@item @file{calc.el} by Dave Gillespie
6837Org-mode uses the calc package for implementing spreadsheet
06341a67 6838functionality in its tables (@pxref{The spreadsheet}). Org-mode
7837f272
CD
6839checks for the availability of calc by looking for the function
6840@code{calc-eval} which should be autoloaded in your setup if calc has
6841been installed properly. As of Emacs 22, calc is part of the Emacs
6842distribution. Another possibility for interaction between the two
6843packages is using calc for embedded calculations. @xref{Embedded Mode,
fb1556f0 6844, Embedded Mode, calc, GNU Emacs Calc Manual}.
7837f272
CD
6845@cindex @file{constants.el}
6846@item @file{constants.el} by Carsten Dominik
06341a67 6847In a table formula (@pxref{The spreadsheet}), it is possible to use
26ca33ed 6848names for natural constants or units. Instead of defining your own
7837f272
CD
6849constants in the variable @code{org-table-formula-constants}, install
6850the @file{constants} package which defines a large number of constants
6851and units, and lets you use unit prefixes like @samp{M} for
6852@samp{Mega} etc. You will need version 2.0 of this package, available
6853at @url{http://www.astro.uva.nl/~dominik/Tools}. Org-mode checks for
6854the function @code{constants-get}, which has to be autoloaded in your
6855setup. See the installation instructions in the file
6856@file{constants.el}.
a1f058c6
CD
6857@item @file{cdlatex.el} by Carsten Dominik
6858@cindex @file{cdlatex.el}
6859Org-mode can make use of the cdlatex package to efficiently enter
22a616f7 6860La@TeX{} fragments into Org-mode files. See @ref{CDLaTeX mode}.
8ef8f2e6 6861@item @file{remember.el} by John Wiegley
7837f272 6862@cindex @file{remember.el}
8ef8f2e6
CD
6863Org mode cooperates with remember, see @ref{Remember}.
6864@file{Remember.el} is not part of Emacs, find it on the web.
6865@cindex @file{table.el}
6866@item @file{table.el} by Takaaki Ota
06341a67
CD
6867@kindex C-c C-c
6868@cindex table editor, @file{table.el}
6869@cindex @file{table.el}
6870
6871Complex ASCII tables with automatic line wrapping, column- and
6872row-spanning, and alignment can be created using the Emacs table
6873package by Takaaki Ota (@uref{http://sourceforge.net/projects/table},
6874and also part of Emacs 22).
6875When @key{TAB} or @kbd{C-c C-c} is pressed in such a table, Org-mode
6876will call @command{table-recognize-table} and move the cursor into the
6877table. Inside a table, the keymap of Org-mode is inactive. In order
6878to execute Org-mode-related commands, leave the table.
6879
6880@table @kbd
6881@kindex C-c C-c
6882@item C-c C-c
6883Recognize @file{table.el} table. Works when the cursor is in a
6884table.el table.
31e5288c 6885@c
06341a67
CD
6886@kindex C-c ~
6887@item C-c ~
6888Insert a table.el table. If there is already a table at point, this
6889command converts it between the table.el format and the Org-mode
6890format. See the documentation string of the command
6891@code{org-convert-table} for the restrictions under which this is
6892possible.
6893@end table
6894@file{table.el} is part of Emacs 22.
31e5288c
CD
6895@cindex @file{footnote.el}
6896@item @file{footnote.el} by Steven L. Baur
6897Org-mode recognizes numerical footnotes as provided by this package
6898(@pxref{Footnotes}).
8ef8f2e6
CD
6899@end table
6900
6901@node Conflicts, , Cooperation, Interaction
6902@subsection Packages that lead to conflicts with Org-mode
6903
6904@table @asis
6905
6906@cindex @file{allout.el}
6907@item @file{allout.el} by Ken Manheimer
6908Startup of Org-mode may fail with the error message
6909@code{(wrong-type-argument keymapp nil)} when there is an outdated
6910version @file{allout.el} on the load path, for example the version
6911distributed with Emacs 21.x. Upgrade to Emacs 22 and this problem will
6912disappear. If for some reason you cannot do this, make sure that org.el
6913is loaded @emph{before} @file{allout.el}, for example by putting
6914@code{(require 'org)} early enough into your @file{.emacs} file.
6915
225ff037
CD
6916@cindex @file{CUA.el}
6917@item @file{CUA.el} by Kim. F. Storm
6918Keybindings in Org-mode conflict with the @kbd{S-<cursor>} keys
6919used by CUA-mode (as well as pc-select-mode and s-region-mode) to
6920select and extend the region. If you want to use one of these
6921packages along with Org-mode, configure the variable
7837f272 6922@code{org-CUA-compatible}. When set, Org-mode will move the following
225ff037
CD
6923keybindings in org-mode files, and in the agenda buffer (but not
6924during date selection).
26ca33ed 6925
225ff037
CD
6926@example
6927S-UP -> M-p S-DOWN -> M-n
6928S-LEFT -> M-- S-RIGHT -> M-+
225ff037 6929@end example
26ca33ed 6930
225ff037
CD
6931Yes, these are unfortunately more difficult to remember. If you want
6932to have other replacement keys, look at the variable
8485a053 6933@code{org-disputed-keys}.
8ef8f2e6
CD
6934@item @file{windmove.el} by Hovav Shacham
6935@cindex @file{windmove.el}
6936Also this package uses the @kbd{S-<cursor>} keys, so everything written
6937in the paragraph above about CUA mode also applies here.
31e5288c
CD
6938
6939@cindex @file{footnote.el}
6940@item @file{footnote.el} by Steven L. Baur
6941Org-mode supports the syntax of the footnote package, but only the
6942numerical footnote markers. Also, the default key for footnote
6943commands, @kbd{C-c !} is already used by org-mode. You could use the
6944variable @code{footnote-prefix} to switch footnotes commands to another
6945key. Or, you could use @code{org-replace-disputed-keys} and
6946@code{org-disputed-keys} to change the settings in Org-mode.
6947
891f4676
RS
6948@end table
6949
8ef8f2e6 6950
5aafad2e 6951@node Bugs, , Interaction, Miscellaneous
225ff037
CD
6952@section Bugs
6953@cindex bugs
6954
26ca33ed 6955Here is a list of things that should work differently, but which I
225ff037 6956have found too hard to fix.
891f4676 6957
225ff037 6958@itemize @bullet
8485a053 6959@item
26ca33ed
CD
6960If a table field starts with a link, and if the corresponding table
6961column is narrowed (@pxref{Narrow columns}) to a width too small to
6962display the link, the field would look entirely empty even though it is
6963not. To prevent this, Org-mode throws an error. The work-around is to
6964make the column wide enough to fit the link, or to add some text (at
6965least 2 characters) before the link in the same field.
6966@item
6967Narrowing table columns does not work on XEmacs, because the
6968@code{format} function does not transport text properties.
6969@item
bc07911a
CD
6970Text in an entry protected with the @samp{QUOTE} keyword should not
6971autowrap.
6972@item
225ff037 6973When the application called by @kbd{C-c C-o} to open a file link fails
8ef8f2e6 6974(for example because the application does not exist or refuses to open
225ff037 6975the file), it does so silently. No error message is displayed.
8485a053 6976@item
7837f272 6977Recalculating a table line applies the formulas from left to right.
bc07911a 6978If a formula uses @emph{calculated} fields further down the row,
06341a67
CD
6979multiple recalculation may be needed to get all fields consistent. You
6980may use the command @code{org-table-iterate} (@kbd{C-u C-c *}) to
6981recalculate until convergence.
7837f272 6982@item
5aafad2e 6983A single letter cannot be made bold, for example @samp{*a*}.
8485a053 6984@item
225ff037
CD
6985The exporters work well, but could be made more efficient.
6986@end itemize
6987
5aafad2e
CD
6988
6989@node Extensions and Hacking, History and Acknowledgments, Miscellaneous, Top
6990@appendix Extensions, Hooks and Hacking
6991
6992This appendix lists extensions for Org-mode written by other authors.
06341a67
CD
6993It also covers some aspects where users can extend the functionality of
6994Org-mode.
5aafad2e
CD
6995
6996@menu
a1f058c6 6997* Extensions:: Existing 3rd-part extensions
06341a67 6998* Tables in arbitrary syntax:: Orgtbl for LaTeX and other programs
a1f058c6 6999* Dynamic blocks:: Automatically filled blocks
06341a67 7000* Special agenda views:: Customized views
386477e3 7001* Using the property API:: Writing programs that use entry properties
5aafad2e
CD
7002@end menu
7003
06341a67 7004@node Extensions, Tables in arbitrary syntax, Extensions and Hacking, Extensions and Hacking
5aafad2e 7005@section Third-party extensions for Org-mode
06341a67 7006@cindex extension, third-party
5aafad2e
CD
7007
7008The following extensions for Org-mode have been written by other people:
7009
7010@table @asis
5aafad2e
CD
7011@cindex @file{org-publish.el}
7012@item @file{org-publish.el} by David O'Toole
7013This package provides facilities for publishing related sets of Org-mode
06341a67 7014files together with linked files like images as webpages. It is
5aafad2e
CD
7015highly configurable and can be used for other publishing purposes as
7016well. As of Org-mode version 4.30, @file{org-publish.el} is part of the
7017Org-mode distribution. It is not yet part of Emacs, however, a delay
7018caused by the preparations for the 22.1 release. In the mean time,
7019@file{org-publish.el} can be downloaded from David's site:
7020@url{http://dto.freeshell.org/e/org-publish.el}.
86f46920
CD
7021@cindex @file{org-mouse.el}
7022@item @file{org-mouse.el} by Piotr Zielinski
7023This package implements extended mouse functionality for Org-mode. It
7024allows you to cycle visibility and to edit the document structure with
7025the mouse. Best of all, it provides a context-sensitive menu on
7026@key{mouse-3} that changes depending on the context of a mouse-click.
7027As of Org-mode version 4.53, @file{org-mouse.el} is part of the
7028Org-mode distribution. It is not yet part of Emacs, however, a delay
7029caused by the preparations for the 22.1 release. In the mean time,
7030@file{org-mouse.el} can be downloaded from Piotr's site:
7031@url{http://www.cl.cam.ac.uk/~pz215/files/org-mouse.el}.
5aafad2e
CD
7032@cindex @file{org-blog.el}
7033@item @file{org-blog.el} by David O'Toole
22a616f7 7034A blogging plug-in for @file{org-publish.el}.@*
a1f058c6 7035@url{http://dto.freeshell.org/notebook/OrgMode.html}.
06341a67
CD
7036@cindex @file{blorg.el}
7037@item @file{blorg.el} by Bastien Guerry
5aafad2e 7038Publish Org-mode files as
06341a67
CD
7039blogs. @url{http://www.cognition.ens.fr/~guerry/blorg.html}.
7040@cindex @file{org2rem.el}
7041@item @file{org2rem.el} by Bastien Guerry
7042Translates Org-mode files into something readable by
7043Remind. @url{http://www.cognition.ens.fr/~guerry/u/org2rem.el}.
5aafad2e
CD
7044@end table
7045
06341a67
CD
7046@page
7047
7048@node Tables in arbitrary syntax, Dynamic blocks, Extensions, Extensions and Hacking
7049@section Tables in arbitrary syntax
7050@cindex tables, in other modes
7051@cindex orgtbl-mode
7052
7053Since Orgtbl-mode can be used as a minor mode in arbitrary buffers, a
7054frequent feature request has been to make it work with native tables in
7055specific languages, for example LaTeX. However, this is extremely hard
7056to do in a general way, would lead to a customization nightmare, and
7057would take away much of the simplicity of the Orgtbl-mode table editor.
7058
7059This appendix describes a different approach. We keep the Orgtbl-mode
7060table in its native format (the @i{source table}), and use a custom
7061function to @i{translate} the table to the correct syntax, and to
7062@i{install} it in the right location (the @i{target table}). This puts
7063the burden of writing conversion functions on the user, but it allows
7064for a very flexible system.
7065
7066@menu
7067* Radio tables:: Sending and receiving
7068* A LaTeX example:: Step by step, almost a tutorial
7069* Translator functions:: Copy and modify
7070@end menu
7071
7072@node Radio tables, A LaTeX example, Tables in arbitrary syntax, Tables in arbitrary syntax
7073@subsection Radio tables
7074@cindex radio tables
7075
7076To define the location of the target table, you first need to create two
7077lines that are comments in the current mode, but contain magic words for
7078Orgtbl-mode to find. Orgtbl-mode will insert the translated table
7079between these lines, replacing whatever was there before. For example:
7080
7081@example
7082/* BEGIN RECEIVE ORGTBL table_name */
7083/* END RECEIVE ORGTBL table_name */
7084@end example
7085
7086@noindent
7087Just above the source table, we put a special line that tells
7088Orgtbl-mode how to translate this table and where to install it. For
7089example:
7090@example
7091#+ORGTBL: SEND table_name translation_function arguments....
7092@end example
7093
7094@noindent
7095@code{table_name} is the reference name for the table that is also used
7096in the receiver lines. @code{translation_function} is the Lisp function
7097that does the translation. Furthermore, the line can contain a list of
7098arguments (alternating key and value) at the end. The arguments will be
7099passed as a property list to the translation function for
7100interpretation. A few standard parameters are already recognized and
7101acted upon before the translation function is called:
7102
7103@table @code
7104@item :skip N
7105Skip the first N lines of the table. Hlines do count!
7106@item :skipcols (n1 n2 ...)
7107List of columns that should be skipped. If the table has a column with
7108calculation marks, that column is automatically discarded as well.
7109Please note that the translator function sees the table @emph{after} the
7110removal of these columns, the function never knows that there have been
7111additional columns.
7112@end table
7113
7114@noindent
7115The one problem remaining is how to keep the source table in the buffer
7116without disturbing the normal workings of the file, for example during
7117compilation of a C file or processing of a LaTeX file. There are a
7118number of different solutions:
7119
7120@itemize @bullet
7121@item
7122The table could be placed in a block comment if that is supported by the
7123language. For example, in C-mode you could wrap the table between
7124@samp{/*} and @samp{*/} lines.
7125@item
7126Sometimes it is possible to put the table after some kind of @i{END}
7127statement, for example @samp{\bye} in TeX and @samp{\end@{document@}}
7128in LaTeX.
7129@item
7130You can just comment the table line by line whenever you want to process
7131the file, and uncomment it whenever you need to edit the table. This
7132only sounds tedious - the command @kbd{M-x orgtbl-toggle-comment} does
7133make this comment-toggling very easy, in particular if you bind it to a
7134key.
7135@end itemize
7136
7137@node A LaTeX example, Translator functions, Radio tables, Tables in arbitrary syntax
7138@subsection A LaTeX example
7139@cindex LaTeX, and orgtbl-mode
7140
7141The best way to wrap the source table in LaTeX is to use the
7142@code{comment} environment provided by @file{comment.sty}. It has to be
7143activated by placing @code{\usepackage@{comment@}} into the document
7144header. Orgtbl-mode can insert a radio table skeleton@footnote{By
7145default this works only for LaTeX, HTML, and TeXInfo. Configure the
7146variable @code{orgtbl-radio-tables} to install templates for other
7147modes.} with the command @kbd{M-x orgtbl-insert-radio-table}. You will
7148be prompted for a table name, lets say we use @samp{salesfigures}. You
7149will then get the following template:
7150
7151@example
7152% BEGIN RECEIVE ORGTBL salesfigures
7153% END RECEIVE ORGTBL salesfigures
7154\begin@{comment@}
7155#+ORGTBL: SEND salesfigures orgtbl-to-latex
7156| | |
7157\end@{comment@}
7158@end example
7159
7160@noindent
7161The @code{#+ORGTBL: SEND} line tells orgtbl-mode to use the function
7162@code{orgtbl-to-latex} to convert the table into LaTeX and to put it
7163into the receiver location with name @code{salesfigures}. You may now
7164fill in the table, feel free to use the spreadsheet features@footnote{If
7165the @samp{#+TBLFM} line contains an odd number of dollar characters,
7166this may cause problems with font-lock in latex-mode. As shown in the
7167example you can fix this by adding an extra line inside the
7168@code{comment} environment that is used to balance the dollar
7169expressions. If you are using AUCTeX with the font-latex library, a
7170much better solution is to add the @code{comment} environment to the
7171variable @code{LaTeX-verbatim-environments}.}:
7172
7173@example
7174% BEGIN RECEIVE ORGTBL salesfigures
7175% END RECEIVE ORGTBL salesfigures
7176\begin@{comment@}
7177#+ORGTBL: SEND salesfigures orgtbl-to-latex
7178| Month | Days | Nr sold | per day |
7179|-------+------+---------+---------|
7180| Jan | 23 | 55 | 2.4 |
7181| Feb | 21 | 16 | 0.8 |
7182| March | 22 | 278 | 12.6 |
7183#+TBLFM: $4=$3/$2;%.1f
7184% $ (optional extra dollar to keep font-lock happy, see footnote)
7185\end@{comment@}
7186@end example
7187
7188@noindent
7189When you are done, press @kbd{C-c C-c} in the table to get the converted
7190table inserted between the two marker lines.
7191
7192Now lets assume you want to make the table header by hand, because you
7193want to control how columns are aligned etc. In this case we make sure
7194that the table translator does skip the first 2 lines of the source
7195table, and tell the command to work as a @i{splice}, i.e. to not produce
7196header and footer commands of the target table:
7197
7198@example
7199\begin@{tabular@}@{lrrr@}
7200Month & \multicolumn@{1@}@{c@}@{Days@} & Nr.\ sold & per day\\
7201% BEGIN RECEIVE ORGTBL salesfigures
7202% END RECEIVE ORGTBL salesfigures
7203\end@{tabular@}
7204%
7205\begin@{comment@}
7206#+ORGTBL: SEND salesfigures orgtbl-to-latex :splice t :skip 2
7207| Month | Days | Nr sold | per day |
7208|-------+------+---------+---------|
7209| Jan | 23 | 55 | 2.4 |
7210| Feb | 21 | 16 | 0.8 |
7211| March | 22 | 278 | 12.6 |
7212#+TBLFM: $4=$3/$2;%.1f
7213\end@{comment@}
7214@end example
7215
7216The LaTeX translator function @code{orgtbl-to-latex} is already part of
7217Orgtbl-mode. It uses a @code{tabular} environment to typeset the table
7218and marks horizontal lines with @code{\hline}. Furthermore, it
7219interprets the following parameters:
7220
7221@table @code
7222@item :splice nil/t
7223When set to t, return only table body lines, don't wrap them into a
7224tabular environment. Default is nil.
7225
7226@item :fmt fmt
7227A format to be used to wrap each field, should contain @code{%s} for the
7228original field value. For example, to wrap each field value in dollars,
7229you could use @code{:fmt "$%s$"}. This may also be a property list with
7230column numbers and formats. for example @code{:fmt (2 "$%s$" 4 "%s\\%%")}.
7231
7232@item :efmt efmt
7233Use this format to print numbers with exponentials. The format should
7234have @code{%s} twice for inserting mantissa and exponent, for example
7235@code{"%s\\times10^@{%s@}"}. The default is @code{"%s\\,(%s)"}. This
7236may also be a property list with column numbers and formats, for example
7237@code{:efmt (2 "$%s\\times10^@{%s@}$" 4 "$%s\\cdot10^@{%s@}$")}. After
7238@code{efmt} has been applied to a value, @code{fmt} will also be
7239applied.
7240@end table
7241
7242@node Translator functions, , A LaTeX example, Tables in arbitrary syntax
7243@subsection Translator functions
7244@cindex HTML, and orgtbl-mode
7245@cindex translator function
7246
7247Orgtbl-mode has several translator functions built-in:
7248@code{orgtbl-to-latex}, @code{orgtbl-to-html}, and
7249@code{orgtbl-to-texinfo}. Except for @code{orgtbl-to-html}@footnote{The
7250HTML translator uses the same code that produces tables during HTML
7251export.}, these all use a generic translator, @code{orgtbl-to-generic}.
7252For example, @code{orgtbl-to-latex} itself is a very short function that
7253computes the column definitions for the @code{tabular} environment,
7254defines a few field and line separators and then hands over to the
7255generic translator. Here is the entire code:
7256
7257@lisp
7258@group
7259(defun orgtbl-to-latex (table params)
7260 "Convert the orgtbl-mode TABLE to LaTeX."
7261 (let* ((alignment (mapconcat (lambda (x) (if x "r" "l"))
7262 org-table-last-alignment ""))
7263 (params2
7264 (list
7265 :tstart (concat "\\begin@{tabular@}@{" alignment "@}")
7266 :tend "\\end@{tabular@}"
7267 :lstart "" :lend " \\\\" :sep " & "
7268 :efmt "%s\\,(%s)" :hline "\\hline")))
7269 (orgtbl-to-generic table (org-combine-plists params2 params))))
7270@end group
7271@end lisp
7272
7273As you can see, the properties passed into the function (variable
7274@var{PARAMS}) are combined with the ones newly defined in the function
7275(variable @var{PARAMS2}). The ones passed into the function (i.e. the
7276ones set by the @samp{ORGTBL SEND} line) take precedence. So if you
7277would like to use the LaTeX translator, but wanted the line endings to
7278be @samp{\\[2mm]} instead of the default @samp{\\}, you could just
7279overrule the default with
7280
7281@example
7282#+ORGTBL: SEND test orgtbl-to-latex :lend " \\\\[2mm]"
7283@end example
7284
7285For a new language, you can either write your own converter function in
7286analogy with the LaTeX translator, or you can use the generic function
7287directly. For example, if you have a language where a table is started
7288with @samp{!BTBL!}, ended with @samp{!ETBL!}, and where table lines are
7289started with @samp{!BL!}, ended with @samp{!EL!} and where the field
7290separator is a TAB, you could call the generic translator like this (on
7291a single line!):
7292
7293@example
7294#+ORGTBL: SEND test orgtbl-to-generic :tstart "!BTBL!" :tend "!ETBL!"
7295 :lstart "!BL! " :lend " !EL!" :sep "\t"
7296@end example
7297
7298@noindent
7299Please check the documentation string of the function
7300@code{orgtbl-to-generic} for a full list of parameters understood by
7301that function and remember that you can pass each of them into
7302@code{orgtbl-to-latex}, @code{orgtbl-to-texinfo}, and any other function
7303using the generic function.
7304
7305Of course you can also write a completely new function doing complicated
7306things the generic translator cannot do. A translator function takes
7307two arguments. The first argument is the table, a list of lines, each
7308line either the symbol @code{hline} or a list of fields. The second
7309argument is the property list containing all parameters specified in the
7310@samp{#+ORGTBL: SEND} line. The function must return a single string
7311containing the formatted table. If you write a generally useful
7312translator, please post it on @code{emacs-orgmode@@gnu.org} so that
7313others can benefit from your work.
7314
7315@node Dynamic blocks, Special agenda views, Tables in arbitrary syntax, Extensions and Hacking
5aafad2e 7316@section Dynamic blocks
06341a67 7317@cindex dynamic blocks
5aafad2e
CD
7318
7319Org-mode documents can contain @emph{dynamic blocks}. These are
06341a67
CD
7320specially marked regions that are updated by some user-written function.
7321A good example for such a block is the clock table inserted by the
7322command @kbd{C-c C-x C-r} (@pxref{Clocking work time}).
5aafad2e
CD
7323
7324Dynamic block are enclosed by a BEGIN-END structure that assigns a name
7325to the block and can also specify parameters for the function producing
7326the content of the block.
7327
7328@example
22a616f7 7329#+BEGIN: myblock :parameter1 value1 :parameter2 value2 ...
5aafad2e
CD
7330
7331#+END:
7332@end example
7333
7334Dynamic blocks are updated with the following commands
7335
7336@table @kbd
7337@kindex C-c C-x C-u
7338@item C-c C-x C-u
7339Update dynamic block at point.
7340@kindex C-u C-c C-x C-u
7341@item C-u C-c C-x C-u
7342Update all dynamic blocks in the current file.
7343@end table
7344
7345Updating a dynamic block means to remove all the text between BEGIN and
7346END, parse the BEGIN line for parameters and then call the specific
7347writer function for this block to insert the new content. For a block
7348with name @code{myblock}, the writer function is
7349@code{org-dblock-write:myblock} with as only parameter a property list
7350with the parameters given in the begin line. Here is a trivial example
7351of a block that keeps track of when the block update function was last
7352run:
7353
7354@example
7355#+BEGIN: block-update-time :format "on %m/%d/%Y at %H:%M"
7356
7357#+END:
7358@end example
7359
7360@noindent
7361The corresponding block writer function could look like this:
7362
7363@lisp
77ef352e 7364(defun org-dblock-write:block-update-time (params)
5aafad2e
CD
7365 (let ((fmt (or (plist-get params :format) "%d. %m. %Y")))
7366 (insert "Last block update at: "
86f46920 7367 (format-time-string fmt (current-time)))))
5aafad2e
CD
7368@end lisp
7369
7370If you want to make sure that all dynamic blocks are always up-to-date,
7371you could add the function @code{org-update-all-dblocks} to a hook, for
7372example @code{before-save-hook}. @code{org-update-all-dblocks} is
7373written in a way that is does nothing in buffers that are not in Org-mode.
7374
386477e3 7375@node Special agenda views, Using the property API, Dynamic blocks, Extensions and Hacking
06341a67
CD
7376@section Special Agenda Views
7377@cindex agenda views, user-defined
7378
7379Org-mode provides a special hook that can be used to narrow down the
7380selection made by any of the agenda views. You may specify a function
7381that is used at each match to verify if the match should indeed be part
7382of the agenda view, and if not, how much should be skipped.
7383
7384Let's say you want to produce a list of projects that contain a WAITING
7385tag anywhere in the project tree. Let's further assume that you have
7386marked all tree headings that define a project with the todo keyword
7387PROJECT. In this case you would run a todo search for the keyword
7388PROJECT, but skip the match unless there is a WAITING tag anywhere in
7389the subtree belonging to the project line.
7390
7391To achieve this, you must write a function that searches the subtree for
7392the tag. If the tag is found, the function must return @code{nil} to
7393indicate that this match should not be skipped. If there is no such
7394tag, return the location of the end of the subtree, to indicate that
7395search should continue from there.
7396
7397@lisp
7398(defun my-skip-unless-waiting ()
7399 "Skip trees that are not waiting"
7400 (let ((subtree-end (save-excursion (org-end-of-subtree t))))
7401 (if (re-search-forward ":WAITING:" subtree-end t)
7402 nil ; tag found, do not skip
7403 subtree-end))) ; tag not found, continue after end of subtree
7404@end lisp
7405
7406Furthermore you must write a command that uses @code{let} to temporarily
7407put this function into the variable @code{org-agenda-skip-function},
7408sets the header string for the agenda buffer, and calls the todo-list
7409generator while asking for the specific TODO keyword PROJECT. The
7410function must also accept one argument MATCH, but it can choose to
7411ignore it@footnote{MATCH must be present in case you want to define a
7412custom command for producing this special list. Custom commands always
7413supply the MATCH argument, but it can be empty if you do not specify it
7414while defining the command(@pxref{Custom agenda
7415views}).} (as we do in the example below). Here is the example:
7416
7417@lisp
7418(defun my-org-waiting-projects (&optional match)
7419 "Produce a list of projects that contain a WAITING tag.
7420MATCH is being ignored."
7421 (interactive)
7422 (let ((org-agenda-skip-function 'my-skip-unless-waiting)
7423 (org-agenda-overriding-header "Projects waiting for something: "))
7424 ;; make the list
7425 (org-todo-list "PROJECT")))
7426@end lisp
7427
386477e3
CD
7428@node Using the property API, , Special agenda views, Extensions and Hacking
7429@section Using the property API
7430@cindex API, for properties
4d1daf59 7431@cindex properties, API
386477e3
CD
7432
7433Here is a description of the functions that can be used to work with
7434properties.
7435
7436@defun org-entry-properties &optional pom which
7437Get all properties of the entry at point-or-marker POM.
7438This includes the TODO keyword, the tags, time strings for deadline,
7439scheduled, and clocking, and any additional properties defined in the
7440entry. The return value is an alist, keys may occur multiple times
7441if the property key was used several times.
7442POM may also be nil, in which case the current entry is used.
7443If WHICH is nil or `all', get all properties. If WHICH is
7444`special' or `standard', only get that subclass.
7445@end defun
7446@defun org-entry-get pom property &optional inherit
7447Get value of PROPERTY for entry at point-or-marker POM.
7448If INHERIT is non-nil and the entry does not have the property,
7449then also check higher levels of the hierarchy.
7450@end defun
7451
7452@defun org-entry-delete pom property
7453Delete the property PROPERTY from entry at point-or-marker POM.
7454@end defun
7455
7456@defun org-entry-put pom property value
7457Set PROPERTY to VALUE for entry at point-or-marker POM.
7458@end defun
7459
7460@defun org-buffer-property-keys &optional include-specials
7461Get all property keys in the current buffer.
7462@end defun
7463
7464@defun org-insert-property-drawer
7465Insert a property drawer at point.
7466@end defun
06341a67 7467
31e5288c 7468@node History and Acknowledgments, Index, Extensions and Hacking, Top
5aafad2e 7469@appendix History and Acknowledgments
891f4676 7470@cindex acknowledgments
5aafad2e 7471@cindex history
cfbc5709 7472@cindex thanks
891f4676 7473
86f46920 7474Org-mode was borne in 2003, out of frustration over the user interface
06341a67
CD
7475of the Emacs outline-mode. I was trying to organize my notes and
7476projects, and using Emacs seemed to be the natural way to go. However,
7477having to remember eleven different commands with two or three keys per
7478command, only to hide and unhide parts of the outline tree, that seemed
7479entirely unacceptable to me. Also, when using outlines to take notes, I
7480constantly want to restructure the tree, organizing it parallel to my
7481thoughts and plans. @emph{Visibility cycling} and @emph{structure
7482editing} were originally implemented in the package
7483@file{outline-magic.el}, but quickly moved to the more general
7484@file{org.el}. As this environment became comfortable for project
7485planning, the next step was adding @emph{TODO entries}, basic @emph{time
7486stamps}, and @emph{table support}. These areas highlight the two main
7487goals that Org-mode still has today: To create a new, outline-based,
7488plain text mode with innovative and intuitive editing features, and to
7489incorporate project planning functionality directly into a notes file.
a1f058c6 7490
386477e3 7491Since the first release, literally thousands of emails to me or on
a1f058c6 7492@code{emacs-orgmode@@gnu.org} have provided a constant stream of bug
06341a67
CD
7493reports, feedback, new ideas, and sometimes patches and add-on code.
7494Many thanks to everyone who has helped to improve this package. I am
7495trying to keep here a list of the people who had significant influence
7496in shaping one or more aspects of Org-mode. The list may not be
7497complete, if I have forgotten someone, please accept my apologies and
a1f058c6 7498let me know.
891f4676
RS
7499
7500@itemize @bullet
c3c04119 7501
386477e3
CD
7502@item
7503@i{Russel Adams} came up with the idea for drawers.
891f4676 7504@item
0730c539
CD
7505@i{Thomas Baumann} contributed the code for links to the MH-E email
7506system.
6bae0337 7507@item
0730c539 7508@i{Alex Bochannek} provided a patch for rounding time stamps.
26ca33ed 7509@item
0730c539
CD
7510@i{Charles Cave}'s suggestion sparked the implementation of templates
7511for Remember.
26ca33ed 7512@item
0730c539 7513@i{Pavel Chalmoviansky} influenced the agenda treatment of items with
26ca33ed
CD
7514specified time.
7515@item
5aafad2e
CD
7516@i{Gregory Chernov} patched support for lisp forms into table
7517calculations and improved XEmacs compatibility, in particular by porting
7518@file{nouline.el} to XEmacs.
8ef8f2e6 7519@item
0730c539 7520@i{Sacha Chua} suggested to copy some linking code from Planner.
891f4676 7521@item
386477e3
CD
7522@i{Eddward DeVilla} proposed and tested checkbox statistics. He also
7523came up with the idea of properties, and that there should be an API for
7524them.
86f46920 7525@item
06341a67
CD
7526@i{Kees Dullemond} used to edit projects lists directly in HTML and so
7527inspired some of the early development, including HTML export. He also
7528asked for a way to narrow wide table columns.
84976147 7529@item
0730c539
CD
7530@i{Christian Egli} converted the documentation into TeXInfo format,
7531patched CSS formatting into the HTML exporter, and inspired the agenda.
891f4676 7532@item
31e5288c
CD
7533@i{David Emery} provided a patch for custom CSS support in exported
7534HTML agendas.
7535@item
0730c539 7536@i{Nic Ferrier} contributed mailcap and XOXO support.
5b69c9ca 7537@item
06341a67
CD
7538@i{John Foerch} figured out how to make incremental search show context
7539around a match in a hidden outline tree.
7540@item
a1f058c6
CD
7541@i{Niels Giessen} had the idea to automatically archive DONE trees.
7542@item
06341a67
CD
7543@i{Bastien Guerry} provided extensive feedback and some patches, and
7544translated David O'Toole's tutorial into French.
5aafad2e 7545@item
86f46920 7546@i{Kai Grossjohann} pointed out key-binding conflicts with other packages.
d924f2e5 7547@item
386477e3
CD
7548@i{Scott Jaderholm} proposed footnotes, control over whitespace between
7549folded entries, and column view for properties.
7550@item
31e5288c
CD
7551@i{Shidai Liu} ("Leo") asked for embedded LaTeX and tested it. He also
7552provided frequent feedback and some patches.
06341a67 7553@item
31e5288c
CD
7554@i{Jason F. McBrayer} suggested agenda export to CSV format.
7555@item
7556@i{Dmitri Minaev} sent a patch to set priority limits on a per-file
7557basis.
dbdd7534 7558@item
0730c539
CD
7559@i{Stefan Monnier} provided a patch to keep the Emacs-Lisp compiler
7560happy.
d924f2e5 7561@item
31e5288c
CD
7562@i{Rick Moynihan} proposed to allow multiple TODO sequences in a file.
7563@item
0730c539 7564@i{Todd Neal} provided patches for links to Info files and elisp forms.
8ef8f2e6 7565@item
0730c539
CD
7566@i{Tim O'Callaghan} suggested in-file links, search options for general
7567file links, and TAGS.
d924f2e5 7568@item
06341a67
CD
7569@i{Takeshi Okano} translated the manual and David O'Toole's tutorial
7570into Japanese.
7571@item
0730c539 7572@i{Oliver Oppitz} suggested multi-state TODO items.
d924f2e5 7573@item
0730c539
CD
7574@i{Scott Otterson} sparked the introduction of descriptive text for
7575links, among other things.
d924f2e5 7576@item
86f46920
CD
7577@i{Pete Phillips} helped during the development of the TAGS feature, and
7578provided frequent feedback.
26ca33ed 7579@item
0730c539 7580@i{T.V. Raman} reported bugs and suggested improvements.
8ef8f2e6 7581@item
0730c539 7582@i{Matthias Rempe} (Oelde) provided ideas, Windows support, and quality
26ca33ed 7583control.
d924f2e5 7584@item
0730c539 7585@i{Kevin Rogers} contributed code to access VM files on remote hosts.
d924f2e5 7586@item
0730c539
CD
7587@i{Frank Ruell} solved the mystery of the @code{keymapp nil} bug, a
7588conflict with @file{allout.el}.
67cb614c 7589@item
3a401219 7590@i{Jason Riedy} sent a patch to fix a bug with export of TODO keywords.
86f46920 7591@item
0730c539
CD
7592@i{Philip Rooke} created the Org-mode reference card and provided lots
7593of feedback.
891f4676 7594@item
0730c539
CD
7595@i{Christian Schlauer} proposed angular brackets around links, among
7596other things.
225ff037 7597@item
0730c539 7598Linking to VM/BBDB/GNUS was inspired by @i{Tom Shannon}'s
891f4676 7599@file{organizer-mode.el}.
a1f058c6 7600@item
dbdd7534 7601@i{Daniel Sinder} came up with the idea of internal archiving by locking
a1f058c6 7602subtrees.
891f4676 7603@item
86f46920
CD
7604@i{Dale Smith} proposed link abbreviations.
7605@item
2dcffa1c
CD
7606@i{David O'Toole} wrote @file{org-publish.el} and drafted the manual
7607chapter about publishing.
8ef8f2e6 7608@item
0730c539 7609@i{J@"urgen Vollmer} contributed code generating the table of contents
26ca33ed 7610in HTML output.
891f4676 7611@item
0730c539
CD
7612@i{Chris Wallace} provided a patch implementing the @samp{QUOTE}
7613keyword.
f029a017 7614@item
0730c539 7615@i{David Wainberg} suggested archiving, and improvements to the linking
26ca33ed 7616system.
891f4676 7617@item
0730c539 7618@i{John Wiegley} wrote @file{emacs-wiki.el} and @file{planner.el}. The
26ca33ed
CD
7619development of Org-mode was fully independent, and both systems are
7620really different beasts in their basic ideas and implementation details.
8ef8f2e6 7621I later looked at John's code, however, and learned from his
26ca33ed
CD
7622implementation of (i) links where the link itself is hidden and only a
7623description is shown, and (ii) popping up a calendar to select a date.
891f4676 7624@item
0730c539
CD
7625@i{Carsten Wimmer} suggested some changes and helped fix a bug in
7626linking to GNUS.
5b10c9c4 7627@item
0730c539 7628@i{Roland Winkler} requested additional keybindings to make Org-mode
26ca33ed
CD
7629work on a tty.
7630@item
3a401219 7631@i{Piotr Zielinski} wrote @file{org-mouse.el}, proposed agenda blocks
86f46920 7632and contributed various ideas and code snippets.
891f4676 7633@end itemize
5aafad2e 7634
84247bb5 7635
31e5288c 7636@node Index, Key Index, History and Acknowledgments, Top
5aafad2e 7637@unnumbered Index
891f4676
RS
7638
7639@printindex cp
7640
7641@node Key Index, , Index, Top
86f46920 7642@unnumbered Key Index
891f4676
RS
7643
7644@printindex ky
7645
7646@bye
41700b79
MB
7647
7648@ignore
7649 arch-tag: 7893d1fe-cc57-4d13-b5e5-f494a1bcc7ac
7650@end ignore