# HG changeset patch # User Carsten Dominik # Date 1213716120 0 # Node ID c1ef445563bb0b9dc836272fda3b2c361e34e2ee # Parent a678c02d0c40ccec5cf2f4e89937f88fd2736f83 2008-06-17 Carsten Dominik * org-colview.el (org-columns-next-allowed-value): Bug fix. * org-colview-xemacs.el (org-columns-next-allowed-value): Bug fix. * org-agenda.el (org-agenda-get-closed): Get the end time into the agenda prefix as well. * org-publish.el (org-publish-org-index): Make a properly indented list. * org.el (org-calendar-agenda-action-key): New option. (org-get-cursor-date): New function. (org-mark-entry-for-agenda-action): New command. (org-overriding-default-time): New variable. (org-read-date): Respect `org-overriding-default-time'. * org-remember.el (org-remember-apply-template): Respect the ovverriding default time. * org-agenda.el (org-agenda-action-marker): New variable. (org-agenda-action): New command. (org-agenda-do-action): New function. 2008-06-17 Carsten Dominik * org.el (org-schedule, org-deadline): Protect scheduled and deadline tasks against changes that accidently remove the repeater. Also show a message with the new date when done. 2008-06-17 Carsten Dominik * org.el (org-beginning-of-line): Cater for the case when there are tags but no headline text. (org-align-tags-here): Convert to tabs only when indent-tabs-mode it set. 2008-06-17 Carsten Dominik * org-mhe.el (org-mhe-get-message-folder-from-index): Make sure the return value is nil instead of "nil" when there is no match. * org-exp.el (org-insert-centered): Use fill-column instead of 80. (org-export-as-ascii): Use string-width to measure the width of the heading. * org.el (org-diary-to-ical-string): No longer kill buffer FROMBUF, this is now done by the caller. * org-exp.el (org-print-icalendar-entries): Move the call to `org-diary-to-ical-string' out of the loop, and kill the buffer afterwords. * org-remember.el (org-remember-visit-immediately): Position cursor after moving to the note. (org-remember-apply-template): Use a text property to record the cursor position. (org-remember-handler): Align tags after pasting the note. 2008-06-17 Carsten Dominik * org-bbdb.el (org-bbdb-follow-anniversary-link): New function. * org-agenda.el (org-agenda-open-link): If there is an org-bbdb-name property in the current line, jump to that bbdb entry. * org-bbdb.el (org-bbdb-anniversaries): Add the bbdb-name as a text property, so that the agenda knows where this entry comes from. * org-agenda.el (org-agenda-clock-in): Fixed bug in the interaction between clocking-in from the agenda, and automatic task state switching. * org-macs.el (org-with-point-at): Bug fix in macro defintion. * org.el (org-beginning-of-line, org-end-of-line): Make sure the zmacs-region stays after this command in XEmacs. 2008-06-17 Carsten Dominik * org.el (org-scan-tags): Allow new values for ACTION parameter. * org-remember.el (org-remember-templates): Fix bug in customization type definition. * org.el (org-map-entries): New function. 2008-06-17 Carsten Dominik * org-agenda.el (org-agenda-skip-comment-trees): New option. (org-agenda-skip): Respect `org-agenda-skip-comment-trees'. 2008-06-17 Carsten Dominik * org-remember.el (org-jump-to-target-location): New variable. (org-remember-apply-template): Set `org-remember-apply-template' if requested by template. (org-remember-handler): Start an idle timer to jump to remember location. * org-exp.el (org-get-current-options): Add the FILETAGS setting. * org.el (org-set-regexps-and-options): Fix bug with parsing of file tags. (org-get-tags-at): Add the content of `org-file-tags'. * org-exp.el (org-export-handle-comments): Fix bug with several comment lines after each other. (org-number-to-roman, org-number-to-counter): New functions. (org-export-section-number-format): New option. 2008-06-17 Carsten Dominik * org-exp.el (org-export-protect-examples): Catch the case of a missing end_example line. * org.el (org-set-regexps-and-options): Set `org-file-properties' and `org-file-tags' to nil. * org-colview.el (org-columns-next-allowed-value): Handle next argument NTH to directly select a value. * org-colview-xemacs.el (org-columns-next-allowed-value): Handle next argument NTH to directly select a value. 2008-06-17 Carsten Dominik * org-agenda.el (org-agenda-scheduled-leaders): Fix docstring. 2008-06-17 Carsten Dominik * org.el (org-columns-ellipses): New option. 2008-06-17 Carsten Dominik * org-colview.el (org-columns-add-ellipses): New function. (org-columns-compact-links): New function. (org-columns-cleanup-item): Call `org-columns-compact-links'. (org-columns-display-here): Call `org-agenda-columns-cleanup-item' when in agenda. (org-columns-edit-value): Fixed bug with editing values from agenda column view. (org-columns-redo): Also redo the agenda itself. 2008-06-17 Carsten Dominik * org-agenda.el (org-agenda-columns-remove-prefix-from-item): New option. * org-colview.el (org-agenda-columns-cleanup-item): New function. * org-exp.el (org-export-ascii-preprocess): Renamed from `org-export-ascii-clean-string'. (org-export-kill-licensed-text) (org-export-define-heading-targets) (org-export-handle-invisible-targets) (org-export-target-internal-links) (org-export-remove-or-extract-drawers) (org-export-remove-archived-trees) (org-export-protect-quoted-subtrees) (org-export-protect-verbatim, org-export-protect-examples) (org-export-select-backend-specific-text) (org-export-mark-blockquote-and-verse) (org-export-remove-comment-blocks-and-subtrees) (org-export-handle-comments, org-export-mark-radio-links) (org-export-remove-special-table-lines) (org-export-normalize-links) (org-export-concatenate-multiline-links) (org-export-concatenate-multiline-emphasis): New functions, obtained from spliiting the export preprocessor. * org-table.el (org-table-recalculate): Improve error message if the row number is invalid. 2008-06-17 Carsten Dominik * org-archive.el (org-archive-save-context-info): Fix bugs in customization setup and docstring. * org-exp.el (org-export-html-style): Changed the size of in the
 element to 90%.

2008-06-17  Carsten Dominik  

	* org.el (org-find-src-example-start): Function removed.
	(org-edit-src-find-region-and-lang): New function.

2008-06-17  Carsten Dominik  

	* org.el (org-edit-src-exit): New function.
	(org-exit-edit-mode): New minor mode.

	* org-exp.el (org-export-preprocess-string): Fix bug with removing
	comment-like lines from protected examples.

	* org.el (org-edit-src-example, org-find-src-example-start)
	(org-protect-source-example, org-edit-special): New functions.

2008-06-17  Carsten Dominik  

	* org-publish.el (org-publish-project-alist): Fix typo in
	docstring.
	(org-publish-project-alist): Handle :index-title property.

2008-06-17  Carsten Dominik  

	* org-export-latex.el (org-export-as-latex): Make sure region
	bounds are correct.  Parse subtree properties relating to export.

	* org-exp.el (org-export-add-options-to-plist): New function.
	(org-infile-export-plist): Use `org-export-add-options-to-plist'.

2008-06-17  Carsten Dominik  

	* org.el (org-default-properties): Add EXPORT_FILE_NAME and
	EXPORT_TITLE.

	* org-exp.el (org-export-get-title-from-subtree)
	(org-export-as-ascii, org-export-as-html): Make sure the original
	region-beginning and region-end are used, even after moving
	point.
	(org-export-get-title-from-subtree): Also try the EXPORT_TITLE
	property.

	* org-remember.el (org-remember-last-stored-marker): New variable.
	(org-remember-goto-last-stored): Use `org-goto-marker-or-bmk'.
	(org-remember-handler): Also use marker to remember
	last-stored position.

	* org.el (org-goto-marker-or-bmk): New function.

2008-06-17  Carsten Dominik  

	* org.el (org-file-properties): Renamed from `org-local-properties'.
	(org-scan-tags): Take file tags into account.
	(org-tags-match-list-sublevels): Default changed to t.

	* org-exp.el (org-export-as-html): Close paragraph after a
	footnote.

	* org.el (org-update-parent-todo-statistics): New function.

	* org-exp.el (org-icalendar-store-UID): New option.
	(org-icalendar-force-UID): Option removed.
	(org-print-icalendar-entries): IMplement UIDs.

2008-06-17  Carsten Dominik  

	* org-mhe.el (org-mhe-follow-link): Fix bug in mhe searches.

2008-06-17  Carsten Dominik  

	* org-faces.el (org-column): Document how this face is being used
	and why sometimes the background faces shine through.

	* org-mhe.el (org-mhe-follow-link): Improve handling of searches.

	* org-publish.el (org-publish-attachment): Create publishing
	directory if it does not yet exist.

	* org-table.el (org-calc-default-modes): Change default number
	format to (float 8).

	* org.el (org-olpath-completing-read): New function.
	(org-time-clocksum-format): New option.
	(org-minutes-to-hh:mm-string): Use `org-time-clocksum-format'.

	* org-clock.el (org-clock-display, org-clock-out)
	(org-update-mode-line): Use `org-time-clocksum-format'.

	* org-colview-xemacs.el (org-columns-number-to-string): Use
	`org-time-clocksum-format'.

	* org-colview.el (org-columns-number-to-string): Use
	`org-time-clocksum-format'.

2008-06-17  Carsten Dominik  

	* org-id.el: New file, move from contrib to core.

	* org-exp.el (org-icalendar-force-UID): New option.

2008-06-17  Carsten Dominik  

	* org-exp.el (org-print-icalendar-entries): Make sure DTEND is
	shifted by one day if theere is a date range without an end
	time.

	* org.el (org-try-structure-completion): New function.

2008-06-17  Carsten Dominik  

	* org.el (org-set-font-lock-defaults): Improve fontification of
	description lists.
	(org-insert-item): Handle description lists.
	(org-adaptive-fill-function): Improve auto indentation in
	description lists.

	* org-exp.el (org-export-as-html, org-export-preprocess-string):
	Implement VERSE environment.
	(org-export-preprocess-string): Implement the COMMENT
	environment.

	* org-export-latex.el (org-export-latex-preprocess): Implement
	VERSE environment.

2008-06-17  Carsten Dominik  

	* org-jsinfo.el (org-infojs-opts-table): Add entry for FIXED_TOC
	option.

2008-06-17  Carsten Dominik  

	* org-table.el (orgtbl-to-tsv, orgtbl-to-csv): New functions.

	* org.el (org-quote-csv-field): New functions.

	* org-table.el (org-table-export-default-format): Remove :splice
	from default format, we get the same effect by not specifying
	:tstart and :tend.
	(org-table-export): Improve setup, distinguish better between
	interactive and non-interactive use, allow specifying the format
	on the fly, better protection against wrong file names.
	(orgtbl-to-generic): Fix documentation.  Do not require :tstart
	and :tend when :splice is omitted.

2008-06-17  Carsten Dominik  

	* org-clock.el (org-clock-select-task): Make sure the selection
	letters are 1-9 and A-Z, no special characters.

2008-06-17  Carsten Dominik  

	* org-exp.el (org-export-htmlize): New group.
	(org-export-htmlize-output-type)
	(org-export-htmlize-css-font-prefix): New options.
	(org-export-htmlize-region-for-paste): New function.
	(org-export-htmlize-generate-css): New command.

2008-06-17  Carsten Dominik  

	* org.el (org-set-visibility-according-to-property): New function.
	(org-ctrl-c-ctrl-c): Do not restart org-mode, just get the options
	and compute the regular expressions, and update font-lock.
	(org-property-re): Allow a dash in property names.

	* org-archive.el (org-extract-archive-file): Insert the file name
	without the path into the format, to allow the location format to
	contain a subdirectory.

	* org-agenda.el (org-agenda-post-command-hook): If point is at end
	of buffer, and the `org-agenda-type' property undefined, use the
	value from the character before.

	* org.el (org-add-planning-info): Don't let indentation for
	would-be timestamp become extra whitespace at the end of headline.

2008-06-17  Carsten Dominik  

	* org.el (org-remove-double-quotes, org-file-contents): New
	functions.

	* org-exp.el (org-infile-export-plist): Also parse the
	contents of #+SETUPFILE files, recursively.

	* org.el (org-set-regexps-and-options): Also parse the
	contents of #+SETUPFILE files, recursively.

	* org-exp.el (org-export-handle-include-files): New function.
	(org-export-preprocess-string): Call
	`org-export-handle-include-files'.

	* org.el (org-delete-property-globally)
	(org-delete-property, org-set-property): Ignore case during
	completion.
	(org-set-property): Use `org-completing-read' instead of
	`completing-read'.

	* org.el (org-complete-expand-structure-template): New,
	experimental function.
	(org-structure-template-alist): New, experimental option.
	(org-complete): Call `org-complete-expand-structure-template'.

2008-06-17 Bastien Guerry  

	* org-export-latex.el (org-export-latex-preprocess): Added
	support for blockquotes.

2008-06-17  Carsten Dominik  

	* org.el (org-read-date-analyze): Catch the case where only a
	weekday is given.

2008-06-17  Carsten Dominik  

	* org.el (org-set-font-lock-defaults): Make the description
	tag bold.

	* org-exp.el (org-export-as-html, org-close-li): Implement
	description lists.

2008-06-17 Jason Riedy  

	* org-table.el (*orgtbl-default-fmt*): New variable.
	(orgtbl-format-line): Use the value of *orgtbl-default-fmt*
	when there is no other fmt available.

	(orgtbl-to-generic): Allow an explicitly nil :tstart or
	:tend to suppress the appropriate string.

	(orgtbl-to-orgtbl): New function for translating to another orgtbl
	table.

2008-06-17  Carsten Dominik  

	* org.el (org-read-date-analyze): "." as an alias for "+0" in
	read date.

	* org-clock.el (org-clock-save-markers-for-cut-and-paste):
	New function.

	* org-agenda.el (org-agenda-save-markers-for-cut-and-paste):
	New function.

2008-06-17  Carsten Dominik  

	* org-clock.el (org-clock-find-position): Don't include notes
	into clock drawer.

	* org-archive.el (org-archive-subtree): No longer remove an
	extra line after cutting the subtree.  `org-cut-subtree' already
	takes care of this.

	* org-remember.el (org-remember-handler): Only kill the target
	buffer if it does not contain the running clock.

	* org.el (org-markers-to-move): New variable.
	(org-save-markers-in-region, org-check-and-save-marker)
	(org-reinstall-markers-in-region): New function.
	(org-move-subtree-down, org-copy-subtree): Remember relative
	marker positions before cutting.
	(org-move-subtree-down, org-paste-subtree): Restore relative
	marker positions after pasting.

	* org-remember.el (org-remember-clock-out-on-exit): New option.
	(org-remember-finalize): Clock out only if the setting in
	`org-remember-clock-out-on-exit' requires it.
	(org-remember-handler): Do the cleanup in the buffer, to make sure
	that the clock marker remains in tact.

2008-06-17  Carsten Dominik  

	* org-clock.el (org-clock-goto): Widen buffer if necessary.
	(org-clock-in): Make sure that also tasks outside the narrowed
	region will be clocked in correctly.
	(org-clock-insert-selection-line): Widen the buffer so that we can
	find the correct task heading.

	* org.el (org-base-buffer): New function.

	* org-exp.el (org-icalendar-cleanup-string): Make sure ',"
	and ";" are escaped.
	(org-print-icalendar-entries): Also apply
	`org-icalendar-cleanup-string' to the headline, not only to the
	summary property.

2008-06-17  Carsten Dominik  

	* org-exp.el (org-export-preprocess-hook): New hook.
	(org-export-preprocess-string): Call
	`org-export-preprocess-hook'.

	* org.el (org-font-lock-hook): New variable.
	(org-font-lock-hook): New function.
	(org-set-font-lock-defaults): Call `org-font-lock-hook'.



2008-06-17  Carsten Dominik  

	* org.texi: Modify license to no longer include back- and front
	cover matters.
	(Using the mapping API): New section.
	(Agenda column view): New section.
	(Moving subtrees): Document archiving to the archive
	sibling.
	(Agenda commands): Document columns view in the agenda.
	(Using the property API): Document the API for
	multi-valued properties.

diff -r a678c02d0c40 -r c1ef445563bb doc/misc/ChangeLog
--- a/doc/misc/ChangeLog	Tue Jun 17 11:28:06 2008 +0000
+++ b/doc/misc/ChangeLog	Tue Jun 17 15:22:00 2008 +0000
@@ -1,3 +1,21 @@
+2008-06-17  Carsten Dominik  
+
+	* org.texi: Modify license to no longer include back- and front
+	cover matters.
+	(Using the mapping API): New section.
+	(Agenda column view): New section.
+	(Moving subtrees): Document archiving to the archive
+	sibling.
+	(Agenda commands): Document columns view in the agenda.
+	(Using the property API): Document the API for
+	multi-valued properties.
+
+2008-06-17  Jason Riedy  
+
+	* org.texi (A LaTeX example): Note that fmt may be a one-argument
+	function, and efmt may be a two-argument function.
+	(Radio tables): Document multiple destinations.
+
 2008-06-16  Glenn Morris  
 
 	* epa.texi, erc.texi, pgg.texi, remember.texi, sasl.texi, url.texi:
diff -r a678c02d0c40 -r c1ef445563bb doc/misc/org.texi
--- a/doc/misc/org.texi	Tue Jun 17 11:28:06 2008 +0000
+++ b/doc/misc/org.texi	Tue Jun 17 15:22:00 2008 +0000
@@ -3,8 +3,8 @@
 @setfilename ../../info/org
 @settitle The Org Manual
 
-@set VERSION 6.02b
-@set DATE April 2008
+@set VERSION 6.05a
+@set DATE June 2008
 
 @dircategory Emacs
 @direntry
@@ -42,9 +42,9 @@
 under the terms of the GNU Free Documentation License, Version 1.2 or
 any later version published by the Free Software Foundation; with no
 Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
-and with the Back-Cover Texts as in (a) below.  A copy of the
-license is included in the section entitled ``GNU Free Documentation
-License'' in the Emacs manual.
+and with the Back-Cover Texts as in (a) below.    A copy of the
+ license is included in the section entitled ``GNU Free Documentation
+-License.''
 
 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
 modify this GNU manual.  Buying copies from the FSF supports it in
@@ -94,7 +94,8 @@
 * Exporting::                   Sharing and publishing of notes
 * Publishing::                  Create a web site of linked Org files
 * Miscellaneous::               All the rest which did not fit elsewhere
-* Extensions and Hacking::      It is possible to write add-on code
+* Extensions::                 
+* Hacking::                     
 * History and Acknowledgments::  How Org came into being
 * Main Index::                  An index of Org's concepts and features
 * Key Index::                   Key bindings and where they are described
@@ -279,16 +280,35 @@
 
 Exporting
 
+* Markup rules::                Which structures are recognized?
+* Export options::              Per-file export settings
+* The export dispatcher::       How to access exporter commands
 * ASCII export::                Exporting to plain ASCII
 * HTML export::                 Exporting to HTML
 * LaTeX export::                Exporting to LaTeX
 * XOXO export::                 Exporting to XOXO
 * iCalendar export::            Exporting in iCalendar format
-* Text interpretation::         How the exporter looks at the file
+
+Markup rules
+
+* Document title::              How the document title is determined
+* Headings and sections::       The main structure of the exported document
+* Table of contents::           If, where, how to create a table of contents
+* Initial text::                Text before the first headline
+* Lists::                       Plain lists are exported
+* Paragraphs::                  What determines beginning and ending
+* Literal examples::            Source code and other examples
+* Include files::               Include the contents of a file during export
+* Tables exported::             Tables are exported richly
+* Footnotes::                   Numbers like [1]
+* Emphasis and monospace::      To bold or not to bold
+* TeX macros and LaTeX fragments::  Create special, rich export.
+* Horizontal rules::            A line across the page
+* Comment lines::               Some lines will not be exported
 
 HTML export
 
-* HTML Export commands::        How to invoke LaTeX export
+* HTML Export commands::        How to invoke HTML export
 * Quoting HTML tags::           Using direct HTML in Org mode
 * Links::                       Transformation of links for HTML
 * Images::                      How to include images
@@ -301,15 +321,6 @@
 * Quoting LaTeX code::          Incorporating literal LaTeX code
 * Sectioning structure::        Changing sectioning in LaTeX output
 
-Text interpretation by the exporter
-
-* Comment lines::               Some lines will not be exported
-* Initial text::                Text before the first headline
-* Footnotes::                   Numbers like [1]
-* Quoted examples::             Inserting quoted chunks of text
-* Enhancing text::              Subscripts, symbols and more
-* Export options::              How to influence the export settings
-
 Publishing
 
 * Configuration::               Defining projects
@@ -347,14 +358,19 @@
 * Cooperation::                 Packages Org cooperates with
 * Conflicts::                   Packages that lead to conflicts
 
-Extensions, Hooks and Hacking
-
-* Extensions::                  Existing 3rd-party extensions
+Extensions
+
+* Extensions in the contrib directory::  These come with the Org distro
+* Other extensions::            These you have to find on the web.
+
+Hacking
+
 * Adding hyperlink types::      New custom link types
 * Tables in arbitrary syntax::  Orgtbl for LaTeX and other programs
 * Dynamic blocks::              Automatically filled blocks
 * Special agenda views::        Customized views
 * Using the property API::      Writing programs that use entry properties
+* Using the mapping API::       Mapping over all or selected entries
 
 Tables and lists in arbitrary syntax
 
@@ -561,9 +577,10 @@
 @cindex maintainer
 @cindex author
 
-If you find problems with Org, or if you have questions, remarks,
-or ideas about it, please contact the maintainer @value{MAINTAINER} at
-@value{MAINTAINEREMAIL}.
+If you find problems with Org, or if you have questions, remarks, or ideas
+about it, please mail to the Org mailing list @code{emacs-orgmode@@gnu.org}.
+If you are not a member of the mailing list, your mail will be reviewed by a
+moderator and then passed through to the list.
 
 For bug reports, please provide as much information as possible,
 including the version information of Emacs (@kbd{C-h v emacs-version
@@ -792,6 +809,19 @@
 #+STARTUP: showall
 @end example
 
+@noindent
+Forthermore, any entries with a @samp{VISIBILITY} property (@pxref{Properties
+and Columns}) will get their visibility adapted accordingly.  Allowed values
+for this property are @code{folded}, @code{children}, @code{content}, and
+@code{all}.
+@table @kbd
+@kindex C-u C-u @key{TAB}
+@item C-u C-u @key{TAB}
+Switch back to the startup visibility of the buffer, i.e. whatever is
+requested by startup options and @samp{VISIBILITY} properties in individual
+entries.
+@end table
+
 @node Motion, Structure editing, Visibility cycling, Document Structure
 @section Motion
 @cindex motion, between headlines
@@ -915,6 +945,12 @@
 also supply your own function to extract the sorting key.  With a @kbd{C-u}
 prefix, sorting will be case-sensitive.  With two @kbd{C-u C-u} prefixes,
 duplicate entries will also be removed.
+@kindex C-x n s
+@item C-x n s
+Narrow buffer to current subtree.
+@kindex C-x n w
+@item C-x n w
+Widen buffer to remove a narrowing.
 @kindex C-c *
 @item C-c *
 Turn a normal line or plain list item into a headline (so that it
@@ -1064,14 +1100,14 @@
 @cindex folding, sparse trees
 @cindex occur, command
 
-An important feature of Org mode is the ability to construct
-@emph{sparse trees} for selected information in an outline tree, so that
-the entire document is folded as much as possible, but the selected
-information is made visible along with the headline structure above
-it@footnote{See also the variables @code{org-show-hierarchy-above},
-@code{org-show-following-heading}, and @code{org-show-siblings} for
-detailed control on how much context is shown around each match.}.  Just
-try it out and you will see immediately how it works.
+An important feature of Org mode is the ability to construct @emph{sparse
+trees} for selected information in an outline tree, so that the entire
+document is folded as much as possible, but the selected information is made
+visible along with the headline structure above it@footnote{See also the
+variables @code{org-show-hierarchy-above}, @code{org-show-following-heading},
+@code{org-show-siblings}, and @code{org-show-entry-below} for detailed
+control on how much context is shown around each match.}.  Just try it out
+and you will see immediately how it works.
 
 Org mode contains several commands creating such trees, all these
 commands can be accessed through a dispatcher:
@@ -1082,15 +1118,16 @@
 This prompts for an extra key to select a sparse-tree creating command.
 @kindex C-c / r
 @item C-c / r
-Occur.  Prompts for a regexp and shows a sparse tree with all matches.
-If the match is in a headline, the headline is made visible.  If the
-match is in the body of an entry, headline and body are made visible.
-In order to provide minimal context, also the full hierarchy of
-headlines above the match is shown, as well as the headline following
-the match.  Each match is also highlighted; the highlights disappear
-when the buffer is changed by an editing command, or by pressing
-@kbd{C-c C-c}.  When called with a @kbd{C-u} prefix argument, previous
-highlights are kept, so several calls to this command can be stacked.
+Occur.  Prompts for a regexp and shows a sparse tree with all matches.  If
+the match is in a headline, the headline is made visible.  If the match is in
+the body of an entry, headline and body are made visible.  In order to
+provide minimal context, also the full hierarchy of headlines above the match
+is shown, as well as the headline following the match.  Each match is also
+highlighted; the highlights disappear when the buffer is changed by an
+editing command@footnote{depending on the option
+@code{org-remove-highlights-with-change}}, or by pressing @kbd{C-c C-c}.
+When called with a @kbd{C-u} prefix argument, previous highlights are kept,
+so several calls to this command can be stacked.
 @end table
 
 @noindent
@@ -1133,24 +1170,34 @@
 checkboxes (@pxref{Checkboxes}).  Org supports editing such lists,
 and the HTML exporter (@pxref{Exporting}) parses and formats them.
 
-Org knows ordered and unordered lists.  Unordered list items start
-with @samp{-}, @samp{+}, or @samp{*}@footnote{When using @samp{*} as a
-bullet, lines must be indented or they will be seen as top-level
-headlines.  Also, when you are hiding leading stars to get a clean
-outline view, plain list items starting with a star are visually
-indistinguishable from true headlines.  In short: even though @samp{*}
-is supported, it may be better to not use it for plain list items.} as
-bullets.  Ordered list items start with a numeral followed by either a
-period or a right parenthesis, such as @samp{1.} or @samp{1)}.  Items
-belonging to the same list must have the same indentation on the first
-line.  In particular, if an ordered list reaches number @samp{10.}, then
-the 2--digit numbers must be written left-aligned with the other numbers
-in the list.  Indentation also determines the end of a list item.  It
-ends before the next line that is indented like the bullet/number, or
-less.  Empty lines are part of the previous item, so you can have
-several paragraphs in one item.  If you would like an empty line to
-terminate all currently open plain lists, configure the variable
-@code{org-empty-line-terminates-plain-lists}.  Here is an example:
+Org knows ordered lists, unordered lists, and description lists.
+@itemize @bullet
+@item
+@emph{Unordered} list items start with @samp{-}, @samp{+}, or
+@samp{*}@footnote{When using @samp{*} as a bullet, lines must be indented or
+they will be seen as top-level headlines.  Also, when you are hiding leading
+stars to get a clean outline view, plain list items starting with a star are
+visually indistinguishable from true headlines.  In short: even though
+@samp{*} is supported, it may be better to not use it for plain list items.}
+as bullets.
+@item
+@emph{Ordered} list items start with a numeral followed by either a period or
+a right parenthesis, such as @samp{1.} or @samp{1)}.
+@item
+@emph{Description} list items are like unordered list items, but contain the
+separator @samp{ :: } to separate the description @emph{term} from the
+desciption.
+@end itemize
+
+Items belonging to the same list must have the same indentation on the first
+line.  In particular, if an ordered list reaches number @samp{10.}, then the
+2--digit numbers must be written left-aligned with the other numbers in the
+list.  Indentation also determines the end of a list item.  It ends before
+the next line that is indented like the bullet/number, or less.  Empty lines
+are part of the previous item, so you can have several paragraphs in one
+item.  If you would like an empty line to terminate all currently open plain
+lists, configure the variable @code{org-empty-line-terminates-plain-lists}.
+Here is an example:
 
 @example
 @group
@@ -1164,6 +1211,10 @@
        - on DVD only
       He makes a really funny face when it happens.
    But in the end, not individual scenes matter but the film as a whole.
+   Important actors in this film are:
+   - @b{Elijah Wood} :: He plays the Frodo
+   - @b{Sean Austin} :: He plays the Sam, Frodos friend.  I still remember
+     him very well from his role as Mikey Walsh a in the Goonies.
 @end group
 @end example
 
@@ -1171,7 +1222,8 @@
 deal with them correctly@footnote{Org only changes the filling
 settings for Emacs.  For XEmacs, you should use Kyle E. Jones'
 @file{filladapt.el}.  To turn this on,  put into @file{.emacs}:
-@code{(require 'filladapt)}}.
+@code{(require 'filladapt)}}, and by exporting them properly
+(@pxref{Exporting}).
 
 The following commands act on items when the cursor is in the first line
 of an item (the line with the bullet or number).
@@ -1265,7 +1317,8 @@
 hide and show the entry, but keep the drawer collapsed to a single line.
 In order to look inside the drawer, you need to move the cursor to the
 drawer line and press @key{TAB} there.  Org mode uses a drawer for
-storing properties (@pxref{Properties and Columns}).
+storing properties (@pxref{Properties and Columns}), and another one for
+storing clock times (@pxref{Clocking work time}).
 
 @node Orgstruct mode,  , Drawers, Document Structure
 @section The Orgstruct minor mode
@@ -1520,7 +1573,10 @@
 used to export the file can be configured in the variable
 @code{org-table-export-default-format}.  You may also use properties
 @code{TABLE_EXPORT_FILE} and @code{TABLE_EXPORT_FORMAT} to specify the file
-name and the format for table export in a subtree.
+name and the format for table export in a subtree.  Org supports quite
+general formats for exported tables.  The exporter format is the same as the
+format used by Orgtbl radio tables, see @ref{Translator functions} for a
+detailed description.
 @end table
 
 If you don't like the automatic table editor because it gets in your
@@ -2656,8 +2712,6 @@
 an implementation example.  Search for @samp{BibTeX links} in the source
 file.
 
-
-
 @node TODO Items, Tags, Hyperlinks, Top
 @chapter TODO Items
 @cindex TODO items
@@ -3136,12 +3190,37 @@
 @cindex tasks, breaking down
 
 It is often advisable to break down large tasks into smaller, manageable
-subtasks.  You can do this by creating an outline tree below a TODO
-item, with detailed subtasks on the tree@footnote{To keep subtasks out
-of the global TODO list, see the
-@code{org-agenda-todo-list-sublevels}.}.  Another possibility is the use
-of checkboxes to identify (a hierarchy of) a large number of subtasks
-(@pxref{Checkboxes}).
+subtasks.  You can do this by creating an outline tree below a TODO item,
+with detailed subtasks on the tree@footnote{To keep subtasks out of the
+global TODO list, see the @code{org-agenda-todo-list-sublevels}.}.  To keep
+the overview over the fraction of subtasks that are already completed, insert
+either @samp{[/]} or @samp{[%]} anywhere in the headline.  These cookies will
+be updates each time the todo status of a child changes.  For example:
+
+@example
+* Organize Party [33%]
+** TODO Call people [1/2]
+*** TODO Peter
+*** DONE Sarah
+** TODO Buy food
+** DONE Talk to neighbor
+@end example
+
+If you would like a TODO entry to automatically change to DONE when all
+chilrden are done, you can use the following setup:
+
+@example
+(defun org-summary-todo (n-done n-not-done)
+  "Switch entry to DONE when all subentries are done, to TODO otherwise."
+  (let (org-log-done org-log-states)   ; turn off logging
+    (org-todo (if (= n-not-done 0) "DONE" "TODO"))))
+
+(add-hook 'org-after-todo-statistics-hook 'org-summary-todo)
+@end example
+
+
+Another possibility is the use of checkboxes to identify (a hierarchy of) a
+large number of subtasks (@pxref{Checkboxes}).
 
 
 @node Checkboxes,  , Breaking down tasks, TODO Items
@@ -3268,14 +3347,24 @@
 @noindent
 the final heading will have the tags @samp{:work:}, @samp{:boss:},
 @samp{:notes:}, and @samp{:action:} even though the final heading is not
-explicitly marked with those tags.  When executing tag searches and
-Org mode finds that a certain headline matches the search criterion, it
-will not check any sublevel headline, assuming that these also match and
-that the list of matches could become very long because of that.  If you
-do want the sublevels be tested and listed as well, you may set the
-variable @code{org-tags-match-list-sublevels}.  To limit tag inheritance
-to specific tags, or to turn it off entirely, use the variable
-@code{org-use-tag-inheritance}.
+explicitly marked with those tags.  You can also set tags that all entries in
+a file should inherit as if these tags would be defined in a hypothetical
+level zero that surounds the entire file.
+
+@example
+#+FILETAGS: :Peter:Boss:Secret:
+@end example
+
+@noindent
+To limit tag inheritance to specific tags, or to turn it off entirely, use
+the variable @code{org-use-tag-inheritance}.
+
+When a headline matches during a tags search while tag inheritance is turned
+on, all the sublevels in the same tree will match as well@footnote{This is
+only true if the the search does not involve more complex tests including
+properties (@pxref{Property searches}).}.  The list of matches may then
+become very long.  If you only want to see the first tags match in a subtree,
+configure the variable @code{org-tags-match-list-sublevels}.
 
 @node Setting tags, Tag searches, Tag inheritance, Tags
 @section Setting tags
@@ -3886,6 +3975,8 @@
 @item  S-@key{left}/@key{right}
 Switch to the next/previous allowed value of the field.  For this, you
 have to have specified allowed values for a property.
+@item 1..9,0
+Directly select the nth allowed value, @kbd{0} selects the 10th value.
 @kindex n
 @kindex p
 @itemx  n / p
@@ -3930,6 +4021,7 @@
 this @code{columnview} dynamic block (@pxref{Dynamic blocks}).  The frame
 of this block looks like this:
 
+@cindex #+BEGIN: columnview
 @example
 * The column view
 #+BEGIN: columnview :hlines 1 :id "label"
@@ -3948,8 +4040,10 @@
 @example
 local     @r{use the tree in which the capture block is located}
 global    @r{make a global view, including all headings in the file}
-"label"   @r{call column view in the tree that has and @code{:ID:}}
-          @r{property with the value @i{label}}
+"label"   @r{call column view in the tree that has an @code{:ID:}}
+          @r{property with the value @i{label}.  You can use}
+          @r{@kbd{M-x org-id-copy} to create a globally unique ID for}
+          @r{the current entry and copy it to the kill-ring.}
 @end example
 @item :hlines
 When @code{t}, insert a hline after every line.  When a number N, insert
@@ -4215,6 +4309,8 @@
 the nth such day.  E.g.
 
 @example
++0            --> today
+.             --> today
 +4d           --> four days from today
 +4            --> same as above
 +2w           --> two weeks from today
@@ -4411,6 +4507,15 @@
 happen in the line directly following the headline.  Any CLOSED
 timestamp will be removed.  When called with a prefix argument, remove
 the scheduling date from the entry.
+@c
+@kindex C-c C-x C-k
+@kindex k a
+@kindex k s
+@item C-c C-x C-k
+Mark the current entry for agenda action.  After you have marked the entry
+like this, you can open the agenda or the calendar to find an appropriate
+date.  With the cursor on the selected date, press @kbd{k s} or @kbd{k d} to
+schedule the marked item.
 @end table
 
 @node Repeated tasks,  , Inserting deadline/schedule, Deadlines and scheduling
@@ -4545,6 +4650,7 @@
 at an existing clock table, just update it.  When called with a prefix
 argument, jump to the first clock report in the current document and
 update it.
+@cindex #+BEGIN: clocktable
 @example
 #+BEGIN: clocktable :maxlevel 2 :emphasize nil :scope file
 #+END: clocktable
@@ -4620,7 +4726,7 @@
 the agenda (@pxref{Weekly/daily agenda}) to show which tasks have been
 worked on or closed during a day.
 
-@node Effort estimates
+@node Effort estimates,  , Clocking work time, Dates and Times
 @section Effort estimates
 @cindex Effort estimates
 
@@ -4655,7 +4761,7 @@
 If you switch to column view in the daily/weekly agenda, the effort column
 will summarize the estimated work effort for each day@footnote{Please note
 the pitfalls of summing hierarchical data in a flat list (@pxref{Agenda
-column view}.}, and you can use this to find space in your schedule.  To get
+column view}).}, and you can use this to find space in your schedule.  To get
 an overview of the entire part of the day that is committed, you can set the
 option @code{org-agenda-columns-add-appointments-to-effort-sum}.  The
 appointments on a day that take place over a specified time interval will
@@ -4705,6 +4811,11 @@
 use two prefix arguments, Org jumps to the location where the last
 remember note was stored.
 
+You can also call @code{org-remember} in a special way from the agenda,
+using the @kbd{k r} key combination.  With this access, any time stamps
+inserted by the selected remember template (see below) will default to
+the cursor date in the agenda, rather than to the current date.
+
 @node Remember templates, Storing notes, Setting up Remember, Remember
 @section Remember templates
 @cindex templates, for remember
@@ -4724,26 +4835,29 @@
 
 @noindent In these entries, the first string is just a name, and the
 character specifies how to select the template.  It is useful if the
-character is also the first letter of the name.  The next string
-specifies the template.  Two more (optional) strings give the file in
-which, and the headline under which the new note should be stored.  The
-file (if not present or @code{nil}) defaults to
-@code{org-default-notes-file}, the heading to
-@code{org-remember-default-headline}.  If the file name is not an
-absolute path, it will be interpreted relative to @code{org-directory}.
-
-An optional sixth element specifies the contexts in which the user can
-select the template.  This element can be either a list of major modes
-or a function.  @code{org-remember} will first check whether the function
-returns @code{t} or if we are in any of the listed major mode, and select
-the template accordingly.
+character is also the first letter of the name.  The next string specifies
+the template.  Two more (optional) strings give the file in which, and the
+headline under which the new note should be stored.  The file (if not present
+or @code{nil}) defaults to @code{org-default-notes-file}, the heading to
+@code{org-remember-default-headline}.  If the file name is not an absolute
+path, it will be interpreted relative to @code{org-directory}.  The heading
+can also be the symbols @code{top} or @code{bottom} to send note as level 1
+entries to the beginning or end of the file, respectively.
+
+An optional sixth element specifies the contexts in which the user can select
+the template.  This element can be a list of major modes or a function.
+@code{org-remember} will first check whether the function returns @code{t} or
+if we are in any of the listed major mode, and exclude templates fo which
+this condition is not fulfilled.  Templates that do not specify this element
+at all, or that use @code{nil} or @code{t} as a value will always be
+selectable.
 
 So for example:
 
 @example
 (setq org-remember-templates
  '(("Bug" ?b "* BUG %?\n  %i\n  %a" "~/org/BUGS.org" "Bugs" (emacs-lisp-mode))
-   ("Journal" ?j "* %U %?\n\n  %i\n  %a" "~/org/JOURNAL.org" my-check)
+   ("Journal" ?j "* %U %?\n\n  %i\n  %a" "~/org/JOURNAL.org" "X" my-check)
    ("Idea" ?i "* %^@{Title@}\n  %i\n  %a" "~/org/JOURNAL.org" "New Ideas")))
 @end example
 
@@ -4752,8 +4866,8 @@
 available when the function @code{my-check} returns @code{t}.  The third
 template will be proposed in any context.
 
-When you call @kbd{M-x remember} (or @kbd{M-x org-remember}) to remember
-something, org will prompt for a key to select the template (if you have
+When you call @kbd{M-x org-remember} (or @kbd{M-x remember}) to remember
+something, Org will prompt for a key to select the template (if you have
 more than one template) and then prepare the buffer like
 @example
 * TODO
@@ -4768,16 +4882,16 @@
             @r{You may specify a default value and a completion table with}
             @r{%^@{prompt|default|completion2|completion3...@}}
             @r{The arrow keys access a prompt-specific history.}
+%a          @r{annotation, normally the link created with @code{org-store-link}}
+%A          @r{like @code{%a}, but prompt for the description part}
+%i          @r{initial content, the region when remember is called with C-u.}
+            @r{The entire text will be indented like @code{%i} itself.}
 %t          @r{time stamp, date only}
 %T          @r{time stamp with date and time}
 %u, %U      @r{like the above, but inactive time stamps}
 %^t         @r{like @code{%t}, but prompt for date.  Similarly @code{%^T}, @code{%^u}, @code{%^U}}
             @r{You may define a prompt like @code{%^@{Birthday@}t}}
 %n          @r{user name (taken from @code{user-full-name})}
-%a          @r{annotation, normally the link created with @code{org-store-link}}
-%A          @r{like @code{%a}, but prompt for the description part}
-%i          @r{initial content, the region when remember is called with C-u.}
-            @r{The entire text will be indented like @code{%i} itself.}
 %c          @r{Current kill ring head.}
 %x          @r{Content of the X clipboard.}
 %^C         @r{Interactive selection of which kill or clip to use.}
@@ -4789,6 +4903,7 @@
 %(sexp)     @r{evaluate elisp @code{(sexp)} and replace with the result}
 %!          @r{immediately store note after completing the template}
             @r{(skipping the @kbd{C-c C-c} that normally triggers storing)}
+%&          @r{jump to target location immediately after storing note}
 @end example
 
 @noindent
@@ -4828,14 +4943,20 @@
 @node Storing notes, Refiling notes, Remember templates, Remember
 @section Storing notes
 
-When you are finished preparing a note with @i{remember}, you have to
-press @kbd{C-c C-c} to file the note away.  The handler will store the
-note in the file and under the headline specified in the template, or it
-will use the default file and headlines.  The window configuration will
-be restored, sending you back to the working context before the call to
-@code{remember}.  To re-use the location found during the last call to
-@code{remember}, exit the remember buffer with @kbd{C-u C-u C-c C-c},
-i.e. specify a double prefix argument to @kbd{C-c C-c}.
+When you are finished preparing a note with @i{remember}, you have to press
+@kbd{C-c C-c} to file the note away.  If you have started the clock in the
+remember buffer, you will first be asked if you want to clock out
+now@footnote{To avoid this query, configure the variable
+@code{org-remember-clock-out-on-exit}.}.  If you answer @kbd{n}, the clock
+will continue to run after the note is filed away.
+
+The handler will then store the note in the file and under the headline
+specified in the template, or it will use the default file and headlines.
+The window configuration will be restored, sending you back to the working
+context before the call to @code{remember}.  To re-use the location found
+during the last call to @code{remember}, exit the remember buffer with
+@kbd{C-u C-u C-c C-c}, i.e. specify a double prefix argument to @kbd{C-c
+C-c}.
 
 If you want to store the note directly to a different place, use
 @kbd{C-u C-c C-c} instead to exit remember@footnote{Configure the
@@ -4898,7 +5019,9 @@
 subitem.@* By default, all level 1 headlines in the current buffer are
 considered to be targets, but you can have more complex definitions
 across a number of files.  See the variable @code{org-refile-targets}
-for details.
+for details.  If you would like to select a location via a file-pathlike
+completion along the outline path, see the variable
+@code{org-refile-use-outline-path}.
 @kindex C-u C-c C-w
 @item C-u C-c C-w
 Use the refile interface to jump to a heading.
@@ -5696,13 +5819,13 @@
 @c
 @kindex A
 @item A
-Move the subtree correspoding to the current entry to its @emph{Archive
+Move the subtree corresponding to the current entry to its @emph{Archive
 Sibling}.
 @c
 @kindex $
 @item $
 Archive the subtree corresponding to the current headline.  This means the
-entry will be moved to the configured archive locatin, most likely a
+entry will be moved to the configured archive location, most likely a
 different file.
 @c
 @kindex T
@@ -5747,6 +5870,21 @@
 @item C-c C-d
 Set a deadline for this item.
 @c
+@kindex k
+@item k
+Agenda actions, to set dates for selected items to the cursor date.
+This command also works in the calendar!  The command prompts for an
+additonal key:
+@example
+m   @r{Mark the entry at point for action.  You can also make entries}
+    @r{in Org files with @kbd{C-c C-x C-k}.}
+d   @r{Set the deadline of the marked entry to the date at point.}
+s   @r{Schedule the marked entry at the date at point.}
+r   @r{Call @code{org-remember} with the cursor date as default date.}
+@end example
+Press @kbd{r} afterwards to refresh the agenda and see the effect of the
+command.
+@c
 @kindex S-@key{right}
 @item S-@key{right}
 Change the time stamp associated with the current line by one day into the
@@ -6554,8 +6692,425 @@
 Org mode can also produce extracts in the iCalendar format.  Currently
 Org mode only supports export, not import of these different formats.
 
-When exporting, Org mode uses special conventions to enrich the output
-produced.  @xref{Text interpretation}, for more details.
+@menu
+* Markup rules::                Which structures are recognized?
+* Export options::              Per-file export settings
+* The export dispatcher::       How to access exporter commands
+* ASCII export::                Exporting to plain ASCII
+* HTML export::                 Exporting to HTML
+* LaTeX export::                Exporting to LaTeX
+* XOXO export::                 Exporting to XOXO
+* iCalendar export::            Exporting in iCalendar format
+@end menu
+
+@node Markup rules, Export options, Exporting, Exporting
+@section Markup rules
+
+When exporting Org mode documents,  the exporter tries to reflect the
+structure of the document as accurately as possible in the back-end.  Since
+export targets like HTML or La@TeX{} allow much richer formatting, Org mode
+has rules how to prepare text for rich export.  This section summarizes the
+markup rule used in an Org mode buffer.
+
+@menu
+* Document title::              How the document title is determined
+* Headings and sections::       The main structure of the exported document
+* Table of contents::           If, where, how to create a table of contents
+* Initial text::                Text before the first headline
+* Lists::                       Plain lists are exported
+* Paragraphs::                  What determines beginning and ending
+* Literal examples::            Source code and other examples
+* Include files::               Include the contents of a file during export
+* Tables exported::             Tables are exported richly
+* Footnotes::                   Numbers like [1]
+* Emphasis and monospace::      To bold or not to bold
+* TeX macros and LaTeX fragments::  Create special, rich export.
+* Horizontal rules::            A line across the page
+* Comment lines::               Some lines will not be exported
+@end menu
+
+@node Document title, Headings and sections, Markup rules, Markup rules
+@subheading Document title
+@cindex document title, markup rules
+
+@noindent
+The title of the exported document is taken from the special line
+
+@example
+#+TITLE: This is the title of the document
+@end example
+
+@noindent
+If this line does not exist, the title is derived from the first non-empty,
+non-comment line in the buffer.  If no such line exists, or if you have
+turned off exporting of the text before the first headline (see below), the
+title will be the file name without extension.
+
+If you are exporting only a subtree by marking is as the region, the heading
+of the subtree will become the title of the document.  If the subtree has a
+property @code{EXPORT_TITLE}, that will take precedence.
+
+@node Headings and sections, Table of contents, Document title, Markup rules
+@subheading Headings and sections
+@cindex headings and sections, markup rules
+
+The outline structure of the document as described in @ref{Document
+Structure} forms the basis for defining sections of the exported document.
+However, since the outline structure is also used for (for example) lists of
+tasks, only the first three outline levels will be used as headings.  Deeper
+levels will become itemized lists.  You can change the location of this
+switch, globally by setting the variable @code{org-headline-levels}, or on a
+per file basis with a line
+
+@example
+#+OPTIONS: H:4
+@end example
+
+@node Table of contents, Initial text, Headings and sections, Markup rules
+@subheading Table of contents
+@cindex table of contents, markup rules
+
+The table of contents is normally inserted directly before the first headline
+of the file.  If you would like to get it to a different location, insert the
+string @code{[TABLE-OF-CONTENTS]} on a line by itself at the desired
+location.  The depth of the table of contents is by default the same as the
+number of headline levels, but you can choose a smaller number or turn off
+the table of contents entirely by configuring the variable
+@code{org-export-with-toc}, or on a per-file basis with a line like
+
+@example
+#+OPTIONS: toc:2          (only to two levels in TOC)
+#+OPTIONS: toc:nil        (no TOC at all)
+@end example
+
+@node Initial text, Lists, Table of contents, Markup rules
+@subheading Text before the first headline
+@cindex text before first headline, markup rules
+@cindex #+TEXT
+
+Org mode normally exports the text before the first headline, and even uses
+the first line as the document title.  The text will be fully marked up.  If
+you need to include literal HTML or La@TeX{} code, use the special constructs
+described below in the sections for the individual exporters.
+
+Some people like to use the space before the first headline for setup and
+internal links and therefore would like to control the exported text before
+the first headline in a different way.  You can do so by setting the variable
+@code{org-export-skip-text-before-1st-heading} to @code{t}.  On a per-file
+basis, you can get the same effect with @samp{#+OPTIONS: skip:t}.
+
+@noindent
+If you still want to have some text before the first headline, use the
+@code{#+TEXT} construct:
+
+@example
+#+OPTIONS: skip:t
+#+TEXT: This text will go before the *first* headline.
+#+TEXT: [TABLE-OF-CONTENTS]
+#+TEXT: This goes between the table of contents and the first headline
+@end example
+
+@node Lists, Paragraphs, Initial text, Markup rules
+@subheading Lists
+@cindex lists, markup rules
+
+Plain lists as described in @ref{Plain lists} are translated to the back-ends
+syntax for such lists.  Most back-ends support unordered, ordered, and
+description lists.
+
+@node Paragraphs, Literal examples, Lists, Markup rules
+@subheading Paragraphs, line breaks, and quoting
+@cindex paragraphs, markup rules
+
+Paragraphs are separated by at least one empty line.  If you need to enforce
+a line break within a paragraph, use @samp{\\} at the end of a line.
+
+To keep the line breaks in a region, but otherwise use normal formatting, you
+can use this construct, which can also be used to format poetry.
+
+@example
+#+BEGIN_VERSE
+Everything should be made as simple as possible,
+but not any simpler -- Albert Einstein
+#+END_VERSE
+@end example
+
+When quoting a passage from another document, it is customary to format this
+as a paragraph that is indented on both the left and the right margin.  You
+can include quotations in Org mode documents like this:
+
+@example
+#+BEGIN_QUOTE
+Everything should be made as simple as possible,
+but not any simpler -- Albert Einstein
+#+END_QUOTE
+@end example
+
+
+@node Literal examples, Include files, Paragraphs, Markup rules
+@subheading Literal examples
+@cindex literal examples, markup rules
+
+You can include literal examples that should not be subjected to
+markup.  Such examples will be typeset in monospace, so this is well suited
+for source code and similar examples.
+@cindex #+BEGIN_EXAMPLE
+
+@example
+#+BEGIN_EXAMPLE
+Some example from a text file.
+#+END_EXAMPLE
+@end example
+
+For simplicity when using small examples, you can also start the example
+lines with a colon:
+
+@example
+: Some example from a text file.
+@end example
+
+@cindex formatting source code, markup rules
+If the example is source code from a programming language, or any other text
+that can be marked up by font-lock in Emacs, you can ask for the example to
+look like the fontified Emacs buffer@footnote{Currently this works only for
+the HTML back-end, and requires the @file{htmlize.el} package version 1.34 or
+later.}.  This is done with the @samp{src} block, where you also need to
+specify the name of the major mode that should be used to fontify the
+example:
+@cindex #+BEGIN_SRC
+
+@example
+#+BEGIN_SRC emacs-lisp
+(defun org-xor (a b)
+   "Exclusive or."
+   (if a (not b) b))
+#+END_SRC
+@end example
+
+@table @kbd
+@kindex C-c '
+@item C-c '
+Edit the source code example at point in its native mode.  This works by
+switching to an indirect buffer, narrowing the buffer and switching to the
+other mode.  You need to exit by pressing @kbd{C-c '} again.
+@end table
+
+
+@node Include files, Tables exported, Literal examples, Markup rules
+@subheading Include files
+@cindex include files, markup rules
+
+During export, you can include the content of another file.  For example, to
+include your .emacs file, you could use:
+@cindex #+INCLUDE
+
+@example
+#+INCLUDE: "~/.emacs" src emacs-lisp
+@end example
+
+The optional second and third parameter are the markup (@samp{quote},
+@samp{example}, or @samp{src}), and, if the markup is @samp{src}, the
+language for formatting the contents.  The markup is optional, if it is not
+given, the text will be assumed to be in Org mode format and will be
+processed normally.
+
+@table @kbd
+@kindex C-c '
+@item C-c '
+Visit the include file at point.
+@end table
+
+@node Tables exported, Footnotes, Include files, Markup rules
+@subheading Tables
+@cindex tables, markup rules
+
+Both the native Org mode tables (@pxref{Tables}) and tables formatted with
+the @file{table.el} package will be exported properly.  For Org mode tables,
+the lines before the first horizontal separator line will become table header
+lines.
+
+@node Footnotes, Emphasis and monospace, Tables exported, Markup rules
+@subheading Footnotes
+@cindex footnotes, markup rules
+@cindex @file{footnote.el}
+
+@kindex C-c !
+Numbers in square brackets are treated as footnote markers, and lines
+starting with such a marker are interpreted as the footnote itself.  You can
+use the Emacs package @file{footnote.el} to create footnotes@footnote{The
+@file{footnote} package uses @kbd{C-c !} to invoke its commands.  This
+binding conflicts with the Org mode command for inserting inactive time
+stamps.  You could use the variable @code{footnote-prefix} to switch
+footnotes commands to another key.  Or, if you are too used to this binding,
+you could use @code{org-replace-disputed-keys} and @code{org-disputed-keys}
+to change the settings in Org.}.  For example:
+
+@example
+The Org homepage[1] now looks a lot better than it used to.
+
+[1] The link is: http://orgmode.org
+@end example
+
+@node Emphasis and monospace, TeX macros and LaTeX fragments, Footnotes, Markup rules
+@subheading Emphasis and monospace
+
+@cindex underlined text, markup rules
+@cindex bold text, markup rules
+@cindex italic text, markup rules
+@cindex verbatim text, markup rules
+@cindex code text, markup rules
+@cindex strike-through text, markup rules
+You can make words @b{*bold*}, @i{/italic/}, _underlined_, @code{=code=}
+and @code{~verbatim~}, and, if you must, @samp{+strike-through+}.  Text
+in the code and verbatim string is not processed for Org mode specific
+syntax, it is exported verbatim.
+
+@node TeX macros and LaTeX fragments, Horizontal rules, Emphasis and monospace, Markup rules
+@subheading @TeX{} macros and La@TeX{} fragments
+@cindex LaTeX fragments, markup rules
+@cindex TeX macros, markup rules
+@cindex HTML entities
+@cindex LaTeX entities
+
+A @TeX{}-like syntax is used to specify special characters.  Where possible,
+these will be transformed into the native format of the exporter back-end.
+Strings like @code{\alpha} will be exported as @code{α} in the HTML
+output, and as @code{$\alpha$} in the La@TeX{} output.  Similarly,
+@code{\nbsp} will become @code{ } in HTML and @code{~} in La@TeX{}.
+This applies for a large number of entities, with names taken from both HTML
+and La@TeX{}, see the variable @code{org-html-entities} for the complete
+list.  If you are unsure about a name, use @kbd{M-@key{TAB}} for completion
+after having types the backslash and maybe a few characters
+(@pxref{Completion}).
+
+La@TeX{} fragments are converted into images for HTML export, and they are
+written literally into the La@TeX{} export.  See also @ref{Embedded LaTeX}.
+
+Finally, @samp{\-} is treated as a shy hyphen, and @samp{--}, @samp{---}, and
+@samp{...} are all converted into special commands creating hyphens of
+different lengths or a compact set of dots.
+
+@node Horizontal rules, Comment lines, TeX macros and LaTeX fragments, Markup rules
+@subheading  Horizontal rules
+@cindex horizontal rules, markup rules
+A line consisting of only dashes, and at least 5 of them, will be
+exported as a horizontal line (@samp{
} in HTML). + +@node Comment lines, , Horizontal rules, Markup rules +@subheading Comment lines +@cindex comment lines +@cindex exporting, not + +Lines starting with @samp{#} in column zero are treated as comments and will +never be exported. Also entire subtrees starting with the word +@samp{COMMENT} will never be exported. Finally, regions surrounded by +@samp{#+BEGIN_COMMENT} ... @samp{#+END_COMMENT} will not be exported. + +@table @kbd +@kindex C-c ; +@item C-c ; +Toggle the COMMENT keyword at the beginning of an entry. +@end table + +@node Export options, The export dispatcher, Markup rules, Exporting +@section Export options +@cindex options, for export + +@cindex completion, of option keywords +The exporter recognizes special lines in the buffer which provide +additional information. These lines may be put anywhere in the file. +The whole set of lines can be inserted into the buffer with @kbd{C-c +C-e t}. For individual lines, a good way to make sure the keyword is +correct is to type @samp{#+} and then use @kbd{M-@key{TAB}} completion +(@pxref{Completion}). + +@table @kbd +@kindex C-c C-e t +@item C-c C-e t +Insert template with export options, see example below. +@end table + +@cindex #+TITLE: +@cindex #+AUTHOR: +@cindex #+DATE: +@cindex #+EMAIL: +@cindex #+LANGUAGE: +@cindex #+TEXT: +@cindex #+OPTIONS: +@cindex #+LINK_UP: +@cindex #+LINK_HOME: +@example +#+TITLE: the title to be shown (default is the buffer name) +#+AUTHOR: the author (default taken from @code{user-full-name}) +#+DATE: A date, fixed, of a format string for @code{format-time-string} +#+EMAIL: his/her email address (default from @code{user-mail-address}) +#+LANGUAGE: language for HTML, e.g. @samp{en} (@code{org-export-default-language}) +#+TEXT: Some descriptive text to be inserted at the beginning. +#+TEXT: Several lines may be given. +#+OPTIONS: H:2 num:t toc:t \n:nil @@:t ::t |:t ^:t f:t TeX:t ... +#+LINK_UP: the ``up'' link of an exported page +#+LINK_HOME: the ``home'' link of an exported page +@end example + +@noindent +The OPTIONS line is a compact@footnote{If you want to configure many options +this way, you can use several OPTIONS lines.} form to specify export settings. Here +you can: +@cindex headline levels +@cindex section-numbers +@cindex table of contents +@cindex line-break preservation +@cindex quoted HTML tags +@cindex fixed-width sections +@cindex tables +@cindex @TeX{}-like syntax for sub- and superscripts +@cindex footnotes +@cindex special strings +@cindex emphasized text +@cindex @TeX{} macros +@cindex La@TeX{} fragments +@cindex author info, in export +@cindex time info, in export +@example +H: @r{set the number of headline levels for export} +num: @r{turn on/off section-numbers} +toc: @r{turn on/off table of contents, or set level limit (integer)} +\n: @r{turn on/off line-break-preservation} +@@: @r{turn on/off quoted HTML tags} +:: @r{turn on/off fixed-width sections} +|: @r{turn on/off tables} +^: @r{turn on/off @TeX{}-like syntax for sub- and superscripts. If} + @r{you write "^:@{@}", @code{a_@{b@}} will be interpreted, but} + @r{the simple @code{a_b} will be left as it is.} +-: @r{turn on/off conversion of special strings.} +f: @r{turn on/off footnotes like this[1].} +*: @r{turn on/off emphasized text (bold, italic, underlined)} +TeX: @r{turn on/off simple @TeX{} macros in plain text} +LaTeX: @r{turn on/off La@TeX{} fragments} +skip: @r{turn on/off skipping the text before the first heading} +author: @r{turn on/off inclusion of author name/email into exported file} +timestamp: @r{turn on/off inclusion creation time into exported file} +d: @r{turn on/off inclusion of drawers} +@end example + +These options take effect in both the HTML and La@TeX{} export, except +for @code{TeX} and @code{LaTeX}, which are respectively @code{t} and +@code{nil} for the La@TeX{} export. + +When exporting only a single subtree by selecting it with @kbd{C-c @@} before +calling an export command, the subtree can overrule some of the file's export +settings with properties @code{EXPORT_FILE_NAME}, @code{EXPORT_TITLE}, +@code{EXPORT_TEXT}, and @code{EXPORT_OPTIONS}. + +@node The export dispatcher, ASCII export, Export options, Exporting +@section The export dispatcher +@cindex dispatcher, for export commands + +All export commands can be reached using the export dispatcher, which is a +prefix key that prompts for an additional key specifying the command. +Normally the entire file is exported, but if there is an active region that +contains one outline tree, the first heading is used as document title and +the subtrees are exported. @table @kbd @kindex C-c C-e @@ -6566,6 +7121,10 @@ @code{org-export-run-in-background} is set, Org will run the command in the background if that seems useful for the specific command (i.e. commands that write to a file). +@kindex C-c C-e v +@item C-c C-e v +Like @kbd{C-c C-e}, but only export the text that is currently visible +(i.e. not hidden by outline visibility). @kindex C-u C-u C-c C-e @item C-u C-u C-c C-e Call an the exporter, but reverse the setting of @@ -6573,16 +7132,7 @@ not set, or force processing in the current Emacs process if st. @end table -@menu -* ASCII export:: Exporting to plain ASCII -* HTML export:: Exporting to HTML -* LaTeX export:: Exporting to LaTeX -* XOXO export:: Exporting to XOXO -* iCalendar export:: Exporting in iCalendar format -* Text interpretation:: How the exporter looks at the file -@end menu - -@node ASCII export, HTML export, Exporting, Exporting +@node ASCII export, HTML export, The export dispatcher, Exporting @section ASCII export @cindex ASCII export @@ -6598,9 +7148,10 @@ Export as ASCII file. For an org file @file{myfile.org}, the ASCII file will be @file{myfile.txt}. The file will be overwritten without warning. If there is an active region, only the region will be -exported. If the selected region is a single tree, the tree head will +exported. If the selected region is a single tree@footnote{To select the +current subtree, use @kbd{C-c @@}.}, the tree head will become the document title. If the tree head entry has or inherits an -@code{:EXPORT_FILE_NAME:} property, that name will be used for the +@code{EXPORT_FILE_NAME} property, that name will be used for the export. @kindex C-c C-e v a @item C-c C-e v a @@ -6635,7 +7186,7 @@ language, but with additional support for tables. @menu -* HTML Export commands:: How to invoke LaTeX export +* HTML Export commands:: How to invoke HTML export * Quoting HTML tags:: Using direct HTML in Org mode * Links:: Transformation of links for HTML * Images:: How to include images @@ -6652,13 +7203,13 @@ @table @kbd @kindex C-c C-e h @item C-c C-e h -Export as HTML file @file{myfile.html}. For an org file -@file{myfile.org}, the ASCII file will be @file{myfile.html}. The file -will be overwritten without warning. If there is an active region, only -the region will be exported. If the selected region is a single tree, -the tree head will become the document title. If the tree head entry -has or inherits an @code{:EXPORT_FILE_NAME:} property, that name will be -used for the export. +Export as HTML file @file{myfile.html}. For an org file @file{myfile.org}, +the ASCII file will be @file{myfile.html}. The file will be overwritten +without warning. If there is an active region, only the region will be +exported. If the selected region is a single tree@footnote{To select the +current subtree, use @kbd{C-c @@}.}, the tree head will become the document +title. If the tree head entry has or inherits an @code{EXPORT_FILE_NAME} +property, that name will be used for the export. @kindex C-c C-e b @item C-c C-e b Export as HTML file and immediately open it with a browser. @@ -6716,6 +7267,7 @@ @end example @noindent or +@cindex #+BEGIN_HTML @example #+BEGIN_HTML @@ -6818,19 +7370,20 @@ as well, press @kbd{?} for an overview of the available keys). The second view type is a @emph{folding} view much like Org provides it inside Emacs. The script is available at @url{http://orgmode.org/org-info.js} and you can -find the documentation for it at @url{http://orgmode.org/org-infojs.html}. -We are serving the script from our site, but if you use it a lot, you might -not want to be dependent on @url{orgmode.org} and prefer to install a local -copy on your own web server. - -To use the script, you need to make sure that the @file{org-infojs.el} module +find the documentation for it at +@url{http://orgmode.org/worg/code/org-info-js/org-info.js.html}. We are +serving the script from our site, but if you use it a lot, you might not want +to be dependent on @url{orgmode.org} and prefer to install a local copy on +your own web server. + +To use the script, you need to make sure that the @file{org-jsinfo.el} module gets loaded. It should be loaded by default, try @kbd{M-x customize-variable @key{RET} org-modules @key{RET}} to convince yourself that this is indeed the case. All it then takes to make use of the program is adding a single line to the Org file: @example -#+INFOSJ_OPT: view:info toc:nil +#+INFOJS_OPT: view:info toc:nil @end example @noindent @@ -6842,7 +7395,7 @@ path: @r{The path to the script. The default is to grab the script from} @r{@url{http://orgmode.org/org-info.js}, but you might want to have} @r{a local copy and use a path like @samp{../scripts/org-info.js}.} -view: @r{Initial view when website is first shown. Possible values are} +view: @r{Initial view when website is first shown. Possible values are:} info @r{Info-like interface with one section per page.} overview @r{Folding interface, initially showing only top-level.} content @r{Folding interface, starting with all headlines visible.} @@ -6856,6 +7409,8 @@ @r{Even when @code{nil}, you can always get to the toc with @kbd{i}.} tdepth: @r{The depth of the table of contents. The defaults are taken from} @r{the variables @code{org-headline-levels} and @code{org-export-with-toc}.} +ftoc: @r{Does the css of the page specify a fixed position for the toc?} + @r{If yes, the toc will never be displayed as a section.} ltoc: @r{Should there be short contents (children) in each section?} mouse: @r{Headings are highlighted when the mouse is over them. Should be} @r{@samp{underline} (default) or a background color like @samp{#cccccc}.} @@ -6885,7 +7440,13 @@ @table @kbd @kindex C-c C-e l @item C-c C-e l -Export as La@TeX{} file @file{myfile.tex}. +Export as La@TeX{} file @file{myfile.tex}. For an org file +@file{myfile.org}, the ASCII file will be @file{myfile.tex}. The file will +be overwritten without warning. If there is an active region, only the +region will be exported. If the selected region is a single tree@footnote{To +select the current subtree, use @kbd{C-c @@}.}, the tree head will become the +document title. If the tree head entry has or inherits an +@code{EXPORT_FILE_NAME} property, that name will be used for the export. @kindex C-c C-e L @item C-c C-e L Export to a temporary buffer, do not create a file. @@ -6933,6 +7494,7 @@ @end example @noindent or +@cindex #+BEGIN_LaTeX @example #+BEGIN_LaTeX @@ -6940,8 +7502,6 @@ #+END_LaTeX @end example - - @node Sectioning structure, , Quoting LaTeX code, LaTeX export @subsection Sectioning structure @cindex LaTeX class @@ -6973,7 +7533,7 @@ Export only the visible part of the document. @end table -@node iCalendar export, Text interpretation, XOXO export, Exporting +@node iCalendar export, , XOXO export, Exporting @section iCalendar export @cindex iCalendar export @@ -6985,6 +7545,16 @@ iCalendar format. If you also want to have TODO entries included in the export, configure the variable @code{org-icalendar-include-todo}. +The iCalendar standard requires each entry to have a globally unique +identifier (UID). Org creates these identifiers during export. If you set +the variable @code{org-icalendar-store-UID}, the UID will be stored in the +@code{:ID:} property of the entry and re-used next time you report this +entry. Since a single entry can give rise to multiple iCalendar entries (as +a timestamp, a deadline, a scheduled item, and as a TODO item), Org adds +prefixes to the UID, depending on what triggered the inclusion of the entry. +In this way the UID remains unique, but a synchronization program can still +figure out from which entry all the different instances originate. + @table @kbd @kindex C-c C-e i @item C-c C-e i @@ -7010,294 +7580,6 @@ How this calendar is best read and updated, depends on the application you are using. The FAQ covers this issue. - -@node Text interpretation, , iCalendar export, Exporting -@section Text interpretation by the exporter - -The exporter backends interpret additional structure in the Org file -in order to produce better output. - -@menu -* Comment lines:: Some lines will not be exported -* Initial text:: Text before the first headline -* Footnotes:: Numbers like [1] -* Quoted examples:: Inserting quoted chunks of text -* Enhancing text:: Subscripts, symbols and more -* Export options:: How to influence the export settings -@end menu - -@node Comment lines, Initial text, Text interpretation, Text interpretation -@subsection Comment lines -@cindex comment lines -@cindex exporting, not - -Lines starting with @samp{#} in column zero are treated as comments -and will never be exported. Also entire subtrees starting with the -word @samp{COMMENT} will never be exported. - -@table @kbd -@kindex C-c ; -@item C-c ; -Toggle the COMMENT keyword at the beginning of an entry. -@end table - -@node Initial text, Footnotes, Comment lines, Text interpretation -@subsection Text before the first headline - -Org mode normally ignores any text before the first headline when -exporting, leaving this region for internal links to speed up navigation -etc. However, in publishing-oriented files, you might want to have some -text before the first headline, like a small introduction, special HTML -code with a navigation bar, etc. You can ask to have this part of the -file exported as well by setting the variable -@code{org-export-skip-text-before-1st-heading} to @code{nil}. On a -per-file basis, you can get the same effect with - -@example -#+OPTIONS: skip:nil -@end example - -The text before the first headline will be fully processed -(@pxref{Enhancing text}), and the first non-comment line becomes the -title of the exported document. If you need to include literal HTML, -use the special constructs described in @ref{Quoting HTML tags}. The -table of contents is normally inserted directly before the first -headline of the file. If you would like to get it to a different -location, insert the string @code{[TABLE-OF-CONTENTS]} on a line by -itself at the desired location. - -Finally, if you want to use the space before the first headline for -internal purposes, but @emph{still} want to place something before the -first headline when exporting the file, you can use the @code{#+TEXT} -construct: - -@example -#+OPTIONS: skip:t -#+TEXT: This text will go before the *first* headline. -#+TEXT: We place the table of contents here: -#+TEXT: [TABLE-OF-CONTENTS] -#+TEXT: This goes between the table of contents and the first headline -@end example - -@node Footnotes, Quoted examples, Initial text, Text interpretation -@subsection Footnotes -@cindex footnotes -@cindex @file{footnote.el} - -Numbers in square brackets are treated as footnotes, so that you can use -the Emacs package @file{footnote.el} to create footnotes. For example: - -@example -The Org homepage[1] clearly needs help from -a good web designer. - -[1] The link is: http://orgmode.org -@end example - -@noindent -@kindex C-c ! -Note that the @file{footnote} package uses @kbd{C-c !} to invoke its -commands. This binding conflicts with the Org mode command for -inserting inactive time stamps. You could use the variable -@code{footnote-prefix} to switch footnotes commands to another key. Or, -if you are too used to this binding, you could use -@code{org-replace-disputed-keys} and @code{org-disputed-keys} to change -the settings in Org. - -@node Quoted examples, Enhancing text, Footnotes, Text interpretation -@subsection Quoted examples -@cindex quoted examples -@cindex examples, quoted -@cindex text, fixed width -@cindex fixed width text - -When writing technical documents, you often need to insert examples that -are not further interpreted by Org mode. For historical reasons, there -are several ways to do this: - -@itemize @bullet -@item -If a headline starts with the word @samp{QUOTE}, the text below the -headline will be typeset as fixed-width, to allow quoting of computer -codes etc. -@item -Lines starting with @samp{:} are also typeset in fixed-width font. -@table @kbd -@kindex C-c : -@item C-c : -Toggle fixed-width for entry (QUOTE) or region, see below. -@end table -@item -Finally, text between -@example -#+BEGIN_EXAMPLE -quoted text -#+END_EXAMPLE -@end example -will also be exported in this way. -@end itemize - - -@node Enhancing text, Export options, Quoted examples, Text interpretation -@subsection Enhancing text for export -@cindex enhancing text -@cindex richer text - -Some of the export backends of Org mode allow for sophisticated text -formatting, this is true in particular for the HTML and La@TeX{} -backends. Org mode has a number of typing conventions that allow to -produce a richly formatted output. - -@itemize @bullet - -@cindex hand-formatted lists -@cindex lists, hand-formatted -@item -Plain lists @samp{-}, @samp{*} or @samp{+} as bullet, or with @samp{1.} -or @samp{2)} as enumerator will be recognized and transformed if the -backend supports lists. See @xref{Plain lists}. - -@cindex underlined text -@cindex bold text -@cindex italic text -@cindex verbatim text -@item -You can make words @b{*bold*}, @i{/italic/}, _underlined_, @code{=code=} -and @code{~verbatim~}, and, if you must, @samp{+strikethrough+}. Text -in the code and verbatim string is not processed for Org mode specific -syntax, it is exported verbatim. - -@cindex horizontal rules, in exported files -@item -A line consisting of only dashes, and at least 5 of them, will be -exported as a horizontal line (@samp{
} in HTML). - -@cindex LaTeX fragments, export -@cindex TeX macros, export -@item -Many @TeX{} macros and entire La@TeX{} fragments are converted into HTML -entities or images (@pxref{Embedded LaTeX}). - -@cindex tables, export -@item -Tables are transformed into native tables under the exporter, if the -export backend supports this. Data fields before the first horizontal -separator line will be formatted as table header fields. - -@cindex fixed width -@item -If a headline starts with the word @samp{QUOTE}, the text below the -headline will be typeset as fixed-width, to allow quoting of computer -codes etc. Lines starting with @samp{:} are also typeset in fixed-width -font. -@table @kbd -@kindex C-c : -@item C-c : -Toggle fixed-width for entry (QUOTE) or region, see below. -@end table -Finally, text between -@example -#+BEGIN_EXAMPLE -quoted text -#+END_EXAMPLE -@end example -will also be exported in this way. - -@cindex linebreak, forced -@item -A double backslash @emph{at the end of a line} enforces a line break at -this position. - -@cindex HTML entities, LaTeX entities -@item -Strings like @code{\alpha} will be exported as @code{α}, in the -HTML output. These strings are exported as @code{$\alpha$} in the -La@TeX{} output. Similarly, @code{\nbsp} will become @code{ } in -HTML and in La@TeX{}. This applies for a long list of entities, see -the variable @code{org-html-entities} for the complete list. -@c FIXME -@end itemize - -If these conversions conflict with your habits of typing ASCII text, -they can all be turned off with corresponding variables. See the -customization group @code{org-export-general}, and the following section -which explains how to set export options with special lines in a -buffer. - - -@node Export options, , Enhancing text, Text interpretation -@subsection Export options -@cindex options, for export - -@cindex completion, of option keywords -The exporter recognizes special lines in the buffer which provide -additional information. These lines may be put anywhere in the file. -The whole set of lines can be inserted into the buffer with @kbd{C-c -C-e t}. For individual lines, a good way to make sure the keyword is -correct is to type @samp{#+} and then use @kbd{M-@key{TAB}} completion -(@pxref{Completion}). - -@table @kbd -@kindex C-c C-e t -@item C-c C-e t -Insert template with export options, see example below. -@end table - -@example -#+TITLE: the title to be shown (default is the buffer name) -#+AUTHOR: the author (default taken from @code{user-full-name}) -#+DATE: A date, fixed, of a format string for @code{format-time-string} -#+EMAIL: his/her email address (default from @code{user-mail-address}) -#+LANGUAGE: language for HTML, e.g. @samp{en} (@code{org-export-default-language}) -#+TEXT: Some descriptive text to be inserted at the beginning. -#+TEXT: Several lines may be given. -#+OPTIONS: H:2 num:t toc:t \n:nil @@:t ::t |:t ^:t f:t TeX:t ... -@end example - -@noindent -The OPTIONS line is a compact form to specify export settings. Here -you can: -@cindex headline levels -@cindex section-numbers -@cindex table of contents -@cindex linebreak preservation -@cindex quoted HTML tags -@cindex fixed-width sections -@cindex tables -@cindex @TeX{}-like syntax for sub- and superscripts -@cindex footnotes -@cindex special strings -@cindex emphasized text -@cindex @TeX{} macros -@cindex La@TeX{} fragments -@cindex author info, in export -@cindex time info, in export -@example -H: @r{set the number of headline levels for export} -num: @r{turn on/off section-numbers} -toc: @r{turn on/off table of contents, or set level limit (integer)} -\n: @r{turn on/off linebreak-preservation} -@@: @r{turn on/off quoted HTML tags} -:: @r{turn on/off fixed-width sections} -|: @r{turn on/off tables} -^: @r{turn on/off @TeX{}-like syntax for sub- and superscripts. If} - @r{you write "^:@{@}", @code{a_@{b@}} will be interpreted, but} - @r{the simple @code{a_b} will be left as it is.} --: @r{turn on/off conversion of special strings.} -f: @r{turn on/off foototes like this[1].} -*: @r{turn on/off emphasized text (bold, italic, underlined)} -TeX: @r{turn on/off simple @TeX{} macros in plain text} -LaTeX: @r{turn on/off La@TeX{} fragments} -skip: @r{turn on/off skipping the text before the first heading} -author: @r{turn on/off inclusion of author name/email into exported file} -timestamp: @r{turn on/off inclusion creation time into exported file} -d: @r{turn on/off inclusion of drawers} -@end example - -These options take effect in both the HTML and La@TeX{} export, except -for @code{TeX} and @code{LaTeX}, which are respectively @code{t} and -@code{nil} for the La@TeX{} export. - @node Publishing, Miscellaneous, Exporting, Top @chapter Publishing @cindex publishing @@ -7383,8 +7665,11 @@ @item @code{:publishing-directory} @tab Directory (possibly remote) where output files will be published. @item @code{:preparation-function} -@tab Function called before starting publishing process, for example to +@tab Function called before starting the publishing process, for example to run @code{make} for updating files to be published. +@item @code{:completion-function} +@tab Function called after finishing the publishing process, for example to +change permissions of the resulting files. @end multitable @noindent @@ -7651,7 +7936,7 @@ functions normally only publish changed files. You can override this and force publishing of all files by giving a prefix argument. -@node Miscellaneous, Extensions and Hacking, Publishing, Top +@node Miscellaneous, Extensions, Publishing, Top @chapter Miscellaneous @menu @@ -7769,6 +8054,9 @@ line set the local variable @code{org-table-formula-constants-local}. The global version of this variable is @code{org-table-formula-constants}. +@item #+FILETAGS: :tag1:tag2:tag3: +Set tags that can be inherited by any entry in the file, including the +top-level entries. @item #+DRAWERS: NAME1 ..... Set the file-local set of drawers. The corresponding global variable is @code{org-drawers}. @@ -7783,6 +8071,14 @@ @item #+PROPERTY: Property_Name Value This line sets a default inheritance value for entries in the current buffer, most useful for specifying the allowed values of a property. +@item #+SETUPFILE: file +This line defines a file that holds more in-buffer setup. Normally this is +entirely ignored. Only when the buffer is parsed for option-setting lines +(i.e. when starting Org mode for a file, when pressing @kbd{C-c C-c} in a +settings line, or when exporting), then the contents of this file are parsed +as if they had been included in the buffer. In particlar, the file can be +any other Org mode file with internal setup. You can visit the file the +cursor is in the line with @kbd{C-c '}. @item #+STARTUP: This line sets options to be used at startup of Org mode, when an Org file is being visited. The first set of options deals with the @@ -7828,10 +8124,10 @@ lognoteclock-out @r{record a note when clocking out} nolognoteclock-out @r{don't record a note when clocking out} @end example -Here are the options for hiding leading stars in outline headings. The -corresponding variables are @code{org-hide-leading-stars} and -@code{org-odd-levels-only}, both with a default setting @code{nil} -(meaning @code{showstars} and @code{oddeven}). +Here are the options for hiding leading stars in outline headings, and for +indenting outlines. The corresponding variables are +@code{org-hide-leading-stars} and @code{org-odd-levels-only}, both with a +default setting @code{nil} (meaning @code{showstars} and @code{oddeven}). @cindex @code{hidestars}, STARTUP keyword @cindex @code{showstars}, STARTUP keyword @cindex @code{odd}, STARTUP keyword @@ -7839,6 +8135,8 @@ @example hidestars @r{make all but one of the stars starting a headline invisible.} showstars @r{show all stars starting a headline} +indent @r{virtual indentation according to outline level} +noindent @r{no virtual indentation according to outline level} odd @r{allow only odd outline levels (1,3,...)} oddeven @r{allow all outline levels} @end example @@ -7925,56 +8223,73 @@ @node Clean view, TTY keys, The very busy C-c C-c key, Miscellaneous @section A cleaner outline view @cindex hiding leading stars +@cindex dynamic indentation +@cindex odd-levels-only outlines @cindex clean outline view -Some people find it noisy and distracting that the Org headlines -are starting with a potentially large number of stars. For example -the tree from @ref{Headlines}: - -@example -* Top level headline -** Second level -*** 3rd level - some text -*** 3rd level - more text -* Another top level headline +Some people find it noisy and distracting that the Org headlines are starting +with a potentially large number of stars, and that text below the headlines +is not indented. This is not really a problem when you are writing a book +where the outline headings are really section headlines. However, in a more +list-oriented outline, it is clear that an indented structure is a lot +cleaner, as can be seen by comparing the two columns in the following +example: + +@example +@group +* Top level headline | * Top level headline +** Second level | * Second level +*** 3rd level | * 3rd level +some text | some text +*** 3rd level | * 3rd level +more text | more text +* Another top level headline | * Another top level headline +@end group @end example @noindent -Unfortunately this is deeply ingrained into the code of Org and -cannot be easily changed. You can, however, modify the display in such -a way that all leading stars become invisible and the outline more easy -to read. To do this, customize the variable -@code{org-hide-leading-stars} like this: - -@lisp -(setq org-hide-leading-stars t) -@end lisp - -@noindent -or change this on a per-file basis with one of the lines (anywhere in -the buffer) +It is non-trivial to make such a look work in Emacs, but Org contains three +separate features that, combined, achieve just that. + +@enumerate +@item +@emph{Indentation of text below headlines}@* +You may indent text below each headline to make the left boundary line up +with the headline, like + +@example +*** 3rd level + more text, now indented +@end example + +A good way to get this indentation is by hand, and Org supports this with +paragraph filling, line wrapping, and structure editing@footnote{See also the +variable @code{org-adapt-indentation}.} preserving or adapting the +indentation appropriate. A different approach would be to have a way to +automatically indent lines according to outline structure by adding overlays +or text properties. But I have not yet found a robust and efficient way to +do this in large files. + +@item +@emph{Hiding leading stars}@* You can modify the display in such a way that +all leading stars become invisible. To do this in a global way, configure +the variable @code{org-hide-leading-stars} or change this on a per-file basis +with @example #+STARTUP: showstars #+STARTUP: hidestars @end example -@noindent -Press @kbd{C-c C-c} with the cursor in a @samp{STARTUP} line to activate -the modifications. - -With stars hidden, the tree becomes: - -@example +With hidden stars, the tree becomes: + +@example +@group * Top level headline * Second level * 3rd level - some text - * 3rd level - more text -* Another top level headline + ... +@end group @end example @noindent @@ -7986,32 +8301,14 @@ stars are @i{almost} invisible, for example using the color @code{grey90} on a white background. -Things become cleaner still if you skip all the even levels and use only -odd levels 1, 3, 5..., effectively adding two stars to go from one -outline level to the next: - -@example -* Top level headline - * Second level - * 3rd level - some text - * 3rd level - more text -* Another top level headline -@end example - -@noindent -In order to make the structure editing and export commands handle this -convention correctly, use - -@lisp -(setq org-odd-levels-only t) -@end lisp - -@noindent -or set this on a per-file basis with one of the following lines (don't -forget to press @kbd{C-c C-c} with the cursor in the startup line to -activate changes immediately). +@item +Things become cleaner still if you skip all the even levels and use only odd +levels 1, 3, 5..., effectively adding two stars to go from one outline level +to the next. In this way we get the outline view shown at the beginning of +this section. In order to make the structure editing and export commands +handle this convention correctly, configure the variable +@code{org-odd-levels-only}, or set this on a per-file basis with one of the +following lines: @example #+STARTUP: odd @@ -8022,6 +8319,7 @@ double-star-per-level convention with @kbd{M-x org-convert-to-odd-levels RET} in that file. The reverse operation is @kbd{M-x org-convert-to-oddeven-levels}. +@end enumerate @node TTY keys, Interaction, Clean view, Miscellaneous @section Using Org on a tty @@ -8240,39 +8538,108 @@ may use the command @code{org-table-iterate} (@kbd{C-u C-c *}) to recalculate until convergence. @item -A single letter cannot be made bold, for example @samp{*a*}. -@item The exporters work well, but could be made more efficient. @end itemize -@node Extensions and Hacking, History and Acknowledgments, Miscellaneous, Top -@appendix Extensions, Hooks and Hacking - -This appendix lists extensions for Org written by other authors. -It also covers some aspects where users can extend the functionality of +@node Extensions, Hacking, Miscellaneous, Top +@appendix Extensions + +This appendix lists the extension modules that have been written for Org. +Many of these extensions live in the @file{contrib} directory of the Org +distribution, others are available somewhere on the web. + +@menu +* Extensions in the contrib directory:: These come with the Org distro +* Other extensions:: These you have to find on the web. +@end menu + +@node Extensions in the contrib directory, Other extensions, Extensions, Extensions +@section Extensions in the @file{contrib} directory + +@table @asis +@item @file{org-annotate-file.el} by @i{Philip Jackson} + Annotate a file with org syntax, in a separate file, with links back to + the annotated file. +@item @file{org-annotation-helper.el} by @i{Bastien Guerry and Daniel E. German} + Call @i{remember} directly from Firefox/Opera, or from Adobe Reader. + When activating a special link or bookmark, Emacs receives a trigger to + create a note with a link back to the website. Requires some setup, a + detailes description is in + @file{contrib/packages/org-annotation-helper}. +@item @file{org-bookmark.el} by @i{Tokuya Kameshima} + Support for links to Emacs bookmarks. +@item @file{org-depend.el} by @i{Carsten Dominik} + TODO dependencies for Org-mode. Make TODO state changes in one entry + trigger changes in another, or be blocked by the state of another + entry. Also, easily create chains of TODO items with exactly one + active item at any time. +@item @file{org-elisp-symbol.el} by @i{Bastien Guerry} + Org links to emacs-lisp symbols. This can create annotated links that + exactly point to the definition location of a variable of function. +@item @file{org-eval.el} by @i{Carsten Dominik} + The @code{} tag, adapted from Emacs Wiki and Emacs Muse, allows + to include text in a document that is the result of evaluating some + code. Other scripting languages like @code{perl} can be supported with + this package as well. +@item @file{org-expiry.el} by @i{Bastien Guerry} + Expiry mechanism for Org entries. +@item @file{org-indent.el} by @i{Carsten Dominik} + Dynamic indentation of Org outlines. The plan is to indent an outline + according to level, but so far this is too hard for a proper and stable + implementation. Still, it works somewhat. +@item @file{org-interactive-query.el} by @i{Christopher League} + Interactive modification of tags queries. After running a general + query in Org, this package allows to narrow down the results by adding + more tags or keywords. +@item @file{org-mairix.el} by @i{Georg C. F. Greve} + Hook mairix search into Org for different MUAs. +@item @file{org-man.el} by @i{Carsten Dominik} + Support for links to manpages in Org-mode. +@item @file{org-mtags.el} by @i{Carsten Dominik} + Support for some Muse-like tags in Org-mode. This package allows you + to write @code{} and @code{} and other syntax copied from + Emacs Muse, right inside an Org file. The goal here is to make it easy + to publish the same file using either org-publish or Muse. +@item @file{org-panel.el} by @i{Lennard Borgman} + Simplified and display-aided access to some Org commands. +@item @file{org-registry.el} by @i{Bastien Guerry} + A registry for Org links, to find out from where links point to a given + file or location. +@item @file{org2rem.el} by @i{Bastien Guerry} + Convert org appointments into reminders for the @file{remind} program. +@item @file{org-screen.el} by @i{Andrew Hyatt} + Visit screen sessions through Org-mode links. +@item @file{org-toc.el} by @i{Bastien Guerry} + Table of contents in a separate buffer, with fast access to sections + and easy visibility cycling. +@item @file{orgtbl-sqlinsert.el} by @i{Jason Riedy} + Convert Org-mode tables to SQL insertions. Documentation for this can + be found on the Worg pages. +@end table + + +@node Other extensions, , Extensions in the contrib directory, Extensions +@section Other extensions + +@i{TO BE DONE} + +@node Hacking, History and Acknowledgments, Extensions, Top +@appendix Hacking + +This appendix covers some aspects where users can extend the functionality of Org. @menu -* Extensions:: Existing 3rd-party extensions * Adding hyperlink types:: New custom link types * Tables in arbitrary syntax:: Orgtbl for LaTeX and other programs * Dynamic blocks:: Automatically filled blocks * Special agenda views:: Customized views * Using the property API:: Writing programs that use entry properties +* Using the mapping API:: Mapping over all or selected entries @end menu -@node Extensions, Adding hyperlink types, Extensions and Hacking, Extensions and Hacking -@section Third-party extensions for Org -@cindex extension, third-party - -There are lots of extensions that have been written by other people. Most of -them have either been integrated into Org by now, or they can be found in the -Org distribution, in the @file{contrib} directory. The list has gotten too -long to cover in any detail here, but there is a seaparate manual for these -extensions. - -@node Adding hyperlink types, Tables in arbitrary syntax, Extensions, Extensions and Hacking +@node Adding hyperlink types, Tables in arbitrary syntax, Hacking, Hacking @section Adding hyperlink types @cindex hyperlinks, adding new types @@ -8369,7 +8736,7 @@ the link description when the link is later inserted into an Org buffer with @kbd{C-c C-l}. -@node Tables in arbitrary syntax, Dynamic blocks, Adding hyperlink types, Extensions and Hacking +@node Tables in arbitrary syntax, Dynamic blocks, Adding hyperlink types, Hacking @section Tables and lists in arbitrary syntax @cindex tables, in other modes @cindex lists, in other modes @@ -8436,7 +8803,9 @@ @table @code @item :skip N -Skip the first N lines of the table. Hlines do count! +Skip the first N lines of the table. Hlines do count as separate lines for +this parameter! + @item :skipcols (n1 n2 ...) List of columns that should be skipped. If the table has a column with calculation marks, that column is automatically discarded as well. @@ -8482,6 +8851,7 @@ be prompted for a table name, lets say we use @samp{salesfigures}. You will then get the following template: +@cindex #+ORGTBL: SEND @example % BEGIN RECEIVE ORGTBL salesfigures % END RECEIVE ORGTBL salesfigures @@ -8550,7 +8920,7 @@ The La@TeX{} translator function @code{orgtbl-to-latex} is already part of Orgtbl mode. It uses a @code{tabular} environment to typeset the table and marks horizontal lines with @code{\hline}. Furthermore, it -interprets the following parameters: +interprets the following parameters (see also @ref{Translator functions}): @table @code @item :splice nil/t @@ -8581,15 +8951,15 @@ @cindex HTML, and Orgtbl mode @cindex translator function -Orgtbl mode has several translator functions built-in: -@code{orgtbl-to-latex}, @code{orgtbl-to-html}, and -@code{orgtbl-to-texinfo}. Except for @code{orgtbl-to-html}@footnote{The -HTML translator uses the same code that produces tables during HTML -export.}, these all use a generic translator, @code{orgtbl-to-generic}. -For example, @code{orgtbl-to-latex} itself is a very short function that -computes the column definitions for the @code{tabular} environment, -defines a few field and line separators and then hands over to the -generic translator. Here is the entire code: +Orgtbl mode has several translator functions built-in: @code{orgtbl-to-csv} +(comma-separated values), @code{orgtbl-to-tsv} (TAB-separated values) +@code{orgtbl-to-latex}, @code{orgtbl-to-html}, and @code{orgtbl-to-texinfo}. +Except for @code{orgtbl-to-html}@footnote{The HTML translator uses the same +code that produces tables during HTML export.}, these all use a generic +translator, @code{orgtbl-to-generic}. For example, @code{orgtbl-to-latex} +itself is a very short function that computes the column definitions for the +@code{tabular} environment, defines a few field and line separators and then +hands over to the generic translator. Here is the entire code: @lisp @group @@ -8692,7 +9062,7 @@ Pressing `C-c C-c' on @code{a new house} and will insert the converted La@TeX{} list between the two marker lines. -@node Dynamic blocks, Special agenda views, Tables in arbitrary syntax, Extensions and Hacking +@node Dynamic blocks, Special agenda views, Tables in arbitrary syntax, Hacking @section Dynamic blocks @cindex dynamic blocks @@ -8705,6 +9075,7 @@ to the block and can also specify parameters for the function producing the content of the block. +#+BEGIN:dynamic block @example #+BEGIN: myblock :parameter1 value1 :parameter2 value2 ... @@ -8756,7 +9127,7 @@ written in a way that is does nothing in buffers that are not in @code{org-mode}. -@node Special agenda views, Using the property API, Dynamic blocks, Extensions and Hacking +@node Special agenda views, Using the property API, Dynamic blocks, Hacking @section Special agenda views @cindex agenda views, user-defined @@ -8838,7 +9209,7 @@ (org-agenda-overriding-header "Projects waiting for something: ")))) @end lisp -@node Using the property API, , Special agenda views, Extensions and Hacking +@node Using the property API, Using the mapping API, Special agenda views, Hacking @section Using the property API @cindex API, for properties @cindex properties, API @@ -8896,7 +9267,105 @@ values and check if VALUE is in this list. @end defun -@node History and Acknowledgments, Main Index, Extensions and Hacking, Top +@node Using the mapping API, , Using the property API, Hacking +@section Using the mapping API +@cindex API, for mapping +@cindex mapping entries, API + +Org has sophisticated mapping capabilities to find all entries satisfying +certain criteria. Internally, this functionality is used to produce agenda +views, but there is also an API that can be used to execute arbitrary +functions for each or selected entries. The main entry point for this API +is: + +@defun org-map-entries func &optional match scope &rest skip +Call FUNC at each headline selected by MATCH in SCOPE. + +FUNC is a function or a lisp form. The function will be called without +arguments, with the cursor positioned at the beginning of the headline. +The return values of all calls to the function will be collected and +returned as a list. + +MATCH is a tags/property/todo match as it is used in the agenda tags view. +Only headlines that are matched by this query will be considered during +the iteration. When MATCH is nil or t, all headlines will be +visited by the iteration. + +SCOPE determines the scope of this command. It can be any of: + +@example +nil @r{the current buffer, respecting the restriction if any} +tree @r{the subtree started with the entry at point} +file @r{the current buffer, without restriction} +file-with-archives + @r{the current buffer, and any archives associated with it} +agenda @r{all agenda files} +agenda-with-archives + @r{all agenda files with any archive files associated with them} +(file1 file2 ...) + @r{if this is a list, all files in the list will be scanned} +@end example + +The remaining args are treated as settings for the skipping facilities of +the scanner. The following items can be given here: + +@example +archive @r{skip trees with the archive tag} +comment @r{skip trees with the COMMENT keyword} +function or Lisp form + @r{will be used as value for @code{org-agenda-skip-function},} + @r{so whenever the the function returns t, FUNC} + @r{will not be called for that entry and search will} + @r{continue from the point where the function leaves it} +@end example +@end defun + +The function given to that mapping routine can really do anything you like. +It can uce the property API (@pxref{Using the property API}) to gather more +information about the entry, or in order to change metadate in the entry. +Here are a couple of functions that might be handy: + +@defun org-todo &optional arg +Change the TODO state of the entry, see the docstring of the functions for +the many possible values for the argument ARG. +@end defun + +@defun org-priority &optional action +Change the priority of the entry, see the docstring of this function for the +possible values for ACTION. +@end defun + +@defun org-toggle-tag tag &optional onoff +Toggle the tag TAG in the current entry. Setting ONOFF to either @code{on} +or @code{off} will not toggle tag, but ensure that it is either on or off. +@end defun + +@defun org-promote +Promote the current entry. +@end defun + +@defun org-demote +Demote the current entry. +@end defun + +Here is a simple example that will turn all entries in the current file with +a tag @code{TOMORROW} into TODO entries with the keyword @code{UPCOMING}. +Entries in comment trees and in archive trees will be ignored. + +@lisp +(org-map-entries + '(org-todo "UPCOMING") + "+TOMORROW" 'file 'archive 'comment) +@end lisp + +The following example counts the number of entries with TODO keyword +@code{WAITING}, in all agenda files. + +@lisp +(length (org-map-entries t "/+WAITING" nil 'agenda)) +@end lisp + +@node History and Acknowledgments, Main Index, Hacking, Top @appendix History and Acknowledgments @cindex acknowledgments @cindex history @@ -8940,6 +9409,9 @@ @item @i{Thomas Baumann} wrote @file{org-bbdb.el} and @file{org-mhe.el}. @item +@i{Christophe Bataillon} created the great unicorn logo that we use on the +Org-mode website. +@item @i{Alex Bochannek} provided a patch for rounding time stamps. @item @i{Charles Cave}'s suggestion sparked the implementation of templates @@ -9039,15 +9511,16 @@ @i{Frank Ruell} solved the mystery of the @code{keymapp nil} bug, a conflict with @file{allout.el}. @item -@i{Jason Riedy} sent a patch to fix a bug with export of TODO keywords. -@item -@i{Philip Rooke} created the Org reference card and provided lots -of feedback. +@i{Jason Riedy} generalized the send-receive mechanism for orgtbl tables with +extensive patches. +@item +@i{Philip Rooke} created the Org reference card, provided lots +of feedback, developed and applied standards to the Org documentation. @item @i{Christian Schlauer} proposed angular brackets around links, among other things. @item -Linking to VM/BBDB/Gnus was inspired by @i{Tom Shannon}'s +Linking to VM/BBDB/Gnus was first inspired by @i{Tom Shannon}'s @file{organizer-mode.el}. @item @i{Ilya Shlyakhter} proposed the Archive Sibling. @@ -9057,8 +9530,8 @@ @item @i{Dale Smith} proposed link abbreviations. @item -@i{Adam Spiers} asked for global linking commands and inspired the link -extension system. support mairix. +@i{Adam Spiers} asked for global linking commands, inspired the link +extension system, added support for mairix, and proposed the mapping API. @item @i{David O'Toole} wrote @file{org-publish.el} and drafted the manual chapter about publishing. @@ -9072,12 +9545,11 @@ @i{David Wainberg} suggested archiving, and improvements to the linking system. @item -@i{John Wiegley} wrote @file{emacs-wiki.el} and @file{planner.el}. The -development of Org was fully independent, and both systems are really -different beasts in their basic ideas and implementation details. I later -looked at John's code, however, and learned from his implementation of (i) -links where the link itself is hidden and only a description is shown, and -(ii) popping up a calendar to select a date. John has also contributed a +@i{John Wiegley} wrote @file{emacs-wiki.el}, @file{planner.el}, and +@file{muse.el}, which have similar goals as Org. Initially the +development of Org was fully independent because I was not aware of the +existence of these packages. But with time I have accasionally looked +at John's code and learned a lot from it. John has also contributed a number of great ideas and patches directly to Org, including the file @code{org-mac-message.el}' @item diff -r a678c02d0c40 -r c1ef445563bb etc/refcards/orgcard.tex --- a/etc/refcards/orgcard.tex Tue Jun 17 11:28:06 2008 +0000 +++ b/etc/refcards/orgcard.tex Tue Jun 17 15:22:00 2008 +0000 @@ -1,5 +1,5 @@ % Reference Card for Org Mode -\def\orgversionnumber{6.02b} +\def\orgversionnumber{6.05a} \def\versionyear{2008} % latest update \def\year{2008} % latest copyright year @@ -309,10 +309,8 @@ \key{insert new heading after subtree}{C-RET} \key{insert new TODO entry/checkbox item}{M-S-RET} -\key{promote current heading up one level}{M-LEFT} -\key{demote current heading down one level}{M-RIGHT} -\key{promote current subtree up one level}{M-S-LEFT} -\key{demote current subtree down one level}{M-S-RIGHT} +\key{promote/demote heading}{M-LEFT/RIGHT} +\metax{promote/demote current subtree}{M-S-LEFT/RIGHT} \key{move subtree/list item up/down}{M-S-UP/DOWN} \key{refile subtree}{C-c C-w} @@ -320,6 +318,7 @@ \key{copy subtree}{C-c C-x M-w} \key{yank subtree}{C-c C-x C-y} \key{narrow buffer to current subtree}{C-x n s} +\key{widen restriction to full buffer}{C-x n w} \section{Archiving} @@ -452,7 +451,7 @@ \key{jump back to last followed link(s)}{C-c \&} \key{Find next link}{C-c C-x C-n} \key{Find previous link}{C-c C-x C-p} - +\key{Edit code snippet of file at point}{C-c '} {\bf Internal Links} \key{\kbd{<>}}{\rm target} diff -r a678c02d0c40 -r c1ef445563bb lisp/org/ChangeLog --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/org/ChangeLog Tue Jun 17 15:22:00 2008 +0000 @@ -0,0 +1,480 @@ +2008-06-17 Carsten Dominik + + * org-colview.el (org-columns-next-allowed-value): Bug fix. + + * org-colview-xemacs.el (org-columns-next-allowed-value): Bug fix. + + * org-agenda.el (org-agenda-get-closed): Get the end time into the + agenda prefix as well. + + * org-publish.el (org-publish-org-index): Make a properly indented + list. + + * org.el (org-calendar-agenda-action-key): New option. + (org-get-cursor-date): New function. + (org-mark-entry-for-agenda-action): New command. + (org-overriding-default-time): New variable. + (org-read-date): Respect `org-overriding-default-time'. + + * org-remember.el (org-remember-apply-template): Respect the + ovverriding default time. + + * org-agenda.el (org-agenda-action-marker): New variable. + (org-agenda-action): New command. + (org-agenda-do-action): New function. + +2008-06-17 Carsten Dominik + + * org.el (org-schedule, org-deadline): Protect scheduled and + deadline tasks against changes that accidently remove the + repeater. Also show a message with the new date when done. + +2008-06-17 Carsten Dominik + + * org.el (org-beginning-of-line): Cater for the case when there + are tags but no headline text. + (org-align-tags-here): Convert to tabs only when indent-tabs-mode + it set. + +2008-06-17 Carsten Dominik + + * org-mhe.el (org-mhe-get-message-folder-from-index): Make sure + the return value is nil instead of "nil" when there is no match. + + * org-exp.el (org-insert-centered): Use fill-column instead of + 80. + (org-export-as-ascii): Use string-width to measure the width of + the heading. + + * org.el (org-diary-to-ical-string): No longer kill buffer + FROMBUF, this is now done by the caller. + + * org-exp.el (org-print-icalendar-entries): Move the call to + `org-diary-to-ical-string' out of the loop, and kill the buffer + afterwords. + + * org-remember.el (org-remember-visit-immediately): Position + cursor after moving to the note. + (org-remember-apply-template): Use a text property to record the + cursor position. + (org-remember-handler): Align tags after pasting the note. + +2008-06-17 Carsten Dominik + + * org-bbdb.el (org-bbdb-follow-anniversary-link): New function. + + * org-agenda.el (org-agenda-open-link): If there is an + org-bbdb-name property in the current line, jump to that bbdb + entry. + + * org-bbdb.el (org-bbdb-anniversaries): Add the bbdb-name as a + text property, so that the agenda knows where this entry comes + from. + + * org-agenda.el (org-agenda-clock-in): Fixed bug in the + interaction between clocking-in from the agenda, and automatic + task state switching. + + * org-macs.el (org-with-point-at): Bug fix in macro defintion. + + * org.el (org-beginning-of-line, org-end-of-line): Make sure the + zmacs-region stays after this command in XEmacs. + +2008-06-17 Carsten Dominik + + * org.el (org-scan-tags): Allow new values for ACTION parameter. + + * org-remember.el (org-remember-templates): Fix bug in + customization type definition. + + * org.el (org-map-entries): New function. + +2008-06-17 Carsten Dominik + + * org-agenda.el (org-agenda-skip-comment-trees): New option. + (org-agenda-skip): Respect `org-agenda-skip-comment-trees'. + +2008-06-17 Carsten Dominik + + * org-remember.el (org-jump-to-target-location): New variable. + (org-remember-apply-template): Set + `org-remember-apply-template' if requested by template. + (org-remember-handler): Start an idle timer to jump to + remember location. + + * org-exp.el (org-get-current-options): Add the FILETAGS setting. + + * org.el (org-set-regexps-and-options): Fix bug with parsing of + file tags. + (org-get-tags-at): Add the content of `org-file-tags'. + + * org-exp.el (org-export-handle-comments): Fix bug with several + comment lines after each other. + (org-number-to-roman, org-number-to-counter): New functions. + (org-export-section-number-format): New option. + +2008-06-17 Carsten Dominik + + * org-exp.el (org-export-protect-examples): Catch the case of a + missing end_example line. + + * org.el (org-set-regexps-and-options): Set `org-file-properties' and + `org-file-tags' to nil. + + * org-colview.el (org-columns-next-allowed-value): Handle next + argument NTH to directly select a value. + + * org-colview-xemacs.el (org-columns-next-allowed-value): Handle next + argument NTH to directly select a value. + +2008-06-17 Carsten Dominik + + * org-agenda.el (org-agenda-scheduled-leaders): Fix docstring. + +2008-06-17 Carsten Dominik + + * org.el (org-columns-ellipses): New option. + +2008-06-17 Carsten Dominik + + * org-colview.el (org-columns-add-ellipses): New function. + (org-columns-compact-links): New function. + (org-columns-cleanup-item): Call `org-columns-compact-links'. + (org-columns-display-here): Call `org-agenda-columns-cleanup-item' + when in agenda. + (org-columns-edit-value): Fixed bug with editing values from + agenda column view. + (org-columns-redo): Also redo the agenda itself. + +2008-06-17 Carsten Dominik + + * org-agenda.el (org-agenda-columns-remove-prefix-from-item): New + option. + + * org-colview.el (org-agenda-columns-cleanup-item): New function. + + * org-exp.el (org-export-ascii-preprocess): Renamed from + `org-export-ascii-clean-string'. + (org-export-kill-licensed-text) + (org-export-define-heading-targets) + (org-export-handle-invisible-targets) + (org-export-target-internal-links) + (org-export-remove-or-extract-drawers) + (org-export-remove-archived-trees) + (org-export-protect-quoted-subtrees) + (org-export-protect-verbatim, org-export-protect-examples) + (org-export-select-backend-specific-text) + (org-export-mark-blockquote-and-verse) + (org-export-remove-comment-blocks-and-subtrees) + (org-export-handle-comments, org-export-mark-radio-links) + (org-export-remove-special-table-lines) + (org-export-normalize-links) + (org-export-concatenate-multiline-links) + (org-export-concatenate-multiline-emphasis): New functions, + obtained from spliiting the export preprocessor. + + * org-table.el (org-table-recalculate): Improve error message if + the row number is invalid. + +2008-06-17 Carsten Dominik + + * org-archive.el (org-archive-save-context-info): Fix bugs in + customization setup and docstring. + + * org-exp.el (org-export-html-style): Changed the size of in the +
 element to 90%.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-find-src-example-start): Function removed.
+	(org-edit-src-find-region-and-lang): New function.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-edit-src-exit): New function.
+	(org-exit-edit-mode): New minor mode.
+
+	* org-exp.el (org-export-preprocess-string): Fix bug with removing
+	comment-like lines from protected examples.
+
+	* org.el (org-edit-src-example, org-find-src-example-start)
+	(org-protect-source-example, org-edit-special): New functions.
+
+2008-06-17  Carsten Dominik  
+
+	* org-publish.el (org-publish-project-alist): Fix typo in
+	docstring.
+	(org-publish-project-alist): Handle :index-title property.
+
+2008-06-17  Carsten Dominik  
+
+	* org-export-latex.el (org-export-as-latex): Make sure region
+	bounds are correct.  Parse subtree properties relating to export.
+
+	* org-exp.el (org-export-add-options-to-plist): New function.
+	(org-infile-export-plist): Use `org-export-add-options-to-plist'.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-default-properties): Add EXPORT_FILE_NAME and
+	EXPORT_TITLE.
+
+	* org-exp.el (org-export-get-title-from-subtree)
+	(org-export-as-ascii, org-export-as-html): Make sure the original
+	region-beginning and region-end are used, even after moving
+	point.
+	(org-export-get-title-from-subtree): Also try the EXPORT_TITLE
+	property.
+
+	* org-remember.el (org-remember-last-stored-marker): New variable.
+	(org-remember-goto-last-stored): Use `org-goto-marker-or-bmk'.
+	(org-remember-handler): Also use marker to remember
+	last-stored position.
+
+	* org.el (org-goto-marker-or-bmk): New function.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-file-properties): Renamed from `org-local-properties'.
+	(org-scan-tags): Take file tags into account.
+	(org-tags-match-list-sublevels): Default changed to t.
+
+	* org-exp.el (org-export-as-html): Close paragraph after a
+	footnote.
+
+	* org.el (org-update-parent-todo-statistics): New function.
+
+	* org-exp.el (org-icalendar-store-UID): New option.
+	(org-icalendar-force-UID): Option removed.
+	(org-print-icalendar-entries): IMplement UIDs.
+
+2008-06-17  Carsten Dominik  
+
+	* org-mhe.el (org-mhe-follow-link): Fix bug in mhe searches.
+
+2008-06-17  Carsten Dominik  
+
+	* org-faces.el (org-column): Document how this face is being used
+	and why sometimes the background faces shine through.
+
+	* org-mhe.el (org-mhe-follow-link): Improve handling of searches.
+
+	* org-publish.el (org-publish-attachment): Create publishing
+	directory if it does not yet exist.
+
+	* org-table.el (org-calc-default-modes): Change default number
+	format to (float 8).
+
+	* org.el (org-olpath-completing-read): New function.
+	(org-time-clocksum-format): New option.
+	(org-minutes-to-hh:mm-string): Use `org-time-clocksum-format'.
+
+	* org-clock.el (org-clock-display, org-clock-out)
+	(org-update-mode-line): Use `org-time-clocksum-format'.
+
+	* org-colview-xemacs.el (org-columns-number-to-string): Use
+	`org-time-clocksum-format'.
+
+	* org-colview.el (org-columns-number-to-string): Use
+	`org-time-clocksum-format'.
+
+2008-06-17  Carsten Dominik  
+
+	* org-id.el: New file, move from contrib to core.
+
+	* org-exp.el (org-icalendar-force-UID): New option.
+
+2008-06-17  Carsten Dominik  
+
+	* org-exp.el (org-print-icalendar-entries): Make sure DTEND is
+	shifted by one day if theere is a date range without an end
+	time.
+
+	* org.el (org-try-structure-completion): New function.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-set-font-lock-defaults): Improve fontification of
+	description lists.
+	(org-insert-item): Handle description lists.
+	(org-adaptive-fill-function): Improve auto indentation in
+	description lists.
+
+	* org-exp.el (org-export-as-html, org-export-preprocess-string):
+	Implement VERSE environment.
+	(org-export-preprocess-string): Implement the COMMENT
+	environment.
+
+	* org-export-latex.el (org-export-latex-preprocess): Implement
+	VERSE environment.
+
+2008-06-17  Carsten Dominik  
+
+	* org-jsinfo.el (org-infojs-opts-table): Add entry for FIXED_TOC
+	option.
+
+2008-06-17  Carsten Dominik  
+
+	* org-table.el (orgtbl-to-tsv, orgtbl-to-csv): New functions.
+
+	* org.el (org-quote-csv-field): New functions.
+
+	* org-table.el (org-table-export-default-format): Remove :splice
+	from default format, we get the same effect by not specifying
+	:tstart and :tend.
+	(org-table-export): Improve setup, distinguish better between
+	interactive and non-interactive use, allow specifying the format
+	on the fly, better protection against wrong file names.
+	(orgtbl-to-generic): Fix documentation.  Do not require :tstart
+	and :tend when :splice is omitted.
+
+2008-06-17  Carsten Dominik  
+
+	* org-clock.el (org-clock-select-task): Make sure the selection
+	letters are 1-9 and A-Z, no special characters.
+
+2008-06-17  Carsten Dominik  
+
+	* org-exp.el (org-export-htmlize): New group.
+	(org-export-htmlize-output-type)
+	(org-export-htmlize-css-font-prefix): New options.
+	(org-export-htmlize-region-for-paste): New function.
+	(org-export-htmlize-generate-css): New command.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-set-visibility-according-to-property): New function.
+	(org-ctrl-c-ctrl-c): Do not restart org-mode, just get the options
+	and compute the regular expressions, and update font-lock.
+	(org-property-re): Allow a dash in property names.
+
+	* org-archive.el (org-extract-archive-file): Insert the file name
+	without the path into the format, to allow the location format to
+	contain a subdirectory.
+
+	* org-agenda.el (org-agenda-post-command-hook): If point is at end
+	of buffer, and the `org-agenda-type' property undefined, use the
+	value from the character before.
+
+	* org.el (org-add-planning-info): Don't let indentation for
+	would-be timestamp become extra whitespace at the end of headline.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-remove-double-quotes, org-file-contents): New
+	functions.
+
+	* org-exp.el (org-infile-export-plist): Also parse the
+	contents of #+SETUPFILE files, recursively.
+
+	* org.el (org-set-regexps-and-options): Also parse the
+	contents of #+SETUPFILE files, recursively.
+
+	* org-exp.el (org-export-handle-include-files): New function.
+	(org-export-preprocess-string): Call
+	`org-export-handle-include-files'.
+
+	* org.el (org-delete-property-globally)
+	(org-delete-property, org-set-property): Ignore case during
+	completion.
+	(org-set-property): Use `org-completing-read' instead of
+	`completing-read'.
+
+	* org.el (org-complete-expand-structure-template): New,
+	experimental function.
+	(org-structure-template-alist): New, experimental option.
+	(org-complete): Call `org-complete-expand-structure-template'.
+
+2008-06-17 Bastien Guerry  
+
+	* org-export-latex.el (org-export-latex-preprocess): Added
+	support for blockquotes.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-read-date-analyze): Catch the case where only a
+	weekday is given.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-set-font-lock-defaults): Make the description
+	tag bold.
+
+	* org-exp.el (org-export-as-html, org-close-li): Implement
+	description lists.
+
+2008-06-17 Jason Riedy  
+
+	* org-table.el (*orgtbl-default-fmt*): New variable.
+	(orgtbl-format-line): Use the value of *orgtbl-default-fmt*
+	when there is no other fmt available.
+
+	(orgtbl-to-generic): Allow an explicitly nil :tstart or
+	:tend to suppress the appropriate string.
+
+	(orgtbl-to-orgtbl): New function for translating to another orgtbl
+	table.
+
+2008-06-17  Carsten Dominik  
+
+	* org.el (org-read-date-analyze): "." as an alias for "+0" in
+	read date.
+
+	* org-clock.el (org-clock-save-markers-for-cut-and-paste):
+	New function.
+
+	* org-agenda.el (org-agenda-save-markers-for-cut-and-paste):
+	New function.
+
+2008-06-17  Carsten Dominik  
+
+	* org-clock.el (org-clock-find-position): Don't include notes
+	into clock drawer.
+
+	* org-archive.el (org-archive-subtree): No longer remove an
+	extra line after cutting the subtree.  `org-cut-subtree' already
+	takes care of this.
+
+	* org-remember.el (org-remember-handler): Only kill the target
+	buffer if it does not contain the running clock.
+
+	* org.el (org-markers-to-move): New variable.
+	(org-save-markers-in-region, org-check-and-save-marker)
+	(org-reinstall-markers-in-region): New function.
+	(org-move-subtree-down, org-copy-subtree): Remember relative
+	marker positions before cutting.
+	(org-move-subtree-down, org-paste-subtree): Restore relative
+	marker positions after pasting.
+
+	* org-remember.el (org-remember-clock-out-on-exit): New option.
+	(org-remember-finalize): Clock out only if the setting in
+	`org-remember-clock-out-on-exit' requires it.
+	(org-remember-handler): Do the cleanup in the buffer, to make sure
+	that the clock marker remains in tact.
+
+2008-06-17  Carsten Dominik  
+
+	* org-clock.el (org-clock-goto): Widen buffer if necessary.
+	(org-clock-in): Make sure that also tasks outside the narrowed
+	region will be clocked in correctly.
+	(org-clock-insert-selection-line): Widen the buffer so that we can
+	find the correct task heading.
+
+	* org.el (org-base-buffer): New function.
+
+	* org-exp.el (org-icalendar-cleanup-string): Make sure ',"
+	and ";" are escaped.
+	(org-print-icalendar-entries): Also apply
+	`org-icalendar-cleanup-string' to the headline, not only to the
+	summary property.
+
+2008-06-17  Carsten Dominik  
+
+	* org-exp.el (org-export-preprocess-hook): New hook.
+	(org-export-preprocess-string): Call
+	`org-export-preprocess-hook'.
+
+	* org.el (org-font-lock-hook): New variable.
+	(org-font-lock-hook): New function.
+	(org-set-font-lock-defaults): Call `org-font-lock-hook'.
+
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-agenda.el
--- a/lisp/org/org-agenda.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-agenda.el	Tue Jun 17 15:22:00 2008 +0000
@@ -1,4 +1,4 @@
-;;; org-agenda.el --- The table editor for Org-mode
+;;; org-agenda.el --- Dynamic task and appointment lists for Org
 
 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008
 ;;   Free Software Foundation, Inc.
@@ -6,7 +6,7 @@
 ;; Author: Carsten Dominik 
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -34,7 +34,7 @@
 (eval-when-compile
   (require 'calendar))
 
-(declare-function add-to-diary-list "diary-lib"
+(declare-function diary-add-to-list "diary-lib"
                   (date string specifier &optional marker globcolor literal))
 (declare-function calendar-absolute-from-iso    "cal-iso"    (date))
 (declare-function calendar-astro-date-string    "cal-julian" (&optional date))
@@ -392,6 +392,12 @@
  :tag "Org Agenda Skip"
  :group 'org-agenda)
 
+(defcustom org-agenda-skip-comment-trees t
+  "Non-nil means, skip trees that start with teh COMMENT keyword.
+When nil, these trees are also scand by agenda commands."
+  :group 'org-agenda-skip
+  :type 'boolean)
+
 (defcustom org-agenda-todo-list-sublevels t
   "Non-nil means, check also the sublevels of a TODO entry for TODO entries.
 When nil, the sublevels of a TODO entry are not checked, resulting in
@@ -464,7 +470,6 @@
 	  (const :tag "All" t)
 	  (number :tag "at most")))
 
-
 (defgroup org-agenda-startup nil
   "Options concerning initial settings in the Agenda in Org Mode."
   :tag "Org Agenda Startup"
@@ -676,7 +681,7 @@
  today         show grid on current date, independent of daily/weekly display
  require-timed show grid only if at least one item has a time specification
 
-The second item is a string which will be places behing the grid time.
+The second item is a string which will be placed behind the grid time.
 
 The third item is a list of integers, indicating the times that should have
 a grid line."
@@ -849,8 +854,10 @@
   "Text preceeding scheduled items in the agenda view.
 This is a list with two strings.  The first applies when the item is
 scheduled on the current day.  The second applies when it has been scheduled
-previously, it may contain a %d to capture how many days ago the item was
-scheduled."
+previously, it may contain a %d indicating that this is the nth time that
+this item is scheduled, due to automatic rescheduling of unfinished items
+for the following day.  So this number is one larger than the number of days
+that passed since this item was scheduled first."
   :group 'org-agenda-line-format
   :type '(list
 	  (string :tag "Scheduled today     ")
@@ -946,6 +953,16 @@
   :group 'org-agenda-column-view
   :type 'boolean)
 
+(defcustom org-agenda-columns-remove-prefix-from-item t
+  "Non-nil means, remove the prefix from a headline for agenda column view.
+The special ITEM field in the columns format contains the current line, with
+all information shown in other columns (like the TODO state or a tag).
+When this variable is non-nil, also the agenda prefix will be removed from
+the content of the ITEM field, to make sure as much as possible of the
+headline can be shown in the limited width of the field."
+  :group 'org-agenda
+  :type 'boolean)
+
 (defcustom org-agenda-columns-compute-summary-properties t
   "Non-nil means, recompute all summary properties before column view.
 When column view in the agenda is listing properties that have a summary
@@ -1071,6 +1088,8 @@
 (org-defkey org-agenda-mode-map "y"        'org-agenda-year-view)
 (org-defkey org-agenda-mode-map "\C-c\C-z" 'org-agenda-add-note)
 (org-defkey org-agenda-mode-map "z"        'org-agenda-add-note)
+(org-defkey org-agenda-mode-map "k"        'org-agenda-action)
+(org-defkey org-agenda-mode-map "\C-c\C-x\C-k" 'org-agenda-action)
 (org-defkey org-agenda-mode-map [(shift right)] 'org-agenda-date-later)
 (org-defkey org-agenda-mode-map [(shift left)] 'org-agenda-date-earlier)
 (org-defkey org-agenda-mode-map [?\C-c ?\C-x (right)] 'org-agenda-date-later)
@@ -1177,6 +1196,11 @@
      ["Schedule" org-agenda-schedule t]
      ["Set Deadline" org-agenda-deadline t]
      "--"
+     ["Mark item" org-agenda-action :active t :keys "k m"]
+     ["Show mark item" org-agenda-action :active t :keys "k v"]
+     ["Schedule marked item" org-agenda-action :active t :keys "k s"]
+     ["Set Deadline for marked item" org-agenda-action :active t :keys "k d"]
+     "--"
      ["Change Date +1 day" org-agenda-date-later (org-agenda-check-type nil 'agenda 'timeline)]
      ["Change Date -1 day" org-agenda-date-earlier (org-agenda-check-type nil 'agenda 'timeline)]
      ["Change Date to ..." org-agenda-date-prompt (org-agenda-check-type nil 'agenda 'timeline)])
@@ -2012,7 +2036,8 @@
 	 (get-text-property p :org-archived)
 	 (org-end-of-subtree t)
 	 (throw :skip t))
-    (and (get-text-property p :org-comment)
+    (and org-agenda-skip-comment-trees
+	 (get-text-property p :org-comment)
 	 (org-end-of-subtree t)
 	 (throw :skip t))
     (if (equal (char-after p) ?#) (throw :skip t))
@@ -2045,6 +2070,11 @@
   (while org-agenda-markers
     (move-marker (pop org-agenda-markers) nil)))
 
+(defun org-agenda-save-markers-for-cut-and-paste (beg end)
+  "Save relative positions of markers in region."
+  (mapc (lambda (m) (org-check-and-save-marker m beg end))
+	org-agenda-markers))
+
 ;;; Agenda timeline
 
 (defvar org-agenda-only-exact-dates nil) ; dynamically scoped
@@ -2425,6 +2455,7 @@
 		      'done-face 'org-done
 		      'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
+		      'org-complex-heading-regexp org-complex-heading-regexp
 		      'mouse-face 'highlight
 		      'keymap org-agenda-keymap
 		      'help-echo (format "mouse-2 or RET jump to location")))
@@ -2539,6 +2570,7 @@
 		      (org-add-props txt props
 			'org-marker marker 'org-hd-marker marker
 			'org-todo-regexp org-todo-regexp
+			'org-complex-heading-regexp org-complex-heading-regexp
 			'priority 1000 'org-category category
 			'type "search")
 		      (push txt ee)
@@ -3065,6 +3097,7 @@
 		      'done-face 'org-done
 		      'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
+		      'org-complex-heading-regexp org-complex-heading-regexp
 		      'mouse-face 'highlight
 		      'keymap org-agenda-keymap
 		      'help-echo
@@ -3123,6 +3156,7 @@
   (let* ((props (list 'face nil
 		      'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
+		      'org-complex-heading-regexp org-complex-heading-regexp
 		      'mouse-face 'highlight
 		      'keymap org-agenda-keymap
 		      'help-echo
@@ -3255,6 +3289,7 @@
   (let* ((props (list 'mouse-face 'highlight
 		      'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
+		      'org-complex-heading-regexp org-complex-heading-regexp
 		      'keymap org-agenda-keymap
 		      'help-echo
 		      (format "mouse-2 or RET jump to org file %s"
@@ -3269,7 +3304,7 @@
 			    (list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
 		    1 11))))
 	 marker hdmarker priority category tags closedp
-	 ee txt timestr)
+	 ee txt timestr rest)
     (goto-char (point-min))
     (while (re-search-forward regexp nil t)
       (catch :skip
@@ -3280,9 +3315,15 @@
 	      timestr (buffer-substring (match-beginning 0) (point-at-eol))
 	      ;; donep (org-entry-is-done-p)
 	      )
-	(if (string-match "\\]" timestr)
-	    ;; substring should only run to end of time stamp
-	    (setq timestr (substring timestr 0 (match-end 0))))
+	(when (string-match "\\]" timestr)
+	  ;; substring should only run to end of time stamp
+	  (setq rest (substring timestr (match-end 0))
+		timestr (substring timestr 0 (match-end 0)))
+	  (if (and (not closedp)
+		   (string-match "\\([0-9]\\{1,2\\}:[0-9]\\{2\\}\\)\\]" rest))
+	      (setq timestr (concat (substring timestr 0 -1)
+				    "-" (match-string 1 rest) "]"))))
+		
 	(save-excursion
 	  (if (re-search-backward "^\\*+ " nil t)
 	      (progn
@@ -3309,6 +3350,7 @@
   (let* ((props (list 'mouse-face 'highlight
 		      'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
+		      'org-complex-heading-regexp org-complex-heading-regexp
 		      'keymap org-agenda-keymap
 		      'help-echo
 		      (format "mouse-2 or RET jump to org file %s"
@@ -3394,6 +3436,7 @@
   "Return the scheduled information for agenda display."
   (let* ((props (list 'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
+		      'org-complex-heading-regexp org-complex-heading-regexp
 		      'done-face 'org-done
 		      'mouse-face 'highlight
 		      'keymap org-agenda-keymap
@@ -3469,6 +3512,7 @@
   (let* ((props (list 'face nil
 		      'org-not-done-regexp org-not-done-regexp
 		      'org-todo-regexp org-todo-regexp
+		      'org-complex-heading-regexp org-complex-heading-regexp
 		      'mouse-face 'highlight
 		      'keymap org-agenda-keymap
 		      'help-echo
@@ -4137,12 +4181,12 @@
   (setq org-agenda-ndays 7)
   (org-agenda-change-time-span 'week iso-week))
 (defun org-agenda-month-view (&optional month)
-  "Switch to daily view for agenda.
+  "Switch to monthly view for agenda.
 With argument MONTH, switch to that month."
   (interactive "P")
   (org-agenda-change-time-span 'month month))
 (defun org-agenda-year-view (&optional year)
-  "Switch to daily view for agenda.
+  "Switch to yearly view for agenda.
 With argument YEAR, switch to that year.
 If MONTH has more then 2 digits, only the last two encode the
 month.  Any digits before this encode a year.  So 200712 means
@@ -4331,7 +4375,10 @@
 
 (defun org-agenda-post-command-hook ()
   (and (eolp) (not (bolp)) (backward-char 1))
-  (setq org-agenda-type (get-text-property (point) 'org-agenda-type))
+  (setq org-agenda-type
+	(or (get-text-property (point) 'org-agenda-type)
+	    (get-text-property (max (point-min) (1- (point)))
+			       'org-agenda-type)))
   (if (and org-agenda-follow-mode
 	   (get-text-property (point) 'org-marker))
       (org-agenda-show)))
@@ -4890,6 +4937,69 @@
       (org-agenda-show-new-time marker ts "S"))
 	(message "Deadline for this item set to %s" ts)))
 
+(defun org-agenda-action ()
+  "Select entry for agenda action, or execute an agenda action.
+This command prompts for another letter.  Valid inputs are:
+
+m     Mark the entry at point for an agenda action
+s     Schedule the marked entry to the date at the cursor
+d     Set the deadline of the marked entry to the date at the cursor
+r     Call `org-remember' with cursor date as the default date
+SPC   Show marked entry in other window
+TAB   Visit marked entry in other window
+
+The cursor may be at a date in the calendar, or in the Org agenda."
+  (interactive)
+  (let (pos ans)
+    (message "Select action: [m]ark | [s]chedule [d]eadline [r]emember [ ]show")
+    (setq ans (read-char-exclusive))
+    (cond
+     ((equal ans ?m)
+      ;; Mark this entry
+      (if (eq major-mode 'org-agenda-mode)
+	  (let ((m (or (get-text-property (point) 'org-hd-marker)
+		       (get-text-property (point) 'org-marker))))
+	    (if m
+		(progn
+		  (move-marker org-agenda-action-marker
+			       (marker-position m) (marker-buffer m))
+		  (message "Entry marked for action; press `k' at desired date in agenda or calendar"))
+	      (error "Don't know which entry to mark")))
+	(error "This command works only in the agenda")))
+     ((equal ans ?s)
+      (org-agenda-do-action '(org-schedule nil org-overriding-default-time)))
+     ((equal ans ?d)
+      (org-agenda-do-action '(org-deadline nil org-overriding-default-time)))
+     ((equal ans ?r)
+      (org-agenda-do-action '(org-remember) t))
+     ((equal ans ?\ )
+      (let ((cw (selected-window)))
+	(org-switch-to-buffer-other-window
+	 (marker-buffer org-agenda-action-marker))
+	(goto-char org-agenda-action-marker)
+	(org-show-context 'agenda)
+	(select-window cw)))
+     ((equal ans ?\C-i)
+      (org-switch-to-buffer-other-window
+       (marker-buffer org-agenda-action-marker))
+      (goto-char org-agenda-action-marker)
+      (org-show-context 'agenda))
+     (t (error "Invalid agenda action %c" ans)))))
+
+(defun org-agenda-do-action (form &optional current-buffer)
+  "Evaluate FORM at the entry pointed to by `org-agenda-action-marker'."
+  (let ((org-overriding-default-time (org-get-cursor-date)))
+    (if current-buffer
+	(eval form)
+      (if (not (marker-buffer org-agenda-action-marker))
+	  (error "No entry has bee selected for agenda action")
+	(with-current-buffer (marker-buffer org-agenda-action-marker)
+	  (save-excursion
+	    (save-restriction
+	      (widen)
+	      (goto-char org-agenda-action-marker)
+	      (eval form))))))))
+  
 (defun org-agenda-clock-in (&optional arg)
   "Start the clock on the currently selected item."
   (interactive "P")
@@ -4898,12 +5008,20 @@
       (org-clock-in arg)
     (let* ((marker (or (get-text-property (point) 'org-marker)
 		       (org-agenda-error)))
-	   (pos (marker-position marker)))
+	   (hdmarker (or (get-text-property (point) 'org-hd-marker)
+			 marker))
+	   (pos (marker-position marker))
+	   newhead)
       (org-with-remote-undo (marker-buffer marker)
         (with-current-buffer (marker-buffer marker)
 	  (widen)
 	  (goto-char pos)
-	  (org-clock-in arg))))))
+	  (org-show-context 'agenda)
+	  (org-show-entry)
+	  (org-cycle-hide-drawers 'children)
+	  (org-clock-in arg)
+	  (setq newhead (org-get-heading)))
+	(org-agenda-change-all-lines newhead hdmarker t)))))
 
 (defun org-agenda-clock-out (&optional arg)
   "Stop the currently running clock."
@@ -5141,6 +5259,8 @@
 
 (provide 'org-agenda)
 
+;; arch-tag: 77f7565d-7c4b-44af-a2df-9f6f7070cff1
+
 ;;; org-agenda.el ends here
 
-;; arch-tag: 77f7565d-7c4b-44af-a2df-9f6f7070cff1
+
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-archive.el
--- a/lisp/org/org-archive.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-archive.el	Tue Jun 17 15:22:00 2008 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik 
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -64,8 +64,8 @@
 
 time       The time of archiving.
 file       The file where the entry originates.
-itags      The local tags, in the headline of the subtree.
-ltags      The tags the subtree inherits from further up the hierarchy.
+ltags      The local tags, in the headline of the subtree.
+itags      The tags the subtree inherits from further up the hierarchy.
 todo       The pre-archive TODO state.
 category   The category, taken from file name or #+CATEGORY lines.
 olpath     The outline path to the item.  These are all headlines above
@@ -80,7 +80,7 @@
 	  (const :tag "File" file)
 	  (const :tag "Category" category)
 	  (const :tag "TODO state" todo)
-	  (const :tag "TODO state" priority)
+	  (const :tag "Priority" priority)
 	  (const :tag "Inherited tags" itags)
 	  (const :tag "Outline path" olpath)
 	  (const :tag "Local tags" ltags)))
@@ -135,14 +135,19 @@
     files))
 
 (defun org-extract-archive-file (&optional location)
+  "Extract and expand the file name from archive LOCATION.
+if LOCATION is not given, the value of `org-archive-location' is used."
   (setq location (or location org-archive-location))
   (if (string-match "\\(.*\\)::\\(.*\\)" location)
       (if (= (match-beginning 1) (match-end 1))
 	  (buffer-file-name)
 	(expand-file-name
-	 (format (match-string 1 location) buffer-file-name)))))
+	 (format (match-string 1 location)
+		 (file-name-nondirectory buffer-file-name))))))
 
 (defun org-extract-archive-heading (&optional location)
+  "Extract the heading from archive LOCATION.
+if LOCATION is not given, the value of `org-archive-location' is used."
   (setq location (or location org-archive-location))
   (if (string-match "\\(.*\\)::\\(.*\\)" location)
       (match-string 2 location)))
@@ -180,7 +185,7 @@
 		 (current-time)))
 	  category todo priority ltags itags
           ;; end of variables that will be used for saving context
-	  location afile heading buffer level newfile-p)
+	  location afile heading buffer level newfile-p visiting)
 
       ;; Find the local archive location
       (setq location (org-get-local-archive-location)
@@ -191,7 +196,8 @@
 
       (if (> (length afile) 0)
 	  (setq newfile-p (not (file-exists-p afile))
-		buffer (find-file-noselect afile))
+		visiting (find-buffer-visiting afile)
+		buffer (or visiting (find-file-noselect afile)))
 	(setq buffer (current-buffer)))
       (unless buffer
 	(error "Cannot access file \"%s\"" afile))
@@ -213,9 +219,9 @@
 	(setq ltags (mapconcat 'identity ltags " ")
 	      itags (mapconcat 'identity itags " "))
 	;; We first only copy, in case something goes wrong
-	;; we need to protect this-command, to avoid kill-region sets it,
+	;; we need to protect `this-command', to avoid kill-region sets it,
 	;; which would lead to duplication of subtrees
-	(let (this-command) (org-copy-subtree))
+	(let (this-command) (org-copy-subtree 1 nil t))
 	(set-buffer buffer)
 	;; Enforce org-mode for the archive buffer
 	(if (not (org-mode-p))
@@ -283,12 +289,18 @@
 		  (org-entry-put (point) n v)))))
 
 	  ;; Save and kill the buffer, if it is not the same buffer.
-	  (if (not (eq this-buffer buffer))
-	      (progn (save-buffer) (kill-buffer buffer)))))
+	  (when (not (eq this-buffer buffer))
+	    (save-buffer)
+	    ;; Check if it is OK to kill the buffer
+	    (unless
+		(or visiting
+		    (equal (marker-buffer org-clock-marker) (current-buffer)))
+	      (kill-buffer buffer)))
+	  ))
       ;; Here we are back in the original buffer.  Everything seems to have
       ;; worked.  So now cut the tree and finish up.
       (let (this-command) (org-cut-subtree))
-      (if (and (not (eobp)) (looking-at "[ \t]*$")) (kill-line))
+      (setq org-markers-to-move nil)
       (message "Subtree archived %s"
 	       (if (eq this-buffer buffer)
 		   (concat "under heading: " heading)
@@ -404,4 +416,5 @@
 (provide 'org-archive)
 
 ;; arch-tag: 0837f601-9699-43c3-8b90-631572ae6c85
+
 ;;; org-archive.el ends here
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-bbdb.el
--- a/lisp/org/org-bbdb.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-bbdb.el	Tue Jun 17 15:22:00 2008 +0000
@@ -6,7 +6,7 @@
 ;;         Thomas Baumann 
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -30,7 +30,6 @@
 ;; Org-mode loads this module by default - if this is not what you want,
 ;; configure the variable `org-modules'.
 
-
 ;; It also implements an interface (based on Ivar Rummelhoff's
 ;; bbdb-anniv.el) for those org-mode users, who do not use the diary
 ;; but who do want to include the anniversaries stored in the BBDB
@@ -77,7 +76,10 @@
 ;;       1973-06-22
 ;;       20??-??-?? wedding
 ;;       1998-03-12 %s created bbdb-anniv.el %d years ago
-
+;;
+;; From Org's agenda, you can use `C-c C-o' to jump to the BBDB
+;; link from which the entry at point originates.
+;;
 ;;; Code:
 
 (require 'org)
@@ -100,7 +102,7 @@
 (declare-function calendar-leap-year-p "calendar" (year))
 (declare-function diary-ordinal-suffix "diary-lib" (n))
 
-(defvar date)
+(defvar date)   ;; dynamically scoped from Org
 
 ;; Customization
 
@@ -115,8 +117,16 @@
   :require 'bbdb)
 
 (defcustom org-bbdb-anniversary-format-alist
-  '( ("birthday" . "Birthday: %s (%d%s)")
-     ("wedding"  . "%s's %d%s wedding anniversary") )
+  '(("birthday" lambda
+     (name years suffix)
+     (concat "Birthday: [[bbdb:" name "][" name " ("
+	     (number-to-string years)
+	     suffix ")]]"))
+    ("wedding" lambda
+     (name years suffix)
+     (concat "[[bbdb:" name "][" name "'s "
+	     (number-to-string years)
+	     suffix " wedding anniversary]]")))
   "How different types of anniversaries should be formatted.
 An alist of elements (STRING . FORMAT) where STRING is the name of an
 anniversary class and format is either:
@@ -227,17 +237,19 @@
 		  (bbdb-string-trim (substring str pos)))
       (list str nil))))
 
+(defvar org-bbdb-anniv-hash nil
+  "A hash holding anniversaries extracted from BBDB.
+The hash table is created on first use.")
 
-;;;###autoload
-(defun org-bbdb-anniversaries ()
-  "Extract anniversaries from BBDB for display in the agenda."
-  (require 'diary-lib)
-  (let ((dates (list (cons (cons (car date)    ; month
-                                 (nth 1 date)) ; day
-                           (nth 2 date))))     ; year
-        (text ())
-        annivs date years
-        split class form)
+(defvar org-bbdb-updated-p t
+  "This is non-nil if BBDB has been updated since we last built the hash.")
+
+(defun org-bbdb-make-anniv-hash ()
+  "Create a hash with anniversaries extracted from BBDB, for fast access.
+The anniversaries are assumed to be stored `org-bbdb-anniversary-field'."
+
+  (let (split tmp annivs)
+    (clrhash org-bbdb-anniv-hash)
     (dolist (rec (bbdb-records))
       (when (setq annivs (bbdb-record-getprop
                           rec org-bbdb-anniversary-field))
@@ -246,33 +258,70 @@
           (setq split (org-bbdb-anniv-split (pop annivs)))
           (multiple-value-bind (m d y)
               (funcall org-bbdb-extract-date-fun (car split))
+            (setq tmp (gethash (list m d) org-bbdb-anniv-hash))
+            (puthash (list m d) (cons (list y 
+                                            (bbdb-record-name rec) 
+                                            (cadr split))
+                                      tmp)
+                     org-bbdb-anniv-hash))))))
+  (setq org-bbdb-updated-p nil))
 
-            (when (and (or (setq date (assoc (cons m d) dates))
-                           (and (= d 29)
-                                (= m 2)
-                                (setq date (assoc '(3 . 1) dates))
-                                (not (calendar-leap-year-p (cdr date)))))
-                       (< 0 (setq years (-  (cdr date) y))))
-              (let* ((class (or (cadr split)
-                                org-bbdb-default-anniversary-format))
-                     (form (or (cdr (assoc class
-                                           org-bbdb-anniversary-format-alist))
-                               class))	; (as format string)
-                     (name (bbdb-record-name rec))
-                     (suffix (diary-ordinal-suffix years))
-                     (tmp (cond
-                           ((functionp form)
-                            (funcall form name years suffix))
-                           ((listp form) (eval form))
-                           (t (format form name years suffix)))))
-                (if text
-                    (setq text (append text (list tmp)))
-                  (setq text (list tmp))))
-              )))))
+(defun org-bbdb-updated (rec)
+  "Record the fact that BBDB has been updated.
+This is used by Org to re-create the anniversary hash table."
+  (setq org-bbdb-updated-p t))
+
+(add-hook 'bbdb-after-change-hook 'org-bbdb-updated)
+
+;;;###autoload
+(defun org-bbdb-anniversaries()
+  "Extract anniversaries from BBDB for display in the agenda."
+  (require 'diary-lib)
+  (unless (hash-table-p org-bbdb-anniv-hash)
+    (setq org-bbdb-anniv-hash
+	  (make-hash-table :test 'equal :size 366)))
+
+  (when (or org-bbdb-updated-p
+            (= 0 (hash-table-count org-bbdb-anniv-hash)))
+    (org-bbdb-make-anniv-hash))
+
+  (let* ((m (car date))    ; month
+         (d (nth 1 date))  ; day
+         (y (nth 2 date))  ; year
+         (annivs (gethash (list m d) org-bbdb-anniv-hash))
+         (text ())
+         split class form rec)
+    
+    ;; we don't want to miss people born on Feb. 29th
+    (when (and (= m 3) (= d 1) (not (calendar-leap-year-p y)))
+      (setq annivs (cons annivs (gethash (list 2 29) org-bbdb-anniv-hash))))
+
+    (when annivs
+      (while (setq rec (pop annivs))
+        (when rec 
+          (let* ((class (or (nth 2 rec)
+                            org-bbdb-default-anniversary-format))
+                 (form (or (cdr (assoc class
+                                       org-bbdb-anniversary-format-alist))
+                           class))	; (as format string)
+                 (name (nth 1 rec))
+                 (years (- y (car rec)))
+                 (suffix (diary-ordinal-suffix years))
+                 (tmp (cond
+                       ((functionp form)
+                        (funcall form name years suffix))
+                       ((listp form) (eval form))
+                       (t (format form name years suffix)))))
+	    (org-add-props tmp nil 'org-bbdb-name name)
+            (if text
+                (setq text (append text (list tmp)))
+              (setq text (list tmp)))))
+        ))
     (when text
       (mapconcat 'identity text "; "))))
 
 (provide 'org-bbdb)
 
 ;; arch-tag: 9e4f275d-d080-48c1-b040-62247f66b5c2
+
 ;;; org-bbdb.el ends here
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-bibtex.el
--- a/lisp/org/org-bibtex.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-bibtex.el	Tue Jun 17 15:22:00 2008 +0000
@@ -5,7 +5,7 @@
 ;; Author: Bastien Guerry 
 ;;         Carsten Dominik 
 ;; Keywords: org, wp, remember
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -200,4 +200,5 @@
 (provide 'org-bibtex)
 
 ;; arch-tag: 83987d5a-01b8-41c7-85bc-77700f1285f5
+
 ;;; org-bibtex.el ends here
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-clock.el
--- a/lisp/org/org-clock.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-clock.el	Tue Jun 17 15:22:00 2008 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik 
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -97,11 +97,7 @@
 (defvar org-clock-start-time "")
 
 (defvar org-clock-history nil
-  "Marker pointing to the previous task teking clock time.
-This is used to find back to the previous task after interrupting work.
-When clocking into a task and the clock is currently running, this marker
-is moved to the position of the currently running task and continues
-to point there even after the task is clocked out.")
+  "List of marker pointing to recent clocked tasks.")
 
 (defvar org-clock-default-task (make-marker)
   "Marker pointing to the default task that should clock time.
@@ -109,12 +105,11 @@
 of a different task.")
 
 (defvar org-clock-interrupted-task (make-marker)
-  "Marker pointing to the default task that should clock time.
-The clock can be made to switch to this task after clocking out
-of a different task.")
+  "Marker pointing to the task that has been interrupted by the current clock.")
 
 (defun org-clock-history-push (&optional pos buffer)
   "Push a marker to the clock history."
+  (setq org-clock-history-length (max 1 (min 35 org-clock-history-length)))
   (let ((m (move-marker (make-marker) (or pos (point)) buffer)) n l)
     (while (setq n (member m org-clock-history))
       (move-marker (car n) nil))
@@ -129,6 +124,14 @@
 		     (nreverse org-clock-history)))))
     (push m org-clock-history)))
 
+(defun org-clock-save-markers-for-cut-and-paste (beg end)
+  "Save relative positions of markers in region."
+  (org-check-and-save-marker org-clock-marker beg end)
+  (org-check-and-save-marker org-clock-default-task beg end)
+  (org-check-and-save-marker org-clock-interrupted-task beg end)
+  (mapc (lambda (m) (org-check-and-save-marker m beg end))
+	org-clock-history))
+
 (defun org-clock-select-task (&optional prompt)
   "Select a task that recently was associated with clocking."
   (interactive)
@@ -155,10 +158,14 @@
 	 (when (marker-buffer m)
 	   (setq i (1+ i)
 		 s (org-clock-insert-selection-line
-		    (string-to-char (number-to-string i)) m))
+		    (if (< i 10)
+			(+ i ?0)
+		      (+ i (- ?A 10))) m))
 	   (push s sel-list)))
        org-clock-history)
-      (shrink-window-if-larger-than-buffer)
+      (if (fboundp 'fit-window-to-buffer)
+	  (fit-window-to-buffer)
+	(shrink-window-if-larger-than-buffer))
       (message (or prompt "Select task for clocking:"))
       (setq rpl (read-char-exclusive))
       (cond
@@ -170,14 +177,16 @@
 (defun org-clock-insert-selection-line (i marker)
   (when (marker-buffer marker)
     (let (file cat task)
-      (with-current-buffer (marker-buffer marker)
+      (with-current-buffer (org-base-buffer (marker-buffer marker))
 	(save-excursion
-	  (goto-char marker)
-	  (setq file (buffer-file-name (marker-buffer marker))
-		cat (or (org-get-category)
-			(progn (org-refresh-category-properties)
-			       (org-get-category)))
-		task (org-get-heading 'notags))))
+	  (save-restriction
+	    (widen)
+	    (goto-char marker)
+	    (setq file (buffer-file-name (marker-buffer marker))
+		  cat (or (org-get-category)
+			  (progn (org-refresh-category-properties)
+				 (org-get-category)))
+		  task (org-get-heading 'notags)))))
       (when (and cat task)
 	(insert (format "[%c] %-15s %s\n" i cat task))
 	(cons i marker)))))
@@ -188,7 +197,7 @@
 	 (h (floor delta 3600))
 	 (m (floor (- delta (* 3600 h)) 60)))
     (setq org-mode-line-string
-	  (propertize (format "-[%d:%02d (%s)]" h m org-clock-heading)
+	  (propertize (format (concat "-[" org-time-clocksum-format " (%s)]") h m org-clock-heading)
 		      'help-echo "Org-mode clock is running"))
     (force-mode-line-update)))
 
@@ -204,60 +213,69 @@
 the clocking selection, associated with the letter `d'."
   (interactive "P")
   (let ((interrupting (marker-buffer org-clock-marker))
-	ts selected-task)
+	ts selected-task target-pos)
     (when (equal select '(4))
       (setq selected-task (org-clock-select-task "Clock-in on task: "))
       (if selected-task
 	  (setq selected-task (copy-marker selected-task))
 	(error "Abort")))
-    ;; Are we interrupting the clocking of a differnt task?
-    (if interrupting
-	(progn
-	  (move-marker org-clock-interrupted-task
-		       (marker-position org-clock-marker)
-		       (marker-buffer org-clock-marker))
-	  (org-clock-out t)))
+    (when interrupting
+      ;; We are interrupting the clocking of a differnt task.
+      ;; Save a marker to this task, so that we can go back.
+      (move-marker org-clock-interrupted-task
+		   (marker-position org-clock-marker)
+		   (marker-buffer org-clock-marker))
+      (org-clock-out t))
     
     (when (equal select '(16))
+      ;; Mark as default clocking task
       (save-excursion
 	(org-back-to-heading t)
 	(move-marker org-clock-default-task (point))))
     
+    (setq target-pos (point))  ;; we want to clock in at this location
     (save-excursion
-      (org-back-to-heading t)
       (when (and selected-task (marker-buffer selected-task))
-	(set-buffer (marker-buffer selected-task))
-	(goto-char selected-task)
+	;; There is a selected task, move to the correct buffer
+	;; and set the new target position.
+	(set-buffer (org-base-buffer (marker-buffer selected-task)))
+	(setq target-pos (marker-position selected-task))
 	(move-marker selected-task nil))
-      (or interrupting (move-marker org-clock-interrupted-task nil))
-      (org-clock-history-push)
-      (when (and org-clock-in-switch-to-state
-		 (not (looking-at (concat outline-regexp "[ \t]*"
-					  org-clock-in-switch-to-state
-					  "\\>"))))
-	(org-todo org-clock-in-switch-to-state))
-      (if (and org-clock-heading-function
-	       (functionp org-clock-heading-function))
-	  (setq org-clock-heading (funcall org-clock-heading-function))
-	(if (looking-at org-complex-heading-regexp)
-	    (setq org-clock-heading (match-string 4))
-	  (setq org-clock-heading "???")))
-      (setq org-clock-heading (propertize org-clock-heading 'face nil))
-      (org-clock-find-position)
-      
-      (insert "\n") (backward-char 1)
-      (indent-relative)
-      (insert org-clock-string " ")
-      (setq org-clock-start-time (current-time))
-      (setq ts (org-insert-time-stamp (current-time) 'with-hm 'inactive))
-      (move-marker org-clock-marker (point) (buffer-base-buffer))
-      (or global-mode-string (setq global-mode-string '("")))
-      (or (memq 'org-mode-line-string global-mode-string)
-	  (setq global-mode-string
-		(append global-mode-string '(org-mode-line-string))))
-      (org-update-mode-line)
-      (setq org-mode-line-timer (run-with-timer 60 60 'org-update-mode-line))
-      (message "Clock started at %s" ts))))
+      (save-excursion
+	(save-restriction
+	  (widen)
+	  (goto-char target-pos)
+	  (org-back-to-heading t)
+	  (or interrupting (move-marker org-clock-interrupted-task nil))
+	  (org-clock-history-push)
+	  (when (and org-clock-in-switch-to-state
+		     (not (looking-at (concat outline-regexp "[ \t]*"
+					      org-clock-in-switch-to-state
+					      "\\>"))))
+	    (org-todo org-clock-in-switch-to-state))
+	  (if (and org-clock-heading-function
+		   (functionp org-clock-heading-function))
+	      (setq org-clock-heading (funcall org-clock-heading-function))
+	    (if (looking-at org-complex-heading-regexp)
+		(setq org-clock-heading (match-string 4))
+	      (setq org-clock-heading "???")))
+	  (setq org-clock-heading (propertize org-clock-heading 'face nil))
+	  (org-clock-find-position)
+	  
+	  (insert "\n") (backward-char 1)
+	  (indent-relative)
+	  (insert org-clock-string " ")
+	  (setq org-clock-start-time (current-time))
+	  (setq ts (org-insert-time-stamp (current-time) 'with-hm 'inactive))
+	  (move-marker org-clock-marker (point) (buffer-base-buffer))
+	  (or global-mode-string (setq global-mode-string '("")))
+	  (or (memq 'org-mode-line-string global-mode-string)
+	      (setq global-mode-string
+		    (append global-mode-string '(org-mode-line-string))))
+	  (org-update-mode-line)
+	  (setq org-mode-line-timer
+		(run-with-timer 60 60 'org-update-mode-line))
+	  (message "Clock started at %s" ts))))))
 
 (defun org-clock-find-position ()
   "Find the location where the next clock line should be inserted."
@@ -288,7 +306,6 @@
 	;; Wrap current entries into a new drawer
 	(goto-char last)
 	(beginning-of-line 2)
-	(if (org-at-item-p) (org-end-of-item))
 	(insert ":END:\n")
 	(beginning-of-line 0)
 	(org-indent-line-function)
@@ -358,7 +375,7 @@
 	(setq global-mode-string
 	      (delq 'org-mode-line-string global-mode-string))
 	(force-mode-line-update)
-	(message "Clock stopped at %s after HH:MM = %d:%02d%s" te h m
+	(message (concat "Clock stopped at %s after HH:MM = " org-time-clocksum-format "%s") te h m
 		 (if remove " => LINE REMOVED" "")))))))
 
 (defun org-clock-cancel ()
@@ -387,6 +404,7 @@
 	    (error "No task selected")
 	  (error "No active clock")))
     (switch-to-buffer (marker-buffer m))
+    (if (or (< m (point-min)) (> m (point-max))) (widen))
     (goto-char m)
     (org-show-entry)
     (org-back-to-heading)
@@ -469,7 +487,7 @@
 	(when org-remove-highlights-with-change
 	  (org-add-hook 'before-change-functions 'org-remove-clock-overlays
 			nil 'local))))
-    (message "Total file time: %d:%02d (%d hours and %d minutes)" h m h m)))
+    (message (concat "Total file time: " org-time-clocksum-format " (%d hours and %d minutes)") h m h m)))
 
 (defvar org-clock-overlays nil)
 (make-variable-buffer-local 'org-clock-overlays)
@@ -481,6 +499,7 @@
 will be easy to remove."
   (let* ((c 60) (h (floor (/ time 60))) (m (- time (* 60 h)))
 	 (l (if level (org-get-valid-level level 0) 0))
+	 (fmt (concat "%s " org-time-clocksum-format "%s"))
 	 (off 0)
 	 ov tx)
     (org-move-to-column c)
@@ -489,7 +508,7 @@
     (setq ov (org-make-overlay (1- (point)) (point-at-eol))
 	  tx (concat (buffer-substring (1- (point)) (point))
 		     (make-string (+ off (max 0 (- c (current-column)))) ?.)
-		     (org-add-props (format "%s %2d:%02d%s"
+		     (org-add-props (format fmt
 					    (make-string l ?*) h m
 					    (make-string (- 16 l) ?\ ))
 			 '(face secondary-selection))
@@ -920,7 +939,6 @@
 
 (provide 'org-clock)
 
-;;; org-clock.el ends here
+;; arch-tag: 7b42c5d4-9b36-48be-97c0-66a869daed4c
 
-
-;; arch-tag: 7b42c5d4-9b36-48be-97c0-66a869daed4c
+;;; org-clock.el ends here
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-colview.el
--- a/lisp/org/org-colview.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-colview.el	Tue Jun 17 15:22:00 2008 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik 
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -32,6 +32,8 @@
 (eval-when-compile (require 'cl))
 (require 'org)
 
+(declare-function org-agenda-redo "org-agenda" ())
+
 ;;; Column View
 
 (defvar org-columns-overlays nil
@@ -90,6 +92,10 @@
 (org-defkey org-columns-map [(meta left)] 'org-columns-move-left)
 (org-defkey org-columns-map [(shift meta right)] 'org-columns-new)
 (org-defkey org-columns-map [(shift meta left)] 'org-columns-delete)
+(dotimes (i 10)
+  (org-defkey org-columns-map (number-to-string i)
+              `(lambda () (interactive)
+                 (org-columns-next-allowed-value nil ,i))))
 
 (easy-menu-define org-columns-menu org-columns-map "Org Column Menu"
   '("Column"
@@ -137,12 +143,11 @@
 		       (and (eq major-mode 'org-agenda-mode)
 			    (get-text-property (point-at-bol) 'face))
 		       'default))
-	 (color (list :foreground
-		      (face-attribute ref-face :foreground)
-		      :weight 'normal :strike-through nil
-		      :underline nil))
-	 (face (list color 'org-column level-face))
-	 pom property ass width f string ov column val modval)
+	 (color (list :foreground (face-attribute ref-face :foreground)))
+	 (face (list color 'org-column ref-face))
+	 (pl (or (get-text-property (point-at-bol) 'prefix-length) 0))
+	 (cphr (get-text-property (point-at-bol) 'org-complex-heading-regexp))
+	 pom property ass width f string ov column val modval s1 s2)
     ;; Check if the entry is in another buffer.
     (unless props
       (if (eq major-mode 'org-agenda-mode)
@@ -167,8 +172,13 @@
 	    f (format "%%-%d.%ds | " width width)
 	    val (or (cdr ass) "")
 	    modval (if (equal property "ITEM")
-		       (org-columns-cleanup-item val org-columns-current-fmt-compiled))
-	    string (format f (or modval val)))
+		       (if (org-mode-p)
+			   (org-columns-cleanup-item
+			    val org-columns-current-fmt-compiled)
+			 (org-agenda-columns-cleanup-item
+			  val pl cphr org-columns-current-fmt-compiled))))
+      (setq s2 (org-columns-add-ellipses (or modval val) width))
+      (setq string (format f s2))
       ;; Create the overlay
       (org-unmodified
        (setq ov (org-columns-new-overlay
@@ -200,6 +210,15 @@
 			  (min (point-max) (1+ (point-at-eol)))
 			  'read-only "Type `e' to edit property")))))
 
+(defun org-columns-add-ellipses (string width)
+  "Truncate STRING with WIDTH characters, with ellipses."
+  (cond 
+   ((<= (length string) width) string)
+   ((<= width (length org-columns-ellipses))
+    (substring org-columns-ellipses 0 width))
+   (t (concat (substring string 0 (- width (length org-columns-ellipses)))
+	      org-columns-ellipses))))
+
 (defvar org-columns-full-header-line-format nil
   "Fthe full header line format, will be shifted by horizontal scrolling." )
 (defvar org-previous-header-line-format nil
@@ -275,13 +294,40 @@
   (if (not org-complex-heading-regexp)
       item
     (when (string-match org-complex-heading-regexp item)
-      (concat
-       (org-add-props (concat (match-string 1 item) " ") nil
-	 'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) (match-beginning 1))))))
-       (and (match-end 2) (not (assoc "TODO" fmt)) (concat " " (match-string 2 item)))
-       (and (match-end 3) (not (assoc "PRIORITY" fmt)) (concat " " (match-string 3 item)))
-       " " (match-string 4 item)
-       (and (match-end 5) (not (assoc "TAGS" fmt)) (concat " " (match-string 5 item)))))))
+      (setq item
+	    (concat
+	     (org-add-props (match-string 1 item) nil
+	       'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) (match-beginning 1))))))
+	     (and (match-end 2) (not (assoc "TODO" fmt)) (concat " " (match-string 2 item)))
+	     (and (match-end 3) (not (assoc "PRIORITY" fmt)) (concat " " (match-string 3 item)))
+	     " " (save-match-data (org-columns-compact-links (match-string 4 item)))
+	     (and (match-end 5) (not (assoc "TAGS" fmt)) (concat " " (match-string 5 item)))))
+      (add-text-properties
+       0 (1+ (match-end 1))
+       (list 'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) (match-beginning 1))))))
+       item)
+      item)))
+
+(defun org-columns-compact-links (s)
+  "Replace [[link][desc]] with [desc] or [link]."
+  (while (string-match org-bracket-link-regexp s)
+    (setq s (replace-match
+	     (concat "[" (match-string (if (match-end 3) 3 1) s) "]")
+	     t t s)))
+  s)
+
+(defvar org-agenda-columns-remove-prefix-from-item)
+(defun org-agenda-columns-cleanup-item (item pl cphr fmt)
+  "Cleanup the tiem property for agenda column view.
+See also the variable `org-agenda-columns-remove-prefix-from-item'."
+  (let* ((org-complex-heading-regexp cphr)
+	 (prefix (substring item 0 pl))
+	 (rest (substring item pl))
+	 (fake (concat "* " rest))
+	 (cleaned (org-trim (substring (org-columns-cleanup-item fake fmt) 1))))
+    (if org-agenda-columns-remove-prefix-from-item
+	cleaned
+      (concat prefix cleaned))))
 
 (defun org-columns-show-value ()
   "Show the full value of the property."
@@ -381,7 +427,7 @@
 
       (cond
        ((equal major-mode 'org-agenda-mode)
-	(org-columns-eval '(org-entry-put pom key nval))
+	(org-columns-eval eval)
 	;; The following let preserves the current format, and makes sure
 	;; that in only a single file things need to be upated.
 	(let* ((org-agenda-overriding-columns-format org-columns-current-fmt)
@@ -411,7 +457,8 @@
   "Edit the current headline, the part without TODO keyword, TAGS."
   (org-back-to-heading)
   (when (looking-at org-todo-line-regexp)
-    (let ((pre (buffer-substring (match-beginning 0) (match-beginning 3)))
+    (let ((pos (point))
+	  (pre (buffer-substring (match-beginning 0) (match-beginning 3)))
 	  (txt (match-string 3))
 	  (post "")
 	  txt2)
@@ -420,7 +467,7 @@
 		txt (substring txt 0 (match-beginning 0))))
       (setq txt2 (read-string "Edit: " txt))
       (when (not (equal txt txt2))
-	(beginning-of-line 1)
+	(goto-char pos)
 	(insert pre txt2 post)
 	(delete-region (point) (point-at-eol))
 	(org-set-tags nil t)))))
@@ -461,8 +508,10 @@
   (interactive)
   (org-columns-next-allowed-value t))
 
-(defun org-columns-next-allowed-value (&optional previous)
-  "Switch to the next allowed value for this column."
+(defun org-columns-next-allowed-value (&optional previous nth)
+  "Switch to the next allowed value for this column.
+When PREVIOUS is set, go to the previous value.  When NTH is
+an integer, select that value."
   (interactive)
   (org-columns-check-computed)
   (let* ((col (current-column))
@@ -484,6 +533,9 @@
 			    '(checkbox checkbox-n-of-m checkbox-percent))
 			   '("[ ]" "[X]"))))
 	 nval)
+    (when (integerp nth)
+      (setq nth (1- nth))
+      (if (= nth -1) (setq nth 9)))
     (when (equal key "ITEM")
       (error "Cannot edit item headline from here"))
     (unless (or allowed (member key '("SCHEDULED" "DEADLINE")))
@@ -491,11 +543,18 @@
     (if (member key '("SCHEDULED" "DEADLINE"))
 	(setq nval (if previous 'earlier 'later))
       (if previous (setq allowed (reverse allowed)))
-      (if (member value allowed)
-	  (setq nval (car (cdr (member value allowed)))))
-      (setq nval (or nval (car allowed)))
-      (if (equal nval value)
-	  (error "Only one allowed value for this property")))
+      (cond
+       (nth
+	(setq nval (nth nth allowed))
+	(if (not nval)
+	    (error "There are only %d allowed values for property `%s'"
+		   (length allowed) key)))
+       ((member value allowed)
+	(setq nval (or (car (cdr (member value allowed)))
+		       (car allowed)))
+	(if (equal nval value)
+	    (error "Only one allowed value for this property")))
+       (t (setq nval (car allowed)))))
     (cond
      ((equal major-mode 'org-agenda-mode)
       (org-columns-eval '(org-entry-put pom key nval))
@@ -812,13 +871,18 @@
   "Construct the column display again."
   (interactive)
   (message "Recomputing columns...")
-  (save-excursion
-    (if (marker-position org-columns-begin-marker)
-	(goto-char org-columns-begin-marker))
-    (org-columns-remove-overlays)
-    (if (org-mode-p)
-	(call-interactively 'org-columns)
-      (call-interactively 'org-agenda-columns)))
+  (let ((line (org-current-line))
+	(col (current-column)))
+    (save-excursion
+      (if (marker-position org-columns-begin-marker)
+	  (goto-char org-columns-begin-marker))
+      (org-columns-remove-overlays)
+      (if (org-mode-p)
+	  (call-interactively 'org-columns)
+	(org-agenda-redo)
+	(call-interactively 'org-agenda-columns)))
+    (goto-line line)
+    (move-to-column col))
   (message "Recomputing columns...done"))
 
 (defun org-columns-not-in-agenda ()
@@ -840,7 +904,7 @@
   (cond
    ((eq fmt 'add_times)
     (let* ((h (floor n)) (m (floor (+ 0.5 (* 60 (- n h))))))
-      (format "%d:%02d" h m)))
+      (format org-time-clocksum-format h m)))
    ((eq fmt 'checkbox)
     (cond ((= n (floor n)) "[X]")
 	  ((> n 1.) "[-]")
@@ -1212,6 +1276,6 @@
 
 (provide 'org-colview)
 
-;;; org-colview.el ends here
+;; arch-tag: 61f5128d-747c-4983-9479-e3871fa3d73c
 
-;; arch-tag: 61f5128d-747c-4983-9479-e3871fa3d73c
+;;; org-colview.el ends here
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-compat.el
--- a/lisp/org/org-compat.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-compat.el	Tue Jun 17 15:22:00 2008 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik 
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -246,8 +246,8 @@
 			      (cadr ext-inv-spec))))
    (move-to-column column force)))
  
-
 (provide 'org-compat)
 
 ;; arch-tag: a0a0579f-e68c-4bdf-9e55-93768b846bbe
+
 ;;; org-compat.el ends here
diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-exp.el
--- a/lisp/org/org-exp.el	Tue Jun 17 11:28:06 2008 +0000
+++ b/lisp/org/org-exp.el	Tue Jun 17 15:22:00 2008 +0000
@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik 
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://orgmode.org
-;; Version: 6.02b
+;; Version: 6.05a
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -33,6 +33,8 @@
 (declare-function org-export-latex-preprocess "org-export-latex" ())
 (declare-function org-agenda-skip "org-agenda" ())
 (declare-function org-infojs-options-inbuffer-template "org-jsinfo" ())
+(declare-function htmlize-region "ext:htmlize" (beg end))
+(defvar htmlize-buffer-places)  ; from htmlize.el
 
 (defgroup org-export nil
   "Options for exporting org-listings."
@@ -86,7 +88,9 @@
     ("fr"  "Auteur"          "Date"  "Table des mati\xe8res")
     ("it"  "Autore"          "Data"  "Indice")
     ("nl"  "Auteur"          "Datum" "Inhoudsopgave")
-    ("nn"  "Forfattar"       "Dato"  "Innhold")  ;; nn = Norsk (nynorsk)
+    ("no"  "Forfatter"       "Dato"  "Innhold")
+    ("nb"  "Forfatter"       "Dato"  "Innhold")  ;; nb = Norsk (bokm.l)
+    ("nn"  "Forfattar"       "Dato"  "Innhald")  ;; nn = Norsk (nynorsk)
     ("sv"  "F\xf6rfattarens" "Datum" "Inneh\xe5ll"))
   "Terms used in export text, translated to different languages.
 Use the variable `org-export-default-language' to set the language,
@@ -105,7 +109,7 @@
   :group 'org-export-general
   :type 'string)
 
-(defcustom org-export-skip-text-before-1st-heading t
+(defcustom org-export-skip-text-before-1st-heading nil
   "Non-nil means, skip all text before the first headline when exporting.
 When nil, that text is exported as well."
   :group 'org-export-general
@@ -128,6 +132,26 @@
   :group 'org-export-general
   :type 'boolean)
 
+(defcustom org-export-section-number-format '((("1" ".")) . "")
+  "Format of section numbers for export.
+The variable has two components.
+1. A list of lists, each indicating a counter type and a separator.
+   The counter type can be any of \"1\", \"A\", \"a\", \"I\", or \"a\".
+   It causes causes numeric, alphabetic, or roman counters, respectively.
+   The separator is only used if another counter for a subsection is being
+   added.
+   If there are more numbered section levels than entries in this lists,
+   then the last entry will be reused.
+2. A terminator string that will be added after the entire
+   section number."
+  :group 'org-export-general
+  :type '(cons
+	  (repeat
+	   (list
+	    (string :tag "Counter Type")
+	    (string :tag "Separator   ")))
+	  (string :tag "Terminator")))
+
 (defcustom org-export-with-toc t
   "Non-nil means, create a table of contents in exported files.
 The TOC contains headlines with levels up to`org-export-headline-levels'.
@@ -227,6 +251,10 @@
 	  (repeat :tag "Selected drawers"
 		  (string :tag "Drawer name"))))
 
+(defvar org-export-preprocess-hook nil
+  "Hook for preprocessing an export buffer.
+Pretty much the first thing when exporting is running this hook.")
+
 (defgroup org-export-translation nil
   "Options for translating special ascii sequences for the export backends."
   :tag "Org Export Translation"
@@ -456,12 +484,14 @@
 	background-color: #F3F5F7;
 	padding: 5pt;
 	font-family: courier, monospace;
+        font-size: 90%;
   }
   table { border-collapse: collapse; }
   td, th {
 	vertical-align: top;
 	
   }
+  dt { font-weight: bold; }
 "
   "The default style specification for exported HTML files.
 Since there are different ways of setting style information, this variable
@@ -564,6 +594,25 @@
   :group 'org-export-html
   :type 'string)
 
+(defgroup org-export-htmlize nil
+  "Options for processing examples with htmlize.el."
+  :tag "Org Export Htmlize"
+  :group 'org-export-html)
+
+(defcustom org-export-htmlize-output-type 'inline-css
+  "Output type to be used by htmlize when formatting code snippets.
+Normally this is `inline-css', but if you have defined to appropriate
+classes in your css style file, setting this to `css' means that the
+fontification will use the class names.
+See also the function `org-export-htmlize-generate-css'."
+  :group 'org-export-htmlize
+  :type '(choice (const css) (const inline-css)))
+
+(defcustom org-export-htmlize-css-font-prefix "org-"
+  "The prefix for CSS class names for htmlize font specifications."
+  :group 'org-export-htmlize
+  :type 'string)
+
 (defgroup org-export-icalendar nil
   "Options specific for iCalendar export of Org-mode files."
   :tag "Org Export iCalendar"
@@ -606,6 +655,20 @@
   :group 'org-export-icalendar
   :type 'string)
 
+(defcustom org-icalendar-store-UID nil
+  "Non-nil means, store any created UIDs in properties.
+The iCalendar standard requires that all entries have a unique identifyer.
+Org will create these identifiers as needed.  When this variable is non-nil,
+the created UIDs will be stored in the ID property of the entry.  Then the
+next time this entry is exported, it will be exported with the same UID,
+superceeding the previous form of it.  This is essential for
+synchronization services.
+This variable is not turned on by default because we want to avoid creating
+a property drawer in every entry if people are only playing with this feature,
+or if they are only using it locally."
+  :group 'org-export-icalendar
+  :type 'boolean)
+
 ;;;; Exporting
 
 ;;; Variables, constants, and parameter plists
@@ -630,6 +693,7 @@
     (:customtime           . org-display-custom-times)
     (:headline-levels      . org-export-headline-levels)
     (:section-numbers      . org-export-with-section-numbers)
+    (:section-number-format . org-export-section-number-format)
     (:table-of-contents    . org-export-with-toc)
     (:preserve-breaks      . org-export-preserve-breaks)
     (:archived-trees       . org-export-with-archived-trees)
@@ -694,16 +758,21 @@
   (save-excursion
     (save-restriction
       (widen)
-      (goto-char 0)
+      (goto-char (point-min))
       (let ((re (org-make-options-regexp
 		 (append
 		  '("TITLE" "AUTHOR" "DATE" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE"
-		    "LINK_UP" "LINK_HOME")
+		    "LINK_UP" "LINK_HOME" "SETUPFILE")
 		  (mapcar 'car org-export-inbuffer-options-extra))))
-	    p key val text options js-up js-main js-css js-opt a pr)
-	(while (re-search-forward re nil t)
-	  (setq key (org-match-string-no-properties 1)
-		val (org-match-string-no-properties 2))
+	    p key val text options js-up js-main js-css js-opt a pr
+	    ext-setup-or-nil setup-contents (start 0))
+	(while (or (and ext-setup-or-nil
+			(string-match re ext-setup-or-nil start)
+			(setq start (match-end 0)))
+		   (and (setq ext-setup-or-nil nil start 0)
+			(re-search-forward re nil t)))
+	  (setq key (upcase (org-match-string-no-properties 1 ext-setup-or-nil))
+		val (org-match-string-no-properties 2 ext-setup-or-nil))
 	  (cond
 	   ((setq a (assoc key org-export-inbuffer-options-extra))
 	    (setq pr (nth 1 a))
@@ -716,41 +785,75 @@
 	   ((string-equal key "TEXT")
 	    (setq text (if text (concat text "\n" val) val)))
 	   ((string-equal key "OPTIONS")
-	    (setq options (concat options " " val)))
+	    (setq options (concat val " " options)))
 	   ((string-equal key "LINK_UP")
 	    (setq p (plist-put p :link-up val)))
 	   ((string-equal key "LINK_HOME")
-	    (setq p (plist-put p :link-home val)))))
+	    (setq p (plist-put p :link-home val)))
+	   ((equal key "SETUPFILE")
+	    (setq setup-contents (org-file-contents
+				  (expand-file-name
+				   (org-remove-double-quotes
+				    (org-trim val)))
+				  'noerror))
+	    (if (not ext-setup-or-nil)
+		(setq ext-setup-or-nil setup-contents start 0)
+	      (setq ext-setup-or-nil
+		    (concat (substring ext-setup-or-nil 0 start)
+			    "\n" setup-contents "\n"
+			    (substring ext-setup-or-nil start)))))))
 	(setq p (plist-put p :text text))
 	(when options
-	  (let ((op '(("H"     . :headline-levels)
-		      ("num"   . :section-numbers)
-		      ("toc"   . :table-of-contents)
-		      ("\\n"   . :preserve-breaks)
-		      ("@"     . :expand-quoted-html)
-		      (":"     . :fixed-width)
-		      ("|"     . :tables)
-		      ("^"     . :sub-superscript)
-		      ("-"     . :special-strings)
-		      ("f"     . :footnotes)
-		      ("d"     . :drawers)
-		      ("tags"  . :tags)
-		      ("*"     . :emphasize)
-		      ("TeX"   . :TeX-macros)
-		      ("LaTeX" . :LaTeX-fragments)
-		      ("skip"  . :skip-before-1st-heading)
-		      ("author" . :author-info)
-		      ("timestamp" . :time-stamp-file)))
-		o)
-	    (while (setq o (pop op))
-	      (if (string-match (concat (regexp-quote (car o))
-					":\\([^ \t\n\r;,.]*\\)")
-				options)
-		  (setq p (plist-put p (cdr o)
-				     (car (read-from-string
-					   (match-string 1 options)))))))))
+	  (setq p (org-export-add-options-to-plist p options)))
 	p))))
 
+(defun org-export-add-options-to-plist (p options)
+  "Parse an OPTONS line and set values in the property list P."
+  (let (o)
+    (when options
+      (let ((op '(("H"     . :headline-levels)
+		  ("num"   . :section-numbers)
+		  ("toc"   . :table-of-contents)
+		  ("\\n"   . :preserve-breaks)
+		  ("@"     . :expand-quoted-html)
+		  (":"     . :fixed-width)
+		  ("|"     . :tables)
+		  ("^"     . :sub-superscript)
+		  ("-"     . :special-strings)
+		  ("f"     . :footnotes)
+		  ("d"     . :drawers)
+		  ("tags"  . :tags)
+		  ("*"     . :emphasize)
+		  ("TeX"   . :TeX-macros)
+		  ("LaTeX" . :LaTeX-fragments)
+		  ("skip"  . :skip-before-1st-heading)
+		  ("author" . :author-info)
+		  ("timestamp" . :time-stamp-file)))
+	    o)
+	(while (setq o (pop op))
+	  (if (string-match (concat (regexp-quote (car o))
+				    ":\\([^ \t\n\r;,.]*\\)")
+			    options)
+	      (setq p (plist-put p (cdr o)
+				 (car (read-from-string
+				       (match-string 1 options))))))))))
+  p)
+  
+(defun org-export-add-subtree-options (p pos)
+  "Add options in subtree at position POS to property list P."
+  (save-excursion
+    (goto-char pos)
+    (when (org-at-heading-p)
+      (let (a)
+	;; This is actually read in `org-export-get-title-from-subtree'
+	;; (when (setq a (org-entry-get pos "EXPORT_TITLE"))
+	;;   (setq p (plist-put p :title a)))
+	(when (setq a (org-entry-get pos "EXPORT_TEXT"))
+	  (setq p (plist-put p :text a)))
+	(when (setq a (org-entry-get pos "EXPORT_OPTIONS"))
+	  (setq p (org-export-add-options-to-plist p a)))))
+    p))
+
 (defun org-export-directory (type plist)
   (let* ((val (plist-get plist :publishing-directory))
 	 (dir (if (listp val)
@@ -758,6 +861,12 @@
 		val)))
     dir))
 
+(defun org-export-process-option-filters (plist)
+  (let ((functions org-export-options-filters) f)
+    (while (setq f (pop functions))
+      (setq plist (funcall f plist))))
+  plist)
+
 ;;;###autoload
 (defun org-export (&optional arg)
   "Export dispatcher for Org-mode.
@@ -1151,51 +1260,41 @@
 The result is then again returned as a string, and the exporter works
 on this string to produce the exported version."
   (interactive)
-  (let* ((re-radio (and org-target-link-regexp
-			(concat "\\([^<]\\)\\(" org-target-link-regexp "\\)")))
-	 (re-plain-link (concat "\\([^[<]\\)" org-plain-link-re))
-	 (re-angle-link (concat "\\([^[]\\)" org-angle-link-re))
-	 (re-archive (concat ":" org-archive-tag ":"))
-	 (re-quote (concat "^\\*+[ \t]+" org-quote-string "\\>"))
-	 (re-commented (concat "^\\*+[ \t]+" org-comment-string "\\>"))
-	 (htmlp (plist-get parameters :for-html))
+  (let* ((htmlp (plist-get parameters :for-html))
 	 (asciip (plist-get parameters :for-ascii))
 	 (latexp (plist-get parameters :for-LaTeX))
-	 (commentsp (plist-get parameters :comments))
 	 (archived-trees (plist-get parameters :archived-trees))
 	 (inhibit-read-only t)
 	 (drawers org-drawers)
-	 (exp-drawers (plist-get parameters :drawers))
 	 (outline-regexp "\\*+ ")
-	 target-alist tmp target level
-	 a b xx rtn p)
+	 target-alist rtn)
 
     (with-current-buffer (get-buffer-create " org-mode-tmp")
       (erase-buffer)
       (insert string)
+      (setq case-fold-search t)
+      ;; Call the hook
+      (run-hooks 'org-export-preprocess-hook)
+
       ;; Remove license-to-kill stuff
       ;; The caller markes some stuff fo killing, stuff that has been
       ;; used to create the page title, for example.
-      (while (setq p (text-property-any (point-min) (point-max)
-					:org-license-to-kill t))
-	(delete-region p (next-single-property-change p :org-license-to-kill)))
-
+      (org-export-kill-licensed-text)
+      
       (let ((org-inhibit-startup t)) (org-mode))
+      (setq case-fold-search t)
       (untabify (point-min) (point-max))
-
+      
+      ;; Handle incude files
+      (org-export-handle-include-files)
+      
+      ;; Handle source code snippets
+      (org-export-replace-src-segments)
+      
       ;; Get rid of drawers
-      (unless (eq t exp-drawers)
-	(goto-char (point-min))
-	(let ((re (concat "^[ \t]*:\\("
-			  (mapconcat
-			   'identity
-			   (org-delete-all exp-drawers
-					   (copy-sequence drawers))
-			   "\\|")
-			  "\\):[ \t]*\n\\([^@]*?\n\\)?[ \t]*:END:[ \t]*\n")))
-	  (while (re-search-forward re nil t)
-	    (replace-match ""))))
-
+      (org-export-remove-or-extract-drawers drawers
+					    (plist-get parameters :drawers))
+      
       ;; Get the correct stuff before the first headline
       (when (plist-get parameters :skip-before-1st-heading)
 	(goto-char (point-min))
@@ -1206,247 +1305,390 @@
       (when (plist-get parameters :add-text)
 	(goto-char (point-min))
 	(insert (plist-get parameters :add-text) "\n"))
-
+      
       ;; Get rid of archived trees
-      (when (not (eq archived-trees t))
-	(goto-char (point-min))
-	(while (re-search-forward re-archive nil t)
-	  (if (not (org-on-heading-p t))
-	      (org-end-of-subtree t)
-	    (beginning-of-line 1)
-	    (setq a (if archived-trees
-			(1+ (point-at-eol)) (point))
-		  b (org-end-of-subtree t))
-	    (if (> b a) (delete-region a b)))))
-
+      (org-export-remove-archived-trees archived-trees)
+      
       ;; Find all headings and compute the targets for them
-      (goto-char (point-min))
-      (org-init-section-numbers)
-      (let ((re (concat "^" org-outline-regexp)))
-	(while (re-search-forward re nil t)
-	  (setq level (org-reduced-level
-		       (save-excursion (goto-char (point-at-bol))
-				       (org-outline-level))))
-	  (setq target (org-solidify-link-text
-			(format "sec-%s" (org-section-number level))))
-	  (push (cons target target) target-alist)
-	  (add-text-properties
-	   (point-at-bol) (point-at-eol)
-	   (list 'target target))))
+      (setq target-alist (org-export-define-heading-targets target-alist))
 
       ;; Find targets in comments and move them out of comments,
       ;; but mark them as targets that should be invisible
-      (goto-char (point-min))
-      (while (re-search-forward "^#.*?\\(<<\r\n]+\\)>>>?\\).*" nil t)
-	;; Check if the line before or after is a headline with a target
-	(if (setq target (or (get-text-property (point-at-bol 0) 'target)
-			     (get-text-property (point-at-bol 2) 'target)))
-	    (progn
-	      ;; use the existing target in a neighboring line
-	      (setq tmp (match-string 2))
-	      (replace-match "")
-	      (and (looking-at "\n") (delete-char 1))
-	      (push (cons (org-solidify-link-text tmp) target)
-		    target-alist))
-	  ;; Make an invisible target
-	  (replace-match "\\1(INVISIBLE)")))
+      (setq target-alist (org-export-handle-invisible-targets target-alist))
+
+      ;; Protect examples
+      (org-export-protect-examples)
 
       ;; Protect backend specific stuff, throw away the others.
-      (let ((formatters
-	     `((,htmlp "HTML" "BEGIN_HTML" "END_HTML")
-	       (,asciip "ASCII" "BEGIN_ASCII" "END_ASCII")
-	       (,latexp "LaTeX" "BEGIN_LaTeX" "END_LaTeX")))
-	    fmt)
-	(goto-char (point-min))
-	(while (re-search-forward "^#\\+BEGIN_EXAMPLE[ \t]*\n" nil t)
-	  (goto-char (match-end 0))
-	  (while (not (looking-at "#\\+END_EXAMPLE"))
-	    (insert ": ")
-	    (beginning-of-line 2)))
-	(goto-char (point-min))
-	(while (re-search-forward "^[ \t]*:.*\\(\n[ \t]*:.*\\)*" nil t)
-	  (add-text-properties (match-beginning 0) (match-end 0)
-			       '(org-protected t)))
-	(while formatters
-	  (setq fmt (pop formatters))
-	  (when (car fmt)
-	    (goto-char (point-min))
-	    (while (re-search-forward (concat "^#\\+" (cadr fmt)
-					      ":[ \t]*\\(.*\\)") nil t)
-	      (replace-match "\\1" t)
-	      (add-text-properties
-	       (point-at-bol) (min (1+ (point-at-eol)) (point-max))
-	       '(org-protected t))))
-	  (goto-char (point-min))
-	  (while (re-search-forward
-		  (concat "^#\\+"
-			  (caddr fmt) "\\>.*\\(\\(\n.*\\)*?\n\\)#\\+"
-			  (cadddr fmt) "\\>.*\n?") nil t)
-	    (if (car fmt)
-		(add-text-properties (match-beginning 1) (1+ (match-end 1))
-				     '(org-protected t))
-	      (delete-region (match-beginning 0) (match-end 0))))))
+      (org-export-select-backend-specific-text
+       (cond (htmlp 'html) (latexp 'latex) (asciip 'ascii)))
 
       ;; Protect quoted subtrees
-      (goto-char (point-min))
-      (while (re-search-forward re-quote nil t)
-	(goto-char (match-beginning 0))
-	(end-of-line 1)
-	(add-text-properties (point) (org-end-of-subtree t)
-			     '(org-protected t)))
+      (org-export-protect-quoted-subtrees)
 
       ;; Protect verbatim elements
-      (goto-char (point-min))
-      (while (re-search-forward org-verbatim-re nil t)
-	(add-text-properties (match-beginning 4) (match-end 4)
-			     '(org-protected t))
-	(goto-char (1+ (match-end 4))))
-
-      ;; Remove subtrees that are commented
-      (goto-char (point-min))
-      (while (re-search-forward re-commented nil t)
-	(goto-char (match-beginning 0))
-	(delete-region (point) (org-end-of-subtree t)))
+      (org-export-protect-verbatim)
+
+      ;; Blockquotes and verse
+      (org-export-mark-blockquote-and-verse)
+
+      ;; Remove comment environment and comment subtrees
+      (org-export-remove-comment-blocks-and-subtrees)
 
       ;; Remove special table lines
       (when org-export-table-remove-special-lines
-	(goto-char (point-min))
-	(while (re-search-forward "^[ \t]*|" nil t)
-	  (beginning-of-line 1)
-	  (if (or (looking-at "[ \t]*| *[!_^] *|")
-		  (and (looking-at ".*?| *<[0-9]+> *|")
-		       (not (looking-at ".*?| *[^ <|]"))))
-	      (delete-region (max (point-min) (1- (point-at-bol)))
-			     (point-at-eol))
-	    (end-of-line 1))))
+	(org-export-remove-special-table-lines))
 
       ;; Specific LaTeX stuff
       (when latexp
 	(require 'org-export-latex nil)
 	(org-export-latex-preprocess))
 
+      ;; Specific ASCII stuff
       (when asciip
-	(org-export-ascii-clean-string))
+	(org-export-ascii-preprocess))
 
       ;; Specific HTML stuff
       (when htmlp
-	;; Convert LaTeX fragments to images
-	(when (plist-get parameters :LaTeX-fragments)
-	  (org-format-latex
-	   (concat "ltxpng/" (file-name-sans-extension
-			      (file-name-nondirectory
-			       org-current-export-file)))
-	   org-current-export-dir nil "Creating LaTeX image %s"))
-	(message "Exporting..."))
+	(org-export-html-preprocess parameters))
 
       ;; Remove or replace comments
-      (goto-char (point-min))
-      (while (re-search-forward "^#\\(.*\n?\\)" nil t)
-	(if commentsp
-	    (progn (add-text-properties
-		    (match-beginning 0) (match-end 0) '(org-protected t))
-		   (replace-match (format commentsp (match-string 1)) t t))
-	  (replace-match "")))
+      (org-export-handle-comments (plist-get parameters :comments))
 
       ;; Find matches for radio targets and turn them into internal links
-      (goto-char (point-min))
-      (when re-radio
-	(while (re-search-forward re-radio nil t)
-	  (org-if-unprotected
-	   (replace-match "\\1[[\\2]]"))))
+      (org-export-mark-radio-links)
 
       ;; Find all links that contain a newline and put them into a single line
-      (goto-char (point-min))
-      (while (re-search-forward "\\(\\(\\[\\|\\]\\)\\[[^]]*?\\)[ \t]*\n[ \t]*\\([^]]*\\]\\(\\[\\|\\]\\)\\)" nil t)
-	(org-if-unprotected
-	 (replace-match "\\1 \\3")
-	 (goto-char (match-beginning 0))))
+      (org-export-concatenate-multiline-links)
 
       ;; Find all internal links.  If they have a fuzzy match (i.e. not
       ;; a *dedicated* target match, let the link  point to the
-      ;; correspinding section.
-
-      (goto-char (point-min))
-      (while (re-search-forward org-bracket-link-regexp nil t)
-	(org-if-unprotected
-	 (let* ((md (match-data))
-		(desc (match-end 2))
-		(link (org-link-unescape (match-string 1)))
-		(slink (org-solidify-link-text link))
-		found props pos
-		(target
-		 (or (cdr (assoc slink target-alist))
-		     (save-excursion
-		       (unless (string-match org-link-types-re link)
-			 (setq found (condition-case nil (org-link-search link)
-				       (error nil)))
-			 (when (and found
-				    (or (org-on-heading-p)
-					(not (eq found 'dedicated))))
-			   (or (get-text-property (point) 'target)
-			       (get-text-property
-				(max (point-min)
-				     (1- (previous-single-property-change
-					  (point) 'target)))
-				'target))))))))
-	   (when target
-	     (set-match-data md)
-	     (goto-char (match-beginning 1))
-	     (setq props (text-properties-at (point)))
-	     (delete-region (match-beginning 1) (match-end 1))
-	     (setq pos (point))
-	     (insert target)
-	     (unless desc (insert "][" link))
-	     (add-text-properties pos (point) props)))))
+      ;; corresponding section.
+      (org-export-target-internal-links target-alist)
 
       ;; Normalize links: Convert angle and plain links into bracket links
-      ;; Expand link abbreviations
-      (goto-char (point-min))
-      (while (re-search-forward re-plain-link nil t)
-	(goto-char (1- (match-end 0)))
-	(org-if-unprotected
-	 (let* ((s (concat (match-string 1) "[[" (match-string 2)
-			   ":" (match-string 3) "]]")))
-	   ;; added 'org-link face to links
-	   (put-text-property 0 (length s) 'face 'org-link s)
-	   (replace-match s t t))))
-      (goto-char (point-min))
-      (while (re-search-forward re-angle-link nil t)
-	(goto-char (1- (match-end 0)))
-	(org-if-unprotected
-	 (let* ((s (concat (match-string 1) "[[" (match-string 2)
-			   ":" (match-string 3) "]]")))
-	   (put-text-property 0 (length s) 'face 'org-link s)
-	   (replace-match s t t))))
-      (goto-char (point-min))
-      (while (re-search-forward org-bracket-link-regexp nil t)
-	(org-if-unprotected
-	 (let* ((s (concat "[[" (setq xx (save-match-data
-					   (org-link-expand-abbrev (match-string 1))))
-			   "]"
-			   (if (match-end 3)
-			       (match-string 2)
-			     (concat "[" xx "]"))
-			   "]")))
-	   (put-text-property 0 (length s) 'face 'org-link s)
-	   (replace-match s t t))))
+      ;; and expand link abbreviations
+      (org-export-normalize-links)
 
       ;; Find multiline emphasis and put them into single line
-      (when (plist-get  parameters :emph-multiline)
-	(goto-char (point-min))
-	(while (re-search-forward org-emph-re nil t)
-	  (if (not (= (char-after (match-beginning 3))
-		      (char-after (match-beginning 4))))
-	      (org-if-unprotected
-	       (subst-char-in-region (match-beginning 0) (match-end 0)
-				     ?\n ?\  t)
-	       (goto-char (1- (match-end 0))))
-	    (goto-char (1+ (match-beginning 0))))))
+      (when (plist-get parameters :emph-multiline)
+	(org-export-concatenate-multiline-emphasis))
 
       (setq rtn (buffer-string)))
     (kill-buffer " org-mode-tmp")
     rtn))
 
+(defun org-export-kill-licensed-text ()
+  "Remove all text that is marked with a :org-license-to-kill property."
+  (let (p)
+    (while (setq p (text-property-any (point-min) (point-max)
+				      :org-license-to-kill t))
+      (delete-region p (next-single-property-change p :org-license-to-kill)))))
+
+(defun org-export-define-heading-targets (target-alist)
+  "Find all headings and define the targets for them.
+The new targets are added to TARGET-ALIST, which is also returned."
+  (goto-char (point-min))
+  (org-init-section-numbers)
+  (let ((re (concat "^" org-outline-regexp))
+	level target)
+    (while (re-search-forward re nil t)
+      (setq level (org-reduced-level
+		   (save-excursion (goto-char (point-at-bol))
+				   (org-outline-level))))
+      (setq target (org-solidify-link-text
+		    (format "sec-%s" (org-section-number level))))
+      (push (cons target target) target-alist)
+      (add-text-properties
+       (point-at-bol) (point-at-eol)
+       (list 'target target))))
+  target-alist)
+
+(defun org-export-handle-invisible-targets (target-alist)
+  "Find targets in comments and move them out of comments.
+Mark them as invisible targets."
+  (let (target tmp)
+    (goto-char (point-min))
+    (while (re-search-forward "^#.*?\\(<<\r\n]+\\)>>>?\\).*" nil t)
+      ;; Check if the line before or after is a headline with a target
+      (if (setq target (or (get-text-property (point-at-bol 0) 'target)
+			   (get-text-property (point-at-bol 2) 'target)))
+	  (progn
+	    ;; use the existing target in a neighboring line
+	    (setq tmp (match-string 2))
+	    (replace-match "")
+	    (and (looking-at "\n") (delete-char 1))
+	    (push (cons (org-solidify-link-text tmp) target)
+		  target-alist))
+	;; Make an invisible target
+	(replace-match "\\1(INVISIBLE)"))))
+  target-alist)
+
+(defun org-export-target-internal-links (target-alist)
+  "Find all internal links and assign target to them.
+If a link has a fuzzy match (i.e. not a *dedicated* target match),
+let the link  point to the corresponding section."
+  (goto-char (point-min))
+  (while (re-search-forward org-bracket-link-regexp nil t)
+    (org-if-unprotected
+     (let* ((md (match-data))
+	    (desc (match-end 2))
+	    (link (org-link-unescape (match-string 1)))
+	    (slink (org-solidify-link-text link))
+	    found props pos
+	    (target
+	     (or (cdr (assoc slink target-alist))
+		 (save-excursion
+		   (unless (string-match org-link-types-re link)
+		     (setq found (condition-case nil (org-link-search link)
+				   (error nil)))
+		     (when (and found
+				(or (org-on-heading-p)
+				    (not (eq found 'dedicated))))
+		       (or (get-text-property (point) 'target)
+			   (get-text-property
+			    (max (point-min)
+				 (1- (previous-single-property-change
+				      (point) 'target)))
+			    'target))))))))
+       (when target
+	 (set-match-data md)
+	 (goto-char (match-beginning 1))
+	 (setq props (text-properties-at (point)))
+	 (delete-region (match-beginning 1) (match-end 1))
+	 (setq pos (point))
+	 (insert target)
+	 (unless desc (insert "][" link))
+	 (add-text-properties pos (point) props))))))
+
+(defun org-export-remove-or-extract-drawers (all-drawers exp-drawers)
+  "Remove drawers, or extract the content.
+ALL-DRAWERS is a list of all drawer names valid in the current buffer.
+EXP-DRAWERS can be t to keep all drawer contents, or a list of drawers
+whose content to keep."
+  (unless (eq t exp-drawers)
+    (goto-char (point-min))
+    (let ((re (concat "^[ \t]*:\\("
+		      (mapconcat
+		       'identity
+		       (org-delete-all exp-drawers
+				       (copy-sequence all-drawers))
+		       "\\|")
+		      "\\):[ \t]*\n\\([^@]*?\n\\)?[ \t]*:END:[ \t]*\n")))
+      (while (re-search-forward re nil t)
+	(replace-match "")))))
+
+(defun org-export-remove-archived-trees (export-archived-trees)
+  "Remove archived trees.
+When EXPORT-ARCHIVED-TREES is `headline;, only the headline will be exported.
+When it is t, the entire archived tree will be exported.
+When it is nil the entire tree including the headline will be removed
+from the buffer."
+  (let ((re-archive (concat ":" org-archive-tag ":"))
+	a b)
+    (when (not (eq export-archived-trees t))
+      (goto-char (point-min))
+      (while (re-search-forward re-archive nil t)
+	(if (not (org-on-heading-p t))
+	    (org-end-of-subtree t)
+	  (beginning-of-line 1)
+	  (setq a (if export-archived-trees
+		      (1+ (point-at-eol)) (point))
+		b (org-end-of-subtree t))
+	  (if (> b a) (delete-region a b)))))))
+
+(defun org-export-protect-quoted-subtrees ()
+  "Mark quoted subtrees with the protection property."
+  (let ((re-quote (concat "^\\*+[ \t]+" org-quote-string "\\>")))
+    (goto-char (point-min))
+    (while (re-search-forward re-quote nil t)
+      (goto-char (match-beginning 0))
+      (end-of-line 1)
+      (add-text-properties (point) (org-end-of-subtree t)
+			   '(org-protected t)))))
+
+(defun org-export-protect-verbatim ()
+  "Mark verbatim snippets with the protection property."
+  (goto-char (point-min))
+  (while (re-search-forward org-verbatim-re nil t)
+    (add-text-properties (match-beginning 4) (match-end 4)
+			 '(org-protected t))
+    (goto-char (1+ (match-end 4)))))
+
+(defun org-export-protect-examples ()
+  "Protect code that should be exported as monospaced examples."
+  (goto-char (point-min))
+  (while (re-search-forward "^#\\+BEGIN_EXAMPLE[ \t]*\n" nil t)
+    (goto-char (match-end 0))
+    (while (and (not (looking-at "#\\+END_EXAMPLE")) (not (eobp)))
+      (insert ":  ")
+      (beginning-of-line 2)))
+  (goto-char (point-min))
+  (while (re-search-forward "^[ \t]*:.*\\(\n[ \t]*:.*\\)*" nil t)
+    (add-text-properties (match-beginning 0) (match-end 0)
+			 '(org-protected t))))
+
+(defun org-export-select-backend-specific-text (backend)
+  (let ((formatters
+	 '((html "HTML" "BEGIN_HTML" "END_HTML")
+	   (ascii "ASCII" "BEGIN_ASCII" "END_ASCII")
+	   (latex "LaTeX" "BEGIN_LaTeX" "END_LaTeX")))
+	fmt)
+
+    (while formatters
+      (setq fmt (pop formatters))
+      (when (eq (car fmt) backend)
+	;; This is selected code, put it into the file for real
+	(goto-char (point-min))
+	(while (re-search-forward (concat "^#\\+" (cadr fmt)
+					  ":[ \t]*\\(.*\\)") nil t)
+	  (replace-match "\\1" t)
+	  (add-text-properties
+	   (point-at-bol) (min (1+ (point-at-eol)) (point-max))
+	   '(org-protected t))))
+      (goto-char (point-min))
+      (while (re-search-forward
+	      (concat "^#\\+"
+		      (caddr fmt) "\\>.*\\(\\(\n.*\\)*?\n\\)#\\+"
+		      (cadddr fmt) "\\>.*\n?") nil t)
+	(if (eq (car fmt) backend)
+	    ;; yes, keep this
+	    (add-text-properties (match-beginning 1) (1+ (match-end 1))
+				 '(org-protected t))
+	  ;; No, this is for a different backend, kill it
+	  (delete-region (match-beginning 0) (match-end 0)))))))
+
+(defun org-export-mark-blockquote-and-verse ()
+  "Mark block quote and verse environments with special cookies.
+These special cookies will later be interpreted by the backend."
+  ;; Blockquotes
+  (goto-char (point-min))
+  (while (re-search-forward "^#\\+\\(begin\\|end\\)_\\(block\\)?quote\\>.*"
+			    nil t)
+    (replace-match (if (equal (downcase (match-string 1)) "end")
+		       "ORG-BLOCKQUOTE-END" "ORG-BLOCKQUOTE-START")
+		   t t))
+  ;; Verse
+  (goto-char (point-min))
+  (while (re-search-forward "^#\\+\\(begin\\|end\\)_verse\\>.*" nil t)
+    (replace-match (if (equal (downcase (match-string 1)) "end")
+		       "ORG-VERSE-END" "ORG-VERSE-START")
+		   t t)))
+
+(defun org-export-remove-comment-blocks-and-subtrees ()
+  "Remove the comment environment, and also commented subtrees."
+  (let ((re-commented (concat "^\\*+[ \t]+" org-comment-string "\\>")))
+    ;; Remove comment environment
+    (goto-char (point-min))
+    (while (re-search-forward
+	    "^#\\+BEGIN_COMMENT[ \t]*\n[^\000]*?^#\\+END_COMMENT\\>.*" nil t)
+      (replace-match "" t t))
+    ;; Remove subtrees that are commented
+    (goto-char (point-min))
+    (while (re-search-forward re-commented nil t)
+      (goto-char (match-beginning 0))
+      (delete-region (point) (org-end-of-subtree t)))))
+
+(defun org-export-handle-comments (commentsp)
+  "Remove comments, or convert to backend-specific format.
+COMMENTSP can be a format string for publishing comments.
+When it is nil, all comments will be removed."
+  (let ((re "^#\\(.*\n?\\)")
+	pos)
+    (goto-char (point-min))
+    (while (or (looking-at re)
+	       (re-search-forward re nil t))
+      (setq pos (match-beginning 0))
+      (if commentsp
+	  (progn (add-text-properties
+		  (match-beginning 0) (match-end 0) '(org-protected t))
+		 (replace-match (format commentsp (match-string 1)) t t))
+	(goto-char (1+ pos))
+	(org-if-unprotected
+	 (replace-match "")
+	 (goto-char (max (point-min) (1- pos))))))))
+
+(defun org-export-mark-radio-links ()
+  "Find all matches for radio targets and turn them into internal links."
+  (let ((re-radio (and org-target-link-regexp
+		       (concat "\\([^<]\\)\\(" org-target-link-regexp "\\)"))))
+    (goto-char (point-min))
+    (when re-radio
+      (while (re-search-forward re-radio nil t)
+	(org-if-unprotected
+	 (replace-match "\\1[[\\2]]"))))))
+
+(defun org-export-remove-special-table-lines ()
+  "Remove tables lines that are used for internal purposes."
+  (goto-char (point-min))
+  (while (re-search-forward "^[ \t]*|" nil t)
+    (beginning-of-line 1)
+    (if (or (looking-at "[ \t]*| *[!_^] *|")
+	    (and (looking-at ".*?| *<[0-9]+> *|")
+		 (not (looking-at ".*?| *[^ <|]"))))
+	(delete-region (max (point-min) (1- (point-at-bol)))
+		       (point-at-eol))
+      (end-of-line 1))))
+
+(defun org-export-normalize-links ()
+  "Convert all links to bracket links, and expand link abbreviations."
+  (let ((re-plain-link (concat "\\([^[<]\\)" org-plain-link-re))
+	(re-angle-link (concat "\\([^[]\\)" org-angle-link-re)))
+    (goto-char (point-min))
+    (while (re-search-forward re-plain-link nil t)
+      (goto-char (1- (match-end 0)))
+      (org-if-unprotected
+       (let* ((s (concat (match-string 1) "[[" (match-string 2)
+			 ":" (match-string 3) "]]")))
+	 ;; added 'org-link face to links
+	 (put-text-property 0 (length s) 'face 'org-link s)
+	 (replace-match s t t))))
+    (goto-char (point-min))
+    (while (re-search-forward re-angle-link nil t)
+      (goto-char (1- (match-end 0)))
+      (org-if-unprotected
+       (let* ((s (concat (match-string 1) "[[" (match-string 2)
+			 ":" (match-string 3) "]]")))
+	 (put-text-property 0 (length s) 'face 'org-link s)
+	 (replace-match s t t))))
+    (goto-char (point-min))
+    (while (re-search-forward org-bracket-link-regexp nil t)
+      (org-if-unprotected
+       (let* ((xx (save-match-data
+		    (org-link-expand-abbrev (match-string 1))))
+	      (s (concat
+		  "[[" xx "]"
+		  (if (match-end 3)
+		      (match-string 2)
+		    (concat "[" xx "]"))
+		  "]")))
+	 (put-text-property 0 (length s) 'face 'org-link s)
+	 (replace-match s t t))))))
+  
+(defun org-export-concatenate-multiline-links ()
+  "Find multi-line links and put it all into a single line.
+This is to make sure that the line-processing export backends
+can work correctly."
+  (goto-char (point-min))
+  (while (re-search-forward "\\(\\(\\[\\|\\]\\)\\[[^]]*?\\)[ \t]*\n[ \t]*\\([^]]*\\]\\(\\[\\|\\]\\)\\)" nil t)
+    (org-if-unprotected
+     (replace-match "\\1 \\3")
+     (goto-char (match-beginning 0)))))
+
+(defun org-export-concatenate-multiline-emphasis ()
+  "Find multi-line emphasis and put it all into a single line.
+This is to make sure that the line-processing export backends
+can work correctly."
+  (goto-char (point-min))
+  (while (re-search-forward org-emph-re nil t)
+    (if (not (= (char-after (match-beginning 3))
+		(char-after (match-beginning 4))))
+	(org-if-unprotected
+	 (subst-char-in-region (match-beginning 0) (match-end 0)
+			       ?\n ?\  t)
+	 (goto-char (1- (match-end 0))))
+      (goto-char (1+ (match-beginning 0))))))
+
 (defun org-export-grab-title-from-buffer ()
   "Get a title for the current document, from looking at the buffer."
   (let ((inhibit-read-only t))
@@ -1463,18 +1705,19 @@
 
 (defun org-export-get-title-from-subtree ()
   "Return subtree title and exclude it from export."
-  (let (title (m (mark)))
+  (let (title (m (mark)) (rbeg (region-beginning)) (rend (region-end)))
     (save-excursion
-      (goto-char (region-beginning))
+      (goto-char rbeg)
       (when (and (org-at-heading-p)
-		 (>= (org-end-of-subtree t t) (region-end)))
+		 (>= (org-end-of-subtree t t) rend))
 	;; This is a subtree, we take the title from the first heading
-	(goto-char (region-beginning))
+	(goto-char rbeg)
 	(looking-at org-todo-line-regexp)
 	(setq title (match-string 3))
 	(org-unmodified
 	 (add-text-properties (point) (1+ (point-at-eol))
-			      (list :org-license-to-kill t)))))
+			      (list :org-license-to-kill t)))
+	(setq title (or (org-entry-get nil "EXPORT_TITLE") title))))
     title))
 
 (defun org-solidify-link-text (s &optional alist)
@@ -1512,14 +1755,19 @@
 	(if (string-match "\\`[A-Z]\\'" number-string)
 	    (aset org-section-numbers i
 		  (- (string-to-char number-string) ?A -1))
-	    (aset org-section-numbers i (string-to-number number-string)))
+	  (aset org-section-numbers i (string-to-number number-string)))
 	(pop numbers))
       (setq i (1- i)))))
 
 (defun org-section-number (&optional level)
   "Return a string with the current section number.
 When LEVEL is non-nil, increase section numbers on that level."
-  (let* ((depth (1- (length org-section-numbers))) idx n (string ""))
+  (let* ((depth (1- (length org-section-numbers)))
+	 (string "")
+	 (fmts (car org-export-section-number-format))
+	 (term (cdr org-export-section-number-format))
+	 (sep "")
+	 ctype fmt idx n)
     (when level
       (when (> level -1)
 	(aset org-section-numbers
@@ -1531,16 +1779,153 @@
 	(setq idx (1+ idx))))
     (setq idx 0)
     (while (<= idx depth)
-      (setq n (aref org-section-numbers idx))
-      (setq string (concat string (if (not (string= string "")) "." "")
-			   (int-to-string n)))
+      (when (> (aref org-section-numbers idx) 0)
+	(setq fmt (or (pop fmts) fmt)
+	      ctype (car fmt)
+	      n (aref org-section-numbers idx)
+	      string (if (> n 0)
+			 (concat string sep (org-number-to-counter n ctype))
+		       (concat string ".0"))
+	      sep (nth 1 fmt)))
       (setq idx (1+ idx)))
     (save-match-data
       (if (string-match "\\`\\([@0]\\.\\)+" string)
 	  (setq string (replace-match "" t nil string)))
       (if (string-match "\\(\\.0\\)+\\'" string)
 	  (setq string (replace-match "" t nil string))))
-    string))
+    (concat string term)))
+
+(defun org-number-to-counter (n type)
+  "Concert number N to a string counter, according to TYPE.
+TYPE must be a string, any of:
+ 1  number
+ A  A,B,....
+ a  a,b,....
+ I  uppper case roman numeral
+ i  lower case roman numeral"
+  (cond
+   ((equal type "1") (number-to-string n))
+   ((equal type "A") (char-to-string (+ ?A n -1)))
+   ((equal type "a") (char-to-string (+ ?a n -1)))
+   ((equal type "I") (org-number-to-roman n))
+   ((equal type "i") (downcase (org-number-to-roman n)))
+   (t (error "Invalid counter type `%s'" type))))
+
+(defun org-number-to-roman (n)
+  "Convert integer N into a roman numeral."
+  (let ((roman '((1000 . "M") (900 . "CM") (500 . "D") (400 . "CD")
+		 ( 100 . "C") ( 90 . "XC") ( 50 . "L") ( 40 . "XL")
+		 (  10 . "X") (  9 . "IX") (  5 . "V") (  4 . "IV")
+		 (   1 . "I")))
+	(res ""))
+    (if (<= n 0)
+	(number-to-string n)
+      (while roman
+	(if (>= n (caar roman))
+	    (setq n (- n (caar roman))
+		  res (concat res (cdar roman)))
+	  (pop roman)))
+      res)))
+
+(org-number-to-roman 1961)
+   
+
+;;; Include files
+
+(defun org-export-handle-include-files ()
+  "Include the contents of include files, with proper formatting."
+  (let ((case-fold-search t)
+	params file markup lang start end)
+    (goto-char (point-min))
+    (while (re-search-forward "^#\\+INCLUDE:?[ \t]+\\(.*\\)" nil t)
+      (setq params (read (concat "(" (match-string 1) ")"))
+	    file (org-symname-or-string (pop params))
+	    markup (org-symname-or-string (pop params))
+	    lang (org-symname-or-string (pop params)))
+      (delete-region (match-beginning 0) (match-end 0))
+      (if (or (not file)
+	      (not (file-exists-p file))
+	      (not (file-readable-p file)))
+	  (insert (format "CANNOT INCLUDE FILE %s" file))
+	(when markup
+	  (if (equal (downcase markup) "src")
+	      (setq start (format "#+begin_src %s\n" (or lang "fundamental"))
+		    end "#+end_src")
+	    (setq start (format "#+begin_%s\n" markup)
+		  end  (format "#+end_%s" markup))))
+	(insert (or start ""))
+	(forward-char (nth 1 (insert-file-contents (expand-file-name file))))
+	(or (bolp) (newline))
+	(insert (or end ""))))))
+
+(defun org-symname-or-string (s)
+  (if (symbolp s)
+      (if s (symbol-name s) s)
+    s))
+
+;;; Fontification of code
+;; Currently only for th HTML backend, but who knows....
+(defun org-export-replace-src-segments ()
+  "Replace source code segments with special code for export."
+  (let ((case-fold-search t)
+	lang code trans)
+    (goto-char (point-min))
+    (while (re-search-forward
+	    "^#\\+BEGIN_SRC:?[ \t]+\\([^ \t\n]+\\)[ \t]*\n\\([^\000]+?\n\\)#\\+END_SRC.*"
+	    nil t)
+      (setq lang (match-string 1) code (match-string 2)
+	    trans (org-export-format-source-code lang code))
+      (replace-match trans t t))))
+
+(defvar htmlp)  ;; dynamically scoped from org-exp.el
+
+(defun org-export-format-source-code (lang code)
+  "Format CODE from language LANG and return it formatted for export.
+Currently, this only does something for HTML export, for all other
+backends, it converts the segment into an EXAMPLE segment."
+  (save-match-data
+    (cond
+     (htmlp
+      ;; We are exporting to HTML
+      (condition-case nil (require 'htmlize) (nil t))
+      (if (not (fboundp 'htmlize-region-for-paste))
+	  (progn
+	    ;; we do not have htmlize.el, or an old version of it
+	    (message
+	     "htmlize.el 1.34 or later is needed for source code formatting")
+	    (concat "#+BEGIN_EXAMPLE\n" code
+		    (if (string-match "\n\\'" code) "" "\n")
+		    "#+END_EXAMPLE\n"))
+	;; ok, we are good to go
+	(let* ((mode (and lang (intern (concat lang "-mode"))))
+	       (org-inhibit-startup t)
+	       (org-startup-folded nil)
+	       (htmltext
+		(with-temp-buffer
+		  (insert code)
+		  ;; Free up the protected stuff
+		  (goto-char (point-min))
+		  (while (re-search-forward "^," nil t)
+		    (replace-match "")
+		    (end-of-line 1))
+		  (if (functionp mode)
+		      (funcall mode)
+		    (fundamental-mode))
+		  (font-lock-fontify-buffer)
+		  (org-export-htmlize-region-for-paste
+		   (point-min) (point-max)))))
+	  (if (string-match "]*\\)>\n?" htmltext)
+	      (setq htmltext (replace-match "
"
+					    t t htmltext)))
+	  (concat "#+BEGIN_HTML\n" htmltext "\n#+END_HTML\n"))))
+     (t
+      ;; This is not HTML, so just make it an example.
+      (when (equal lang "org")
+	(while (string-match "^," code)
+	  (setq code (replace-match "" t t code))))
+      (concat "#+BEGIN_EXAMPLE\n" code
+	      (if (string-match "\n\\'" code) "" "\n")
+	      "#+END_EXAMPLE\n")))))
 
 ;;; ASCII export
 
@@ -1560,12 +1945,17 @@
   (let* ((opt-plist (org-combine-plists (org-default-export-plist)
 					(org-infile-export-plist)))
 	 (region-p (org-region-active-p))
+	 (rbeg (and region-p (region-beginning)))
+	 (rend (and region-p (region-end)))
 	 (subtree-p
 	  (when region-p
 	    (save-excursion
-	      (goto-char (region-beginning))
+	      (goto-char rbeg)
 	      (and (org-at-heading-p)
-		   (>= (org-end-of-subtree t t) (region-end))))))
+		   (>= (org-end-of-subtree t t) rend)))))
+	 (opt-plist (if subtree-p 
+			(org-export-add-subtree-options opt-plist rbeg)
+		      opt-plist))
 	 (custom-times org-display-custom-times)
 	 (org-ascii-current-indentation '(0 . 0))
 	 (level 0) line txt
@@ -1673,7 +2063,8 @@
     (if org-export-with-toc
 	(progn
 	  (push (concat (nth 3 lang-words) "\n") thetoc)
-	  (push (concat (make-string (length (nth 3 lang-words)) ?=) "\n") thetoc)
+	  (push (concat (make-string (string-width (nth 3 lang-words)) ?=)
+			"\n") thetoc)
 	  (mapc '(lambda (line)
 		   (if (string-match org-todo-line-regexp
 				     line)
@@ -1810,7 +2201,7 @@
 	(goto-char beg)))
     (goto-char (point-min))))
 
-(defun org-export-ascii-clean-string ()
+(defun org-export-ascii-preprocess ()
   "Do extra work for ASCII export"
   (goto-char (point-min))
   (while (re-search-forward org-verbatim-re nil t)
@@ -1847,7 +2238,7 @@
 
 (defun org-insert-centered (s &optional underline)
   "Insert the string S centered and underline it with character UNDERLINE."
-  (let ((ind (max (/ (- 80 (string-width s)) 2) 0)))
+  (let ((ind (max (/ (- fill-column (string-width s)) 2) 0)))
     (insert (make-string ind ?\ ) s "\n")
     (if underline
 	(insert (make-string ind ?\ )
@@ -1984,6 +2375,7 @@
 #+DRAWERS:   %s
 #+STARTUP:   %s %s %s %s %s
 #+TAGS:      %s
+#+FILETAGS:  %s
 #+ARCHIVE:   %s
 #+LINK:      %s
 "
@@ -2006,7 +2398,7 @@
    org-export-skip-text-before-1st-heading
    org-export-with-drawers
    org-export-with-tags
-   (if (featurep 'org-infojs) (org-infojs-options-inbuffer-template) "")
+   (if (featurep 'org-jsinfo) (org-infojs-options-inbuffer-template) "")
    org-export-html-link-up
    org-export-html-link-home
    (file-name-nondirectory buffer-file-name)
@@ -2029,10 +2421,21 @@
 		     ((cdr x) (format "%s(%c)" (car x) (cdr x)))
 		     (t (car x))))
 		  (or org-tag-alist (org-get-buffer-tags)) " ") "")
+   (mapconcat 'identity org-file-tags " ")
    org-archive-location
    "org file:~/org/%s.org"
    ))
 
+(defun org-export-html-preprocess (parameters)
+  ;; Convert LaTeX fragments to images
+  (when (plist-get parameters :LaTeX-fragments)
+    (org-format-latex
+     (concat "ltxpng/" (file-name-sans-extension
+			(file-name-nondirectory
+			 org-current-export-file)))
+     org-current-export-dir nil "Creating LaTeX image %s"))
+  (message "Exporting..."))
+
 ;;;###autoload
 (defun org-insert-export-options-template ()
   "Insert into the buffer a template with information for exporting."
@@ -2171,12 +2574,17 @@
 	 valid thetoc have-headings first-heading-pos
 	 (odd org-odd-levels-only)
 	 (region-p (org-region-active-p))
+	 (rbeg (and region-p (region-beginning)))
+	 (rend (and region-p (region-end)))
 	 (subtree-p
 	  (when region-p
 	    (save-excursion
-	      (goto-char (region-beginning))
+	      (goto-char rbeg)
 	      (and (org-at-heading-p)
-		   (>= (org-end-of-subtree t t) (region-end))))))
+		   (>= (org-end-of-subtree t t) rend)))))
+	 (opt-plist (if subtree-p 
+			(org-export-add-subtree-options opt-plist rbeg)
+		      opt-plist))
 	 ;; The following two are dynamically scoped into other
 	 ;; routines below.
 	 (org-current-export-dir
@@ -2222,7 +2630,7 @@
 	 (inquote     nil)
 	 (infixed     nil)
 	 (in-local-list nil)
-	 (local-list-num nil)
+	 (local-list-type nil)
 	 (local-list-indent nil)
 	 (llt org-plain-list-ordered-item-terminator)
 	 (email       (plist-get opt-plist :email))
@@ -2262,9 +2670,9 @@
 	   "[\r\n]"))
 	 table-open type
 	 table-buffer table-orig-buffer
-	 ind start-is-num starter didclose
+	 ind item-type starter didclose
 	 rpl path desc descp desc1 desc2 link
-	 snumber fnc
+	 snumber fnc item-tag
 	 )
 
     (let ((inhibit-read-only t))
@@ -2435,9 +2843,9 @@
 	      (setq infixed t)
 	      (insert "
\n"))
 	    (insert (org-html-protect (match-string 1 line)) "\n")
-	    (when (and lines
-		       (not (string-match "^[ \t]*\\(:.*\\)"
-					  (car lines))))
+	    (when (or (not lines)
+		      (not (string-match "^[ \t]*\\(:.*\\)"
+					 (car lines))))
 	      (setq infixed nil)
 	      (insert "
\n")) (throw 'nextline nil)) @@ -2451,6 +2859,7 @@ (replace-match "\\2\n")) (insert line "\n") (while (and lines + (not (string-match "^[ \t]*:" (car lines))) (or (= (length (car lines)) 0) (get-text-property 0 'org-protected (car lines)))) (insert (pop lines) "\n")) @@ -2462,6 +2871,20 @@ (insert "\n
\n") (throw 'nextline nil)) + ;; Blockquotes and verse + (when (equal "ORG-BLOCKQUOTE-START" line) + (insert "
\n

\n") + (throw 'nextline nil)) + (when (equal "ORG-BLOCKQUOTE-END" line) + (insert "

\n
\n") + (throw 'nextline nil)) + (when (equal "ORG-VERSE-START" line) + (insert "\n

\n") + (throw 'nextline nil)) + (when (equal "ORG-VERSE-END" line) + (insert "

\n
\n") + (throw 'nextline nil)) + ;; make targets to anchors (while (string-match "<<]*\\)>>>?\\((INVISIBLE)\\)?[ \t]*\n?" line) (cond @@ -2620,10 +3043,10 @@ (setq head-count (+ head-count 1))) (when in-local-list ;; Close any local lists before inserting a new header line - (while local-list-num - (org-close-li) - (insert (if (car local-list-num) "\n" "")) - (pop local-list-num)) + (while local-list-type + (org-close-li (car local-list-type)) + (insert (format "\n" (car local-list-type))) + (pop local-list-type)) (setq local-list-indent nil in-local-list nil)) (setq first-heading-pos (or first-heading-pos (point))) @@ -2661,11 +3084,17 @@ (t (error "Invalid value of `org-plain-list-ordered-item-terminator'"))) line) (setq ind (org-get-string-indentation line) - start-is-num (match-beginning 4) + item-type (if (match-beginning 4) "o" "u") starter (if (match-beginning 2) (substring (match-string 2 line) 0 -1)) - line (substring line (match-beginning 5))) - (unless (string-match "[^ \t]" line) + line (substring line (match-beginning 5)) + item-tag nil) + (if (and starter (string-match "\\(.*?\\) ::[ \t]*" line)) + (setq item-type "d" + item-tag (match-string 1 line) + line (substring line (match-end 0)))) + (when (and (not (equal item-type "d")) + (not (string-match "[^ \t]" line))) ;; empty line. Pretend indentation is large. (setq ind (if org-empty-line-terminates-plain-lists 0 @@ -2676,9 +3105,9 @@ (not starter)) (< ind (car local-list-indent)))) (setq didclose t) - (org-close-li) - (insert (if (car local-list-num) "\n" "")) - (pop local-list-num) (pop local-list-indent) + (org-close-li (car local-list-type)) + (insert (format "\n" (car local-list-type))) + (pop local-list-type) (pop local-list-indent) (setq in-local-list local-list-indent)) (cond ((and starter @@ -2686,14 +3115,21 @@ (> ind (car local-list-indent)))) ;; Start new (level of) list (org-close-par-maybe) - (insert (if start-is-num "
    \n
  1. \n" "
      \n
    • \n")) - (push start-is-num local-list-num) + (insert (cond + ((equal item-type "u") "
        \n
      • \n") + ((equal item-type "o") "
          \n
        1. \n") + ((equal item-type "d") + (format "
          \n
          %s
          \n" item-tag)))) + (push item-type local-list-type) (push ind local-list-indent) (setq in-local-list t)) (starter ;; continue current list - (org-close-li) - (insert "
        2. \n")) + (org-close-li (car local-list-type)) + (insert (cond + ((equal (car local-list-type) "d") + (format "
          %s
          \n" (or item-tag "???"))) + (t "
        3. \n")))) (didclose ;; we did close a list, normal text follows: need

          (org-open-par))) @@ -2716,7 +3152,8 @@ (org-close-par-maybe) (let ((n (match-string 1 line))) (setq line (replace-match - (format "

          %s" n n n) t t line))))) + (format "

          %s" n n n) t t line)) + (setq line (concat line "

          "))))) ;; Check if the line break needs to be conserved (cond @@ -2731,10 +3168,10 @@ (when inquote (insert "
\n")) (when in-local-list ;; Close any local lists before inserting a new header line - (while local-list-num - (org-close-li) - (insert (if (car local-list-num) "\n" "\n")) - (pop local-list-num)) + (while local-list-type + (org-close-li (car local-list-type)) + (insert (format "\n" (car local-list-type))) + (pop local-list-type)) (setq local-list-indent nil in-local-list nil)) (org-html-level-start 1 nil umax @@ -2762,6 +3199,8 @@ (insert "

" (nth 2 lang-words) ": " date "

\n")) + (insert (format "

HTML generated by org-mode %s in emacs %s<\p>\n" + org-version emacs-major-version)) (insert "")) (if org-export-html-with-timestamp @@ -3106,6 +3545,54 @@ (setq r (concat r "@
"))) r)))) +(defun org-export-htmlize-region-for-paste (beg end) + "Convert the region to HTML, using htmlize.el. +This is much like `htmlize-region-for-paste', only that it uses +the settings define in the org-... variables." + (let* ((htmlize-output-type org-export-htmlize-output-type) + (htmlize-css-name-prefix org-export-htmlize-css-font-prefix) + (htmlbuf (htmlize-region beg end))) + (unwind-protect + (with-current-buffer htmlbuf + (buffer-substring (plist-get htmlize-buffer-places 'content-start) + (plist-get htmlize-buffer-places 'content-end))) + (kill-buffer htmlbuf)))) + +;;;###autoload +(defun org-export-htmlize-generate-css () + "Create the CSS for all font definitions in the current Emacs session. +Use this to create face definitions in your CSS style file that can then +be used by code snippets transformed by htmlize. +This command just produces a buffer that contains class definitions for all +faces used in the current Emacs session. You can copy and paste the ones you +need into your CSS file. + +If you then set `org-export-htmlize-output-type' to `css', calls to +the function `org-export-htmlize-region-for-paste' will produce code +that uses these same face definitions." + (interactive) + (require 'htmlize) + (and (get-buffer "*html*") (kill-buffer "*html*")) + (with-temp-buffer + (let ((fl (face-list)) + (htmlize-css-name-prefix "org-") + (htmlize-output-type 'css) + f i) + (while (setq f (pop fl) + i (and f (face-attribute f :inherit))) + (when (and (symbolp f) (or (not i) (not (listp i)))) + (insert (org-add-props (copy-sequence "1") nil 'face f)))) + (htmlize-region (point-min) (point-max)))) + (switch-to-buffer "*html*") + (goto-char (point-min)) + (if (re-search-forward "" nil t) + (delete-region (1+ (match-end 0)) (point-max))) + (beginning-of-line 1) + (if (looking-at " +") (replace-match "")) + (goto-char (point-min))) + (defun org-html-protect (s) ;; convert & to &, < to < and > to > (let ((start 0)) @@ -3280,10 +3767,10 @@ (when org-par-open (insert "

") (setq org-par-open nil))) -(defun org-close-li () +(defun org-close-li (&optional type) "Close
  • if necessary." (org-close-par-maybe) - (insert "
  • \n")) + (insert (if (equal type "d") "\n" "\n"))) (defvar body-only) ; dynamically scoped into this. (defun org-html-level-start (level title umax with-toc head-count) @@ -3417,12 +3904,17 @@ (when (or (and combine (not files)) (not combine)) (org-finish-icalendar-file) (set-buffer ical-buffer) + (run-hooks 'org-before-save-iCalendar-file-hook) (save-buffer) (run-hooks 'org-after-save-iCalendar-file-hook) (and (boundp 'org-wait) (numberp org-wait) (sit-for org-wait)) )))) (org-release-buffers org-agenda-new-buffers)))) +(defvar org-before-save-iCalendar-file-hook nil + "Hook run before an iCalendar file has been saved. +This can be used to modify the result of the export.") + (defvar org-after-save-iCalendar-file-hook nil "Hook run after an iCalendar file has been saved. The iCalendar buffer is still current when this hook is run. @@ -3440,7 +3932,8 @@ (format-time-string (cdr org-time-stamp-formats) (current-time)) "DTSTART")) hd ts ts2 state status (inc t) pos b sexp rrule - scheduledp deadlinep tmp pri category entry location summary desc + scheduledp deadlinep prefix + tmp pri category entry location summary desc uid (sexp-buffer (get-buffer-create "*ical-tmp*"))) (org-refresh-category-properties) (save-excursion @@ -3456,7 +3949,9 @@ (setq pos (match-beginning 0) ts (match-string 0) inc t - hd (condition-case nil (org-get-heading) + hd (condition-case nil + (org-icalendar-cleanup-string + (org-get-heading)) (error (throw :skip nil))) summary (org-icalendar-cleanup-string (org-entry-get nil "SUMMARY")) @@ -3466,11 +3961,16 @@ t org-icalendar-include-body) location (org-icalendar-cleanup-string (org-entry-get nil "LOCATION")) - category (org-get-category)) + uid (if org-icalendar-store-UID + (org-id-get-create) + (or (org-id-get) (org-id-new))) + category (org-get-category) + deadlinep nil scheduledp nil) (if (looking-at re2) (progn (goto-char (match-end 0)) - (setq ts2 (match-string 1) inc nil)) + (setq ts2 (match-string 1) + inc (not (string-match "[0-9]\\{1,2\\}:[0-9][0-9]" ts2)))) (setq tmp (buffer-substring (max (point-min) (- pos org-ds-keyword-length)) pos) @@ -3483,6 +3983,7 @@ scheduledp (string-match org-scheduled-regexp tmp) ;; donep (org-entry-is-done-p) )) + (setq prefix (if deadlinep "DL-" (if scheduledp "SC-" "TS-"))) (if (or (string-match org-tr-regexp hd) (string-match org-ts-regexp hd)) (setq hd (replace-match "" t t hd))) @@ -3500,19 +4001,21 @@ (setq summary (replace-match (if (match-end 3) (match-string 3 summary) - (match-string 1 summary)) - t t summary))) + (match-string 1 summary)) + t t summary))) (if deadlinep (setq summary (concat "DL: " summary))) (if scheduledp (setq summary (concat "S: " summary))) (if (string-match "\\`<%%" ts) (with-current-buffer sexp-buffer (insert (substring ts 1 -1) " " summary "\n")) (princ (format "BEGIN:VEVENT +UID: %s %s %s%s SUMMARY:%s%s%s CATEGORIES:%s END:VEVENT\n" + (concat prefix uid) (org-ical-ts-to-string ts "DTSTART") (org-ical-ts-to-string ts2 "DTEND" inc) rrule summary @@ -3521,7 +4024,6 @@ (if (and location (string-match "\\S-" location)) (concat "\nLOCATION: " location) "") category))))) - (when (and org-icalendar-include-sexps (condition-case nil (require 'icalendar) (error nil)) (fboundp 'icalendar-export-region)) @@ -3536,10 +4038,12 @@ (end-of-line 1) (setq sexp (buffer-substring b (point))) (with-current-buffer sexp-buffer - (insert sexp "\n")) - (princ (org-diary-to-ical-string sexp-buffer))))) - + (insert sexp "\n")))) + (princ (org-diary-to-ical-string sexp-buffer)) + (kill-buffer sexp-buffer)) + (when org-icalendar-include-todo + (setq prefix "TODO-") (goto-char (point-min)) (while (re-search-forward org-todo-line-regexp nil t) (catch :skip @@ -3565,7 +4069,10 @@ (and org-icalendar-include-body (org-get-entry))) t org-icalendar-include-body) location (org-icalendar-cleanup-string - (org-entry-get nil "LOCATION"))) + (org-entry-get nil "LOCATION")) + uid (if org-icalendar-store-UID + (org-id-get-create) + (or (org-id-get) (org-id-new)))) (if (string-match org-bracket-link-regexp hd) (setq hd (replace-match (if (match-end 3) (match-string 3 hd) (match-string 1 hd)) @@ -3579,6 +4086,7 @@ (- org-lowest-priority org-highest-priority)))))) (princ (format "BEGIN:VTODO +UID: %s %s SUMMARY:%s%s%s CATEGORIES:%s @@ -3586,13 +4094,15 @@ PRIORITY:%d STATUS:%s END:VTODO\n" + (concat prefix uid) dts (or summary hd) (if (and location (string-match "\\S-" location)) (concat "\nLOCATION: " location) "") (if (and desc (string-match "\\S-" desc)) (concat "\nDESCRIPTION: " desc) "") - category pri status))))))))) + category + pri status))))))))) (defun org-icalendar-cleanup-string (s &optional is-body maxlength) "Take out stuff and quote what needs to be quoted. @@ -3607,7 +4117,7 @@ (while (string-match re s) (setq s (replace-match "" t t s))) (while (string-match re2 s) (setq s (replace-match "" t t s))))) (let ((start 0)) - (while (string-match "\\([,;\\]\\)" s start) + (while (string-match "\\([,;]\\)" s start) (setq start (+ (match-beginning 0) 2) s (replace-match "\\\\\\1" nil nil s)))) (when is-body @@ -3756,12 +4266,7 @@ (provide 'org-exp) +;; arch-tag: 65985fe9-095c-49c7-a7b6-cb4ee15c0a95 + ;;; org-exp.el ends here - -(defun org-export-process-option-filters (plist) - (let ((functions org-export-options-filters) f) - (while (setq f (pop functions)) - (setq plist (funcall f plist)))) - plist) -;; arch-tag: 65985fe9-095c-49c7-a7b6-cb4ee15c0a95 diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-export-latex.el --- a/lisp/org/org-export-latex.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-export-latex.el Tue Jun 17 15:22:00 2008 +0000 @@ -4,7 +4,7 @@ ;; ;; Emacs Lisp Archive Entry ;; Filename: org-export-latex.el -;; Version: 6.02b +;; Version: 6.05a ;; Author: Bastien Guerry ;; Maintainer: Bastien Guerry ;; Keywords: org, wp, tex @@ -361,12 +361,19 @@ (let* ((wcf (current-window-configuration)) (opt-plist org-export-latex-options-plist) (region-p (org-region-active-p)) + (rbeg (and region-p (region-beginning))) + (rend (and region-p (region-end))) (subtree-p (when region-p (save-excursion - (goto-char (region-beginning)) + (goto-char rbeg) (and (org-at-heading-p) - (>= (org-end-of-subtree t t) (region-end)))))) + (>= (org-end-of-subtree t t) rend))))) + (opt-plist (if subtree-p + (org-export-add-subtree-options opt-plist rbeg) + opt-plist)) + ;; Make sure the variable contains the updated values. + (org-export-latex-options-plist opt-plist) (title (or (and subtree-p (org-export-get-title-from-subtree)) (plist-get opt-plist :title) (and (not @@ -378,8 +385,11 @@ (or pub-dir (org-export-directory :LaTeX ext-plist))) (file-name-sans-extension - (file-name-nondirectory ;sans-extension - buffer-file-name)) ".tex")) + (or (and subtree-p + (org-entry-get rbeg "EXPORT_FILE_NAME" t)) + (file-name-nondirectory ;sans-extension + buffer-file-name))) + ".tex")) (filename (if (equal (file-truename filename) (file-truename buffer-file-name)) (concat filename ".tex") @@ -1094,6 +1104,22 @@ (replace-match (org-export-latex-protect-string (concat (match-string 1) "\\LaTeX{}")) t t))) + ;; Convert blockquotes + (goto-char (point-min)) + (while (re-search-forward "^#\\+BEGIN_QUOTE" nil t) + (replace-match "\\begin{quote}" t t)) + (goto-char (point-min)) + (while (re-search-forward "^#\\+END_QUOTE" nil t) + (replace-match "\\end{quote}" t t)) + + ;; Convert verse + (goto-char (point-min)) + (while (re-search-forward "^#\\+BEGIN_VERSE" nil t) + (replace-match "\\begin{verse}" t t)) + (goto-char (point-min)) + (while (re-search-forward "^#\\+END_VERSE" nil t) + (replace-match "\\end{verse}" t t)) + ;; Convert horizontal rules (goto-char (point-min)) (while (re-search-forward "^----+.$" nil t) @@ -1538,4 +1564,5 @@ (provide 'org-export-latex) ;; arch-tag: 23c2b87d-da04-4c2d-ad2d-1eb6487bc3ad + ;;; org-export-latex.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-faces.el --- a/lisp/org/org-faces.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-faces.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -148,13 +148,41 @@ (defface org-column (org-compatible-face nil '((((class color) (min-colors 16) (background light)) - (:background "grey90")) + (:background "grey90" :weight normal :slant normal :strike-through nil + :underline nil)) (((class color) (min-colors 16) (background dark)) - (:background "grey30")) + (:background "grey30" :weight normal :slant normal :strike-through nil + :underline nil)) (((class color) (min-colors 8)) - (:background "cyan" :foreground "black")) + (:background "cyan" :foreground "black" + :weight normal :slant normal :strike-through nil + :underline nil)) (t (:inverse-video t)))) - "Face for column display of entry properties." + "Face for column display of entry properties. +This is actually only part of the face definition for the text in column view. +The following faces apply, with this priority. + +1. The color of the reference face. This is normally the level fact that + is used in the outline. In agenda-mode, it will be the face of the + first character in the line. The color is explicitly retained to + make sure that the column line still looks a bit like the structure + line it is masking. + +2. The `org-column' face. + +3. The remaining properties of the reference face. + +Since column view works by putting overlays with a display property +over individual characters in the buffer, the face of the underlining +character (this might for example be the a TODO keyword) might still +shine through in some properties. So when your column view looks +funny, with \"random\" colors, weight, strike-through, try to explicitly +set the properties in the `org-column' face. For example, set +:underline to nil, or the :slant to `normal'. + +Under XEmacs, the rules are simpler, because the XEmacs version of +column view defines special faces for each outline level. See the file +`org-colview-xemacs.el' for details." :group 'org-faces) (defface org-column-title @@ -457,4 +485,5 @@ (provide 'org-faces) ;; arch-tag: 9dab5f91-c4b9-4d6f-bac3-1f6211ad0a04 + ;;; org-faces.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-gnus.el --- a/lisp/org/org-gnus.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-gnus.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -125,4 +125,5 @@ (provide 'org-gnus) ;; arch-tag: 512e0840-58fa-45b3-b456-71e10fa2376d + ;;; org-gnus.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-info.el --- a/lisp/org/org-info.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-info.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -78,4 +78,5 @@ (provide 'org-info) ;; arch-tag: 1e289f54-7176-487f-b575-dd4854bab15e + ;;; org-info.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-irc.el --- a/lisp/org/org-irc.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-irc.el Tue Jun 17 15:22:00 2008 +0000 @@ -4,7 +4,7 @@ ;; ;; Author: Philip Jackson ;; Keywords: erc, irc, link, org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -252,4 +252,5 @@ (provide 'org-irc) ;; arch-tag: 018d7dda-53b8-4a35-ba92-6670939e525a + ;;; org-irc.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-jsinfo.el --- a/lisp/org/org-jsinfo.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-jsinfo.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -66,6 +66,7 @@ '((path PATH "http://orgmode.org/org-info.js") (view VIEW "info") (toc TOC :table-of-contents) + (ftoc FIXED_TOC "0") (tdepth TOC_DEPTH "max") (sdepth SECTION_DEPTH "max") (mouse MOUSE_HINT "underline") @@ -200,6 +201,8 @@ (cdr (assoc 'path org-infojs-options)))) (provide 'org-infojs) +(provide 'org-jsinfo) ;; arch-tag: c71d1d85-3337-4817-a066-725e74ac9eac + ;;; org-jsinfo.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-mac-message.el --- a/lisp/org/org-mac-message.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-mac-message.el Tue Jun 17 15:22:00 2008 +0000 @@ -3,7 +3,7 @@ ;; Copyright (C) 2008 Free Software Foundation, Inc. ;; Author: John Wiegley -;; Version: 6.02b +;; Version: 6.05a ;; Keywords: outlines, hypermedia, calendar, wp ;; This file is part of GNU Emacs. @@ -79,4 +79,5 @@ (provide 'org-mac-message) ;; arch-tag: 3806d0c1-abe1-4db6-9c31-f3ed7d4a9b32 + ;;; org-mac-message.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-macs.el --- a/lisp/org/org-macs.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-macs.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -89,9 +89,9 @@ (defmacro org-with-point-at (pom &rest body) "Move to buffer and point of point-or-marker POM for the duration of BODY." `(save-excursion - (if (markerp pom) (set-buffer (marker-buffer pom))) + (if (markerp ,pom) (set-buffer (marker-buffer ,pom))) (save-excursion - (goto-char (or pom (point))) + (goto-char (or ,pom (point))) ,@body))) (defmacro org-no-warnings (&rest body) @@ -220,4 +220,5 @@ (provide 'org-macs) ;; arch-tag: 7e6a73ce-aac9-4fc0-9b30-ce6f89dc6668 + ;;; org-macs.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-mew.el --- a/lisp/org/org-mew.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-mew.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Tokuya Kameshima ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; This file is part of GNU Emacs. @@ -123,4 +123,5 @@ (provide 'org-mew) ;; arch-tag: 07ccdca7-6020-4941-a593-588a1e51b870 + ;;; org-mew.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-mhe.el --- a/lisp/org/org-mhe.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-mhe.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Thomas Baumann ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -71,6 +71,7 @@ (defvar mh-show-folder-buffer) (defvar mh-index-folder) (defvar mh-searcher) +(defvar mh-search-regexp-builder) ;; Install the link type (org-add-link-type "mhe" 'org-mhe-open) @@ -137,11 +138,11 @@ ))) (defun org-mhe-get-message-folder-from-index () - "Return the name of the message folder in a index folder buffer." + "Return the name of the message folder in an index folder buffer." (save-excursion (mh-index-previous-folder) - (re-search-forward "^\\(+.*\\)$" nil t) - (message "%s" (match-string 1)))) + (if (re-search-forward "^\\(+.*\\)$" nil t) + (message "%s" (match-string 1))))) (defun org-mhe-get-message-folder () "Return the name of the current message folder. @@ -194,16 +195,19 @@ (mh-find-path) (if (not article) (mh-visit-folder (mh-normalize-folder-name folder)) - (setq article (org-add-angle-brackets article)) (mh-search-choose) (if (equal mh-searcher 'pick) (progn + (setq article (org-add-angle-brackets article)) (mh-search folder (list "--message-id" article)) (when (and org-mhe-search-all-folders (not (org-mhe-get-message-real-folder))) (kill-this-buffer) (mh-search "+" (list "--message-id" article)))) - (mh-search "+" article)) + (if mh-search-regexp-builder + (mh-search "+" (funcall mh-search-regexp-builder + (list (cons 'message-id article)))) + (mh-search "+" article))) (if (org-mhe-get-message-real-folder) (mh-show-msg 1) (kill-this-buffer) @@ -212,4 +216,5 @@ (provide 'org-mhe) ;; arch-tag: dcb05484-8627-491d-a8c1-01dbd2bde4ae + ;;; org-mhe.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-mouse.el --- a/lisp/org/org-mouse.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-mouse.el Tue Jun 17 15:22:00 2008 +0000 @@ -4,7 +4,7 @@ ;; ;; Author: Piotr Zielinski ;; Maintainer: Carsten Dominik -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -1113,3 +1113,5 @@ (provide 'org-mouse) ;; arch-tag: ff1ae557-3529-41a3-95c6-baaebdcc280f + +;;; org-mouse.el ends-here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-publish.el --- a/lisp/org/org-publish.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-publish.el Tue Jun 17 15:22:00 2008 +0000 @@ -4,7 +4,7 @@ ;; Author: David O'Toole ;; Maintainer: Bastien Guerry ;; Keywords: hypermedia, outlines, wp -;; Version: 6.02b +;; Version: 6.05a ;; This file is part of GNU Emacs. ;; @@ -149,15 +149,17 @@ (eval-when-compile (require 'cl)) +(require 'org) +(require 'org-exp) (eval-and-compile (unless (fboundp 'declare-function) (defmacro declare-function (fn file &optional arglist fileonly)))) (defgroup org-publish nil - "Options for publishing a set of Org-mode and related files." - :tag "Org Publishing" - :group 'org) + "Options for publishing a set of Org-mode and related files." + :tag "Org Publishing" + :group 'org) (defcustom org-publish-project-alist nil "Association list to control publishing behavior. @@ -195,8 +197,8 @@ file names you don't want to be published. The :include property may be used to include extra files. Its -value may be a list of filenames to include. The filenames are -considered relative to the publishing directory. +value may be a list of filenames to include. The filenames are +considered relative to the base directory. When both :include and :exclude properties are given values, the exclusion step happens first. @@ -219,6 +221,8 @@ :preparation-function Function to be called before publishing this project. + :completion-function Function to be called after publishing + this project. Some properties control details of the Org publishing process, and are equivalent to the corresponding user variables listed in @@ -449,6 +453,11 @@ ;; FIXME distinguish exclude regexp ;; for skip-file and skip-dir? exclude-regexp exclude-regexp) + (mapc (lambda (f) + (pushnew + (expand-file-name (concat base-dir f)) + org-publish-temp-files)) + include-list) org-publish-temp-files)) (defun org-publish-get-project-from-filename (filename) @@ -512,6 +521,8 @@ (require 'eshell) (require 'esh-maint) (require 'em-unix)) + (unless (file-directory-p pub-dir) + (make-directory pub-dir t)) (eshell/cp filename pub-dir)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -559,19 +570,22 @@ If :auto-index is set, publish the index too." (mapc (lambda (project) - (let* ((project-plist (cdr project)) - (exclude-regexp (plist-get project-plist :exclude)) - (index-p (plist-get project-plist :auto-index)) - (index-filename (or (plist-get project-plist :index-filename) - "index.org")) - (index-function (or (plist-get project-plist :index-function) - 'org-publish-org-index)) - (preparation-function (plist-get project-plist :preparation-function)) - (files (org-publish-get-base-files project exclude-regexp)) file) + (let* + ((project-plist (cdr project)) + (exclude-regexp (plist-get project-plist :exclude)) + (index-p (plist-get project-plist :auto-index)) + (index-filename (or (plist-get project-plist :index-filename) + "index.org")) + (index-function (or (plist-get project-plist :index-function) + 'org-publish-org-index)) + (preparation-function (plist-get project-plist :preparation-function)) + (completion-function (plist-get project-plist :completion-function)) + (files (org-publish-get-base-files project exclude-regexp)) file) (when preparation-function (funcall preparation-function)) (if index-p (funcall index-function project index-filename)) (while (setq file (pop files)) - (org-publish-file file project)))) + (org-publish-file file project)) + (when completion-function (funcall completion-function)))) (org-publish-expand-projects projects))) (defun org-publish-org-index (project &optional index-filename) @@ -581,9 +595,13 @@ (let* ((project-plist (cdr project)) (dir (file-name-as-directory (plist-get project-plist :base-directory))) + (localdir (file-name-directory dir)) + (indent-str (make-string 2 ?\ )) (exclude-regexp (plist-get project-plist :exclude)) - (files (org-publish-get-base-files project exclude-regexp)) + (files (nreverse (org-publish-get-base-files project exclude-regexp))) (index-filename (concat dir (or index-filename "index.org"))) + (index-title (or (plist-get project-plist :index-title) + (concat "Index for project " (car project)))) (index-buffer (find-buffer-visiting index-filename)) (ifn (file-name-nondirectory index-filename)) file) @@ -591,16 +609,47 @@ (if index-buffer (kill-buffer index-buffer)) (with-temp-buffer + (insert (concat index-title "\n\n")) (while (setq file (pop files)) - (let ((fn (file-name-nondirectory file))) + (let ((fn (file-name-nondirectory file)) + (link (file-relative-name file dir)) + (oldlocal localdir)) ;; index shouldn't index itself (unless (string= fn ifn) - (insert (concat " + [[file:" fn "][" + (setq localdir (concat (file-name-as-directory dir) + (file-name-directory link))) + (unless (string= localdir oldlocal) + (if (string= localdir dir) + (setq indent-str (make-string 2 ?\ )) + (let ((subdirs + (split-string + (directory-file-name + (file-name-directory + (file-relative-name localdir dir))) "/")) + (subdir "")) + (setq indent-str (make-string 2 ?\ )) + (dolist (d subdirs) + (setq subdir (concat subdir d "/")) + (insert (concat indent-str " + [[file:" subdir "][" d "/]]\n")) + (setq indent-str (make-string (+ (length indent-str) 2) ?\ )))))) + (insert (concat indent-str " + [[file:" link "][" (file-name-sans-extension fn) "]]\n"))))) (write-file index-filename) (kill-buffer (current-buffer))))) +(defun org-publish-find-title (file) + "Find the title of file in project." + (save-excursion + (set-buffer (find-file-noselect file)) + (let* ((opt-plist (org-combine-plists (org-default-export-plist) + (org-infile-export-plist)))) + (or (plist-get opt-plist :title) + (and (not + (plist-get opt-plist :skip-before-1st-heading)) + (org-export-grab-title-from-buffer)) + (file-name-sans-extension file))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Interactive publishing functions @@ -663,4 +712,5 @@ ;; arch-tag: 72807f3c-8af0-4a6b-8dca-c3376eb25adb + ;;; org-publish.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-remember.el --- a/lisp/org/org-remember.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-remember.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -50,9 +50,12 @@ :group 'org) (defcustom org-remember-store-without-prompt t - "Non-nil means, `C-c C-c' stores remember note without further promts. -In this case, you need `C-u C-c C-c' to get the prompts for -note file and headline. + "Non-nil means, `C-c C-c' stores remember note without further prompts. +It then uses the file and headline specified by the template or (if the +themplate does not specify them) by the variables `org-default-notes-file' +and `org-remember-default-headline'. To force prompting anyway, use +`C-u C-c C-c' to file the note. + When this variable is nil, `C-c C-c' gives you the prompts, and `C-u C-c C-c' triggers the fasttrack." :group 'org-remember @@ -99,13 +102,16 @@ An optional fifth element can specify the headline in that file that should be offered first when the user is asked to file the entry. The default -headline is given in the variable `org-remember-default-headline'. +headline is given in the variable `org-remember-default-headline'. When +this element is `top' or `bottom', the note will be placed as a level-1 +entry at the beginning or end of the file, respectively. -An optional sixth element specifies the contexts in which the user can -select the template. This element can be either a list of major modes -or a function. `org-remember' will first check whether the function -returns `t' or if we are in any of the listed major modes, and select -the template accordingly. +An optional sixth element specifies the contexts in which the template +will be offered to the user. This element can be a list of major modes +or a function, and the template will only be offered if `org-remember' +is called from a mode in the list, or if the function returns t. +Templates that specify t or nil for the context will be always be added +to the list of selectable templates. The template specifies the structure of the remember buffer. It should have a first line starting with a star, to act as the org-mode headline. @@ -117,19 +123,23 @@ %t time stamp, date only %T time stamp with date and time %u, %U like the above, but inactive time stamps - %^t like %t, but prompt for date. Similarly %^T, %^u, %^U - You may define a prompt like %^{Please specify birthday}t + %^t like %t, but prompt for date. Similarly %^T, %^u, %^U. + You may define a prompt like %^{Please specify birthday %n user name (taken from `user-full-name') %a annotation, normally the link created with org-store-link %i initial content, the region active. If %i is indented, the entire inserted text will be indented as well. - %c content of the clipboard, or current kill ring head + %c current kill ring head + %x content of the X clipboard + %^C Interactive selection of which kill or clip to use + %^L Like %^C, but insert as link %^g prompt for tags, with completion on tags in target file %^G prompt for tags, with completion all tags in all agenda files %:keyword specific information for certain link types, see below %[pathname] insert the contents of the file given by `pathname' %(sexp) evaluate elisp `(sexp)' and replace with the result %! Store this note immediately after filling the template + %& Visit note immediately after storing it %? After completing the template, position cursor here. @@ -164,19 +174,34 @@ (string :tag "Name") (character :tag "Selection Key") (string :tag "Template") - (choice - (file :tag "Destination file") - (const :tag "Prompt for file" nil)) - (choice - (string :tag "Destination headline") - (const :tag "Selection interface for heading")) - (choice - (const :tag "Use by default" nil) + (choice :tag "Destination file" + (file :tag "Specify") + (const :tag "Use `org-default-notes-file'" nil)) + (choice :tag "Destin. headline" + (string :tag "Specify") + (const :tag "Use `org-remember-default-headline'" nil) + (const :tag "Level 1 at beginning of file" top) + (const :tag "Level 1 at end of file" bottom)) + (choice :tag "Context" + (const :tag "Use in all contexts" nil) (const :tag "Use in all contexts" t) (repeat :tag "Use only if in major mode" (symbol :tag "Major mode")) (function :tag "Perform a check against function"))))) +(defcustom org-remember-clock-out-on-exit 'query + "Non-nil means, stop the clock when exiting a clocking remember buffer. +This only applies if the clock is running in the remember buffer. If the +clock is not stopped, it continues to run in the storage location. +Instead of nil or t, this may also be the symbol `query' to prompt the +user each time a remember buffer with a running clock is filed away. " + :group 'org-remember + :type '(choice + (const :tag "Never" nil) + (const :tag "Always" t) + (const :tag "Query user" query))) + + (defvar annotation) ; from remember.el, dynamically scoped in `remember-mode' (defvar initial) ; from remember.el, dynamically scoped in `remember-mode' @@ -203,6 +228,7 @@ RET at beg-of-buf -> Append to file as level 2 headline / -> before/after current headline, same headings level") +(defvar org-jump-to-target-location nil) (defvar org-remember-previous-location nil) (defvar org-force-remember-template-char) ;; dynamically scoped @@ -289,6 +315,7 @@ to be run from that hook to function properly." (if org-remember-templates (let* ((entry (org-select-remember-template use-char)) + (ct (or org-overriding-default-time (org-current-time))) (tpl (car entry)) (plist-p (if org-store-link-plist t nil)) (file (if (and (nth 1 entry) (stringp (nth 1 entry)) @@ -300,8 +327,8 @@ (v-x (or (org-get-x-clipboard 'PRIMARY) (org-get-x-clipboard 'CLIPBOARD) (org-get-x-clipboard 'SECONDARY))) - (v-t (format-time-string (car org-time-stamp-formats) (org-current-time))) - (v-T (format-time-string (cdr org-time-stamp-formats) (org-current-time))) + (v-t (format-time-string (car org-time-stamp-formats) ct)) + (v-T (format-time-string (cdr org-time-stamp-formats) ct)) (v-u (concat "[" (substring v-t 1 -1) "]")) (v-U (concat "[" (substring v-T 1 -1) "]")) ;; `initial' and `annotation' are bound in `remember' @@ -394,11 +421,11 @@ (org-set-local 'org-finish-function 'org-remember-finalize) (if (and file (string-match "\\S-" file) (not (file-directory-p file))) (org-set-local 'org-default-notes-file file)) - (if (and headline (stringp headline) (string-match "\\S-" headline)) + (if headline (org-set-local 'org-remember-default-headline headline)) ;; Interactive template entries (goto-char (point-min)) - (while (re-search-forward "%^\\({\\([^}]*\\)}\\)?\\([gGuUtTCL]\\)?" nil t) + (while (re-search-forward "%^\\({\\([^}]*\\)}\\)?\\([gGtTuUCL]\\)?" nil t) (setq char (if (match-end 3) (match-string 3)) prompt (if (match-end 2) (match-string 2))) (goto-char (match-beginning 0)) @@ -444,6 +471,7 @@ '(clipboards . 1) (car clipboards)))))) (char + ;; These are the date/time related ones (setq org-time-was-given (equal (upcase char) char)) (setq time (org-read-date (equal (upcase char) "U") t nil prompt)) @@ -464,6 +492,11 @@ (org-set-local 'org-finish-function 'org-remember-finalize)) (when (save-excursion (goto-char (point-min)) + (re-search-forward "%&" nil t)) + (replace-match "") + (org-set-local 'org-jump-to-target-location t)) + (when (save-excursion + (goto-char (point-min)) (re-search-forward "%!" nil t)) (replace-match "") (add-hook 'post-command-hook 'org-remember-finish-immediately 'append))) @@ -476,15 +509,34 @@ (when org-finish-function (funcall org-finish-function))) -(defvar org-clock-marker) ; Defined below +(defun org-remember-visit-immediately () + "File remember note immediately. +This should be run in `post-command-hook' and will remove itself +from that hook." + (org-remember '(16)) + (goto-char (or (text-property-any + (point) (save-excursion (org-end-of-subtree t t)) + 'org-position-cursor t) + (point))) + (message "%s" + (format + (substitute-command-keys + "Restore window configuration with \\[jump-to-register] %c") + remember-register))) + +(defvar org-clock-marker) ; Defined in org.el (defun org-remember-finalize () "Finalize the remember process." (unless (fboundp 'remember-finalize) (defalias 'remember-finalize 'remember-buffer)) (when (and org-clock-marker (equal (marker-buffer org-clock-marker) (current-buffer))) - ;; FIXME: test this, this is w/o notetaking! - (let (org-log-note-clock-out) (org-clock-out))) + ;; the clock is running in this buffer. + (when (and (equal (marker-buffer org-clock-marker) (current-buffer)) + (or (eq org-remember-clock-out-on-exit t) + (and org-remember-clock-out-on-exit + (y-or-n-p "The clock is running in this buffer. Clock out now? ")))) + (let (org-log-note-clock-out) (org-clock-out)))) (when buffer-file-name (save-buffer) (setq buffer-file-name nil)) @@ -525,10 +577,14 @@ (org-do-remember (buffer-substring (point) (mark))) (org-do-remember)))))) +(defvar org-remember-last-stored-marker (make-marker) + "Marker pointing to the entry most recently stored with `org-remember'.") + (defun org-remember-goto-last-stored () "Go to the location where the last remember note was stored." (interactive) - (bookmark-jump "org-remember-last-stored") + (org-goto-marker-or-bmk org-remember-last-stored-marker + "org-remember-last-stored") (message "This is the last note stored by remember")) (defun org-go-to-remember-target (&optional template-key) @@ -594,6 +650,11 @@ \(i.e. after the stars). See also the variable `org-reverse-note-order'." + (when (org-bound-and-true-p org-jump-to-target-location) + (let* ((end (min (point-max) (1+ (point)))) + (beg (point))) + (if (= end beg) (setq beg (1- beg))) + (put-text-property beg end 'org-position-cursor t))) (goto-char (point-min)) (while (looking-at "^[ \t]*\n\\|^##.*\n") (replace-match "")) @@ -604,7 +665,7 @@ (beginning-of-line 1)) (catch 'quit (if org-note-abort (throw 'quit nil)) - (let* ((txt (buffer-substring (point-min) (point-max))) + (let* ((visitp (org-bound-and-true-p org-jump-to-target-location)) (fastp (org-xor (equal current-prefix-arg '(4)) org-remember-store-without-prompt)) (file (cond @@ -620,46 +681,39 @@ (org-startup-folded nil) (org-startup-align-all-tables nil) (org-goto-start-pos 1) - spos exitcmd level indent reversed) + spos exitcmd level reversed txt) (if (and (equal current-prefix-arg '(16)) org-remember-previous-location) (setq file (car org-remember-previous-location) heading (cdr org-remember-previous-location) fastp t)) (setq current-prefix-arg nil) - (if (string-match "[ \t\n]+\\'" txt) - (setq txt (replace-match "" t t txt))) ;; Modify text so that it becomes a nice subtree which can be inserted ;; into an org tree. - (let* ((lines (split-string txt "\n")) - first) - (setq first (car lines) lines (cdr lines)) - (if (string-match "^\\*+ " first) - ;; Is already a headline - (setq indent nil) - ;; We need to add a headline: Use time and first buffer line - (setq lines (cons first lines) - first (concat "* " (current-time-string) - " (" (remember-buffer-desc) ")") - indent " ")) - (if (and org-adapt-indentation indent) - (setq lines (mapcar - (lambda (x) - (if (string-match "\\S-" x) - (concat indent x) x)) - lines))) - (setq txt (concat first "\n" - (mapconcat 'identity lines "\n")))) - (if (string-match "\n[ \t]*\n[ \t\n]*\\'" txt) - (setq txt (replace-match "\n\n" t t txt)) - (if (string-match "[ \t\n]*\\'" txt) - (setq txt (replace-match "\n" t t txt)))) - ;; Put the modified text back into the remember buffer, for refile. - (erase-buffer) - (insert txt) + (goto-char (point-min)) + (if (re-search-forward "[ \t\n]+\\'" nil t) + ;; remove empty lines at end + (replace-match "")) (goto-char (point-min)) + (unless (looking-at org-outline-regexp) + ;; add a headline + (insert (concat "* " (current-time-string) + " (" (remember-buffer-desc) ")\n")) + (backward-char 1) + (when org-adapt-indentation + (while (re-search-forward "^" nil t) + (insert " ")))) + (goto-char (point-min)) + (if (re-search-forward "\n[ \t]*\n[ \t\n]*\\'" nil t) + (replace-match "\n\n") + (if (re-search-forward "[ \t\n]*\\'") + (replace-match "\n"))) + (goto-char (point-min)) + (setq txt (buffer-string)) + (org-save-markers-in-region (point-min) (point-max)) (when (and (eq org-remember-interactive-interface 'refile) (not fastp)) (org-refile nil (or visiting (find-file-noselect file))) + (and visitp (run-with-idle-timer 0.01 nil 'org-remember-visit-immediately)) (throw 'quit t)) ;; Find the file (if (not visiting) (find-file-noselect file)) @@ -671,25 +725,43 @@ (widen) (and (goto-char (point-min)) (not (re-search-forward "^\\* " nil t)) - (insert "\n* " (or heading "Notes") "\n")) + (insert "\n* " (or (and (stringp heading) heading) + "Notes") "\n")) (setq reversed (org-notes-order-reversed-p)) ;; Find the default location - (when (and heading (stringp heading) (string-match "\\S-" heading)) - (goto-char (point-min)) - (if (re-search-forward - (concat "^\\*+[ \t]+" (regexp-quote heading) - (org-re "\\([ \t]+:[[:alnum:]@_:]*\\)?[ \t]*$")) - nil t) - (setq org-goto-start-pos (match-beginning 0)) - (when fastp - (goto-char (point-max)) - (unless (bolp) (newline)) - (insert "* " heading "\n") - (setq org-goto-start-pos (point-at-bol 0))))) + (when heading + (cond + ((eq heading 'top) + (goto-char (point-min)) + (or (looking-at org-outline-regexp) + (re-search-forward org-outline-regexp nil t)) + (setq org-goto-start-pos (or (match-beginning 0) (point-min)))) + ((eq heading 'bottom) + (goto-char (point-max)) + (re-search-backward "^\\* " nil t) + (or (bolp) (newline)) + (setq org-goto-start-pos (point))) + ((and (stringp heading) (string-match "\\S-" heading)) + (goto-char (point-min)) + (if (re-search-forward + (concat "^\\*+[ \t]+" (regexp-quote heading) + (org-re "\\([ \t]+:[[:alnum:]@_:]*\\)?[ \t]*$")) + nil t) + (setq org-goto-start-pos (match-beginning 0)) + (when fastp + (goto-char (point-max)) + (unless (bolp) (newline)) + (insert "* " heading "\n") + (setq org-goto-start-pos (point-at-bol 0))))) + (t (goto-char (point-min)) (setq org-goto-start-pos (point) + heading 'top)))) ;; Ask the User for a location, using the appropriate interface (cond + ((and fastp (memq heading '(top bottom))) + (setq spos org-goto-start-pos + exitcmd (if (eq heading 'top) 'left 'right))) (fastp (setq spos org-goto-start-pos exitcmd 'return)) ((eq org-remember-interactive-interface 'outline) @@ -706,6 +778,7 @@ (t (error "This should not happen"))) (if (not spos) (throw 'quit nil)) ; return nil to show we did ; not handle this note + (and visitp (run-with-idle-timer 0.01 nil 'org-remember-visit-immediately)) (goto-char spos) (cond ((org-on-heading-p t) (org-back-to-heading t) @@ -724,17 +797,23 @@ (beginning-of-line 2) (end-of-line 1) (insert "\n")))) + (org-paste-subtree (org-get-valid-level level 1) txt) + (and org-auto-align-tags (org-set-tags nil t)) (bookmark-set "org-remember-last-stored") - (org-paste-subtree (org-get-valid-level level 1) txt)) + (move-marker org-remember-last-stored-marker (point))) ((eq exitcmd 'left) ;; before current + (org-paste-subtree level txt) + (and org-auto-align-tags (org-set-tags nil t)) (bookmark-set "org-remember-last-stored") - (org-paste-subtree level txt)) + (move-marker org-remember-last-stored-marker (point))) ((eq exitcmd 'right) ;; after current (org-end-of-subtree t) + (org-paste-subtree level txt) + (and org-auto-align-tags (org-set-tags nil t)) (bookmark-set "org-remember-last-stored") - (org-paste-subtree level txt)) + (move-marker org-remember-last-stored-marker (point))) (t (error "This should not happen")))) ((and (bobp) (not reversed)) @@ -743,8 +822,10 @@ (widen) (goto-char (point-max)) (if (not (bolp)) (newline)) + (org-paste-subtree (org-get-valid-level 1 1) txt) + (and org-auto-align-tags (org-set-tags nil t)) (bookmark-set "org-remember-last-stored") - (org-paste-subtree (org-get-valid-level 1 1) txt))) + (move-marker org-remember-last-stored-marker (point)))) ((and (bobp) reversed) ;; Put it at the start, as level 1 @@ -753,18 +834,26 @@ (goto-char (point-min)) (re-search-forward "^\\*+ " nil t) (beginning-of-line 1) + (org-paste-subtree 1 txt) + (and org-auto-align-tags (org-set-tags nil t)) (bookmark-set "org-remember-last-stored") - (org-paste-subtree 1 txt))) + (move-marker org-remember-last-stored-marker (point)))) (t ;; Put it right there, with automatic level determined by ;; org-paste-subtree or from prefix arg - (bookmark-set "org-remember-last-stored") (org-paste-subtree (if (numberp current-prefix-arg) current-prefix-arg) - txt))) + txt) + (and org-auto-align-tags (org-set-tags nil t)) + (bookmark-set "org-remember-last-stored") + (move-marker org-remember-last-stored-marker (point)))) + (when remember-save-after-remembering (save-buffer) - (if (not visiting) (kill-buffer (current-buffer))))))))) + (if (and (not visiting) + (not (equal (marker-buffer org-clock-marker) + (current-buffer)))) + (kill-buffer (current-buffer))))))))) t) ;; return t to indicate that we took care of this note. @@ -775,6 +864,6 @@ (provide 'org-remember) -;;; org-remember.el ends here +;; arch-tag: 497f30d0-4bc3-4097-8622-2d27ac5f2698 -;; arch-tag: 497f30d0-4bc3-4097-8622-2d27ac5f2698 +;;; org-remember.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-rmail.el --- a/lisp/org/org-rmail.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-rmail.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -105,4 +105,5 @@ (provide 'org-rmail) ;; arch-tag: c6cf4a8b-6639-4b7f-821f-bdf10746b173 + ;;; org-rmail.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-table.el --- a/lisp/org/org-table.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-table.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -187,7 +187,7 @@ (defcustom org-calc-default-modes '(calc-internal-prec 12 - calc-float-format (float 5) + calc-float-format (float 8) calc-angle-mode deg calc-prefer-frac nil calc-symbolic-mode nil @@ -249,12 +249,11 @@ :tag "Org Table Import Export" :group 'org-table) -(defcustom org-table-export-default-format - "orgtbl-to-generic :splice t :sep \"\t\"" +(defcustom org-table-export-default-format "orgtbl-to-tsv" "Default export parameters for org-table-export. These can be - overridden on for a specific table by setting the - TABLE_EXPORT_FORMAT parameter. See orgtbl-export for the - different export transforms and available parameters." +overridden on for a specific table by setting the TABLE_EXPORT_FORMAT +property. See the manual section on orgtbl radio tables for the different +export transformations and available parameters." :group 'org-table-import-export :type 'string) @@ -428,7 +427,7 @@ (defvar org-table-last-alignment) (defvar org-table-last-column-widths) (defun org-table-export (&optional file format) - "Export table as a tab-separated file. + "Export table to a file, with configurable format. Such a file can be imported into a spreadsheet program like Excel. FILE can be the output file name. If not given, it will be taken from a TABLE_EXPORT_FILE property in the current entry or higher up in the @@ -439,19 +438,33 @@ first checks if there is an export format specified in a TABLE_EXPORT_FORMAT property, locally or anywhere up in the hierarchy." (interactive) + (unless (org-at-table-p) + (error "No table at point")) + (require 'org-exp) (org-table-align) ;; make sure we have everything we need (let* ((beg (org-table-begin)) (end (org-table-end)) (txt (buffer-substring-no-properties beg end)) - (file (or file (org-entry-get beg "TABLE_EXPORT_FILE" t) - (read-file-name "Export table to: "))) - (format (or (org-entry-get beg "TABLE_EXPORT_FORMAT" t) - org-table-export-default-format)) - buf) - (unless (or (not (file-exists-p file)) - (y-or-n-p (format "Overwrite file %s? " file))) - (error "Abort")) - (message format) + (file (or file (org-entry-get beg "TABLE_EXPORT_FILE" t))) + (format (or format (org-entry-get beg "TABLE_EXPORT_FORMAT" t))) + buf deffmt-readable) + (unless file + (setq file (read-file-name "Export table to: ")) + (unless (or (not (file-exists-p file)) + (y-or-n-p (format "Overwrite file %s? " file))) + (error "Abort"))) + (if (file-directory-p file) + (error "This is a directory path, not a file")) + (if (equal (file-truename file) + (file-truename (buffer-file-name))) + (error "Please specify a file name that is different from current")) + (unless format + (setq deffmt-readable org-table-export-default-format) + (while (string-match "\t" deffmt-readable) + (setq deffmt-readable (replace-match "\\t" t t deffmt-readable))) + (while (string-match "\n" deffmt-readable) + (setq deffmt-readable (replace-match "\\n" t t deffmt-readable))) + (setq format (read-string "Format: " deffmt-readable))) (if (string-match "\\([^ \t\r\n]+\\)\\( +.*\\)?" format) (let* ((transform (intern (match-string 1 format))) @@ -2363,7 +2376,7 @@ (goto-char beg) (and all (message "Re-applying formulas to full table...")) - ;; First find the named fields, and mark them untouchanble + ;; First find the named fields, and mark them untouchable (remove-text-properties beg end '(org-untouchable t)) (while (setq eq (pop eqlname)) (setq name (car eq) @@ -2371,8 +2384,11 @@ (and (not a) (string-match "@\\([0-9]+\\)\\$\\([0-9]+\\)" name) (setq a (list name - (aref org-table-dlines - (string-to-number (match-string 1 name))) + (condition-case nil + (aref org-table-dlines + (string-to-number (match-string 1 name))) + (error (error "Invalid row number in %s" + name))) (string-to-number (match-string 2 name))))) (when (and a (or all (equal (nth 1 a) thisline))) (message "Re-applying formula to field: %s" name) @@ -3497,7 +3513,7 @@ (goto-char (org-table-begin)) (let (rtn) (beginning-of-line 0) - (while (looking-at "#\\+ORGTBL: *SEND +\\([a-zA-Z0-9_]+\\) +\\([^ \t\r\n]+\\)\\( +.*\\)?") + (while (looking-at "#\\+ORGTBL[: \t][ \t]*SEND +\\([a-zA-Z0-9_]+\\) +\\([^ \t\r\n]+\\)\\( +.*\\)?") (let ((name (org-no-properties (match-string 1))) (transform (intern (match-string 2))) (params (if (match-end 3) @@ -3629,6 +3645,7 @@ ;; Formatting parameters for the current table section. (defvar *orgtbl-hline* nil "Text used for horizontal lines") (defvar *orgtbl-sep* nil "Text used as a column separator") +(defvar *orgtbl-default-fmt* nil "Default format for each entry") (defvar *orgtbl-fmt* nil "Format for each entry") (defvar *orgtbl-efmt* nil "Format for numbers") (defvar *orgtbl-lfmt* nil "Format for an entire line, overrides fmt") @@ -3670,7 +3687,9 @@ (orgtbl-apply-fmt efmt (match-string 1 f) (match-string 2 f)) f))) - (orgtbl-apply-fmt (orgtbl-get-fmt *orgtbl-fmt* i) f))) + (orgtbl-apply-fmt (or (orgtbl-get-fmt *orgtbl-fmt* i) + *orgtbl-default-fmt*) + f))) line))) (push (if *orgtbl-lfmt* (orgtbl-apply-fmt *orgtbl-lfmt* line) @@ -3698,13 +3717,14 @@ separator line, or a list of fields for that line. PARAMS is a property list of parameters that can influence the conversion. For the generic converter, some parameters are obligatory: You need to -specify either :lfmt, or all of (:lstart :lend :sep). If you do not use -:splice, you must have :tstart and :tend. +specify either :lfmt, or all of (:lstart :lend :sep). Valid parameters are :splice When set to t, return only table body lines, don't wrap - them into :tstart and :tend. Default is nil. + them into :tstart and :tend. Default is nil. When :splice + is non-nil, this also means that the exporter should not look + for and interpret header and footer sections. :hline String to be inserted on horizontal separation lines. May be nil to ignore hlines. @@ -3713,8 +3733,8 @@ :remove-nil-lines Do not include lines that evaluate to nil. - Each in the following group may be either a string or a function - of no arguments returning a string: +Each in the following group may be either a string or a function +of no arguments returning a string: :tstart String to start the table. Ignored when :splice is t. :tend String to end the table. Ignored when :splice is t. :lstart String to start a new table line. @@ -3722,9 +3742,9 @@ :lend String to end a table line :llend String to end the last table line, defaults to :lend. - Each in the following group may be a string, a function of one - argument (the field or line) returning a string, or a plist - mapping columns to either of the above: +Each in the following group may be a string, a function of one +argument (the field or line) returning a string, or a plist +mapping columns to either of the above: :lfmt Format for entire line, with enough %s to capture all fields. If this is present, :lstart, :lend, and :sep are ignored. :llfmt Format for the entire last line, defaults to :lfmt. @@ -3739,7 +3759,7 @@ All lines before the first hline are treated as header. If any of these is not present, the data line value is used. - This may be either a string or a function of two arguments: +This may be either a string or a function of two arguments: :efmt Use this format to print numbers with exponentials. The format should have %s twice for inserting mantissa and exponent, for example \"%s\\\\times10^{%s}\". This @@ -3768,8 +3788,9 @@ ;; Put header (unless splicep - (push (or (orgtbl-eval-str (plist-get params :tstart)) - "ERROR: no :tstart") *orgtbl-rtn*)) + (when (plist-member params :tstart) + (let ((tstart (orgtbl-eval-str (plist-get params :tstart)))) + (if tstart (push tstart *orgtbl-rtn*))))) ;; Do we have a heading section? If so, format it and handle the ;; trailing hline. @@ -3796,13 +3817,24 @@ (orgtbl-format-section nil) (unless splicep - (push (or (orgtbl-eval-str (plist-get params :tend)) - "ERROR: no :tend") *orgtbl-rtn*)) + (when (plist-member params :tend) + (let ((tend (orgtbl-eval-str (plist-get params :tend)))) + (if tend (push tend *orgtbl-rtn*))))) (mapconcat 'identity (nreverse (if remove-nil-linesp (remq nil *orgtbl-rtn*) *orgtbl-rtn*)) "\n"))) +(defun orgtbl-to-tsv (table params) + "Convert the orgtbl-mode table to TAB separated material." + (orgtbl-to-generic table (org-combine-plists '(:sep "\t") params))) +(defun orgtbl-to-csv (table params) + "Convert the orgtbl-mode table to CSV material. +This does take care of the proper quoting of fields with comma or quotes." + (orgtbl-to-generic table (org-combine-plists + '(:sep "," :fmt org-quote-csv-field) + params))) + (defun orgtbl-to-latex (table params) "Convert the orgtbl-mode TABLE to LaTeX. TABLE is a list, each entry either the symbol `hline' for a horizontal @@ -3908,7 +3940,24 @@ :hlstart "@headitem "))) (orgtbl-to-generic table (org-combine-plists params2 params)))) +(defun orgtbl-to-orgtbl (table params) + "Convert the orgtbl-mode TABLE into another orgtbl-mode table. +Useful when slicing one table into many. The :hline, :sep, +:lstart, and :lend provide orgtbl framing. The default nil :tstart +and :tend suppress strings without splicing; they can be set to +provide ORGTBL directives for the generated table." + (let* ((params2 + (list + :tstart nil :tend nil + :hline "|---" + :sep " | " + :lstart "| " + :lend " |")) + (params (org-combine-plists params2 params))) + (orgtbl-to-generic table params))) + (provide 'org-table) ;; arch-tag: 4d21cfdd-0268-440a-84b0-09237a0fe0ef + ;;; org-table.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-vm.el --- a/lisp/org/org-vm.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-vm.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -126,4 +126,5 @@ (provide 'org-vm) ;; arch-tag: cbc3047b-935e-4d2a-96e7-c5b0117aaa6d + ;;; org-vm.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org-wl.el --- a/lisp/org/org-wl.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org-wl.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Tokuya Kameshima ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -142,4 +142,5 @@ (provide 'org-wl) ;; arch-tag: 29b75a0f-ef2e-430b-8abc-acff75bde54a + ;;; org-wl.el ends here diff -r a678c02d0c40 -r c1ef445563bb lisp/org/org.el --- a/lisp/org/org.el Tue Jun 17 11:28:06 2008 +0000 +++ b/lisp/org/org.el Tue Jun 17 15:22:00 2008 +0000 @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://orgmode.org -;; Version: 6.02b +;; Version: 6.05a ;; ;; This file is part of GNU Emacs. ;; @@ -91,7 +91,7 @@ ;;; Version -(defconst org-version "6.02b" +(defconst org-version "6.05a" "The version number of the file org.el.") (defun org-version (&optional here) @@ -161,6 +161,7 @@ (const :tag " bbdb: Links to BBDB entries" org-bbdb) (const :tag " bibtex: Links to BibTeX entries" org-bibtex) (const :tag " gnus: Links to GNUS folders/messages" org-gnus) + (const :tag " id: Global id's for identifying entries" org-id) (const :tag " info: Links to Info nodes" org-info) (const :tag " jsinfo: Set up Sebastian Rose's JavaScript org-info.js" org-jsinfo) (const :tag " irc: Links to IRC/ERC chat sessions" org-irc) @@ -173,15 +174,17 @@ (const :tag " mouse: Additional mouse support" org-mouse) (const :tag "C annotate-file: Annotate a file with org syntax" org-annotate-file) + (const :tag "C annotation-helper: Call Remeber directly from Browser" org-annotation-helper) (const :tag "C bookmark: Org links to bookmarks" org-bookmark) (const :tag "C depend: TODO dependencies for Org-mode" org-depend) (const :tag "C elisp-symbol: Org links to emacs-lisp symbols" org-elisp-symbol) + (const :tag "C eval: Include command output as text" org-eval) (const :tag "C expiry: Expiry mechanism for Org entries" org-expiry) (const :tag "C id: Global id's for identifying entries" org-id) (const :tag "C interactive-query: Interactive modification of tags query" org-interactive-query) (const :tag "C mairix: Hook mairix search into Org for different MUAs" org-mairix) (const :tag "C man: Support for links to manpages in Org-mode" org-man) - (const :tag "C mew: Support for links to messages in Mew" org-mew) + (const :tag "C mtags: Support for muse-like tags" org-mtags) (const :tag "C panel: Simple routines for us with bad memory" org-panel) (const :tag "C registry: A registry for Org links" org-registry) (const :tag "C org2rem: Convert org appointments into reminders" org2rem) @@ -217,6 +220,20 @@ :group 'org-startup :type 'boolean) +(defcustom org-startup-indented nil + "Non-nil means, turn on `org-indent-mode' on startup. +This can also be configured on a per-file basis by adding one of +the following lines anywhere in the buffer: + + #+STARTUP: localindent + #+STARTUP: indent + #+STARTUP: noindent" + :group 'org-structure + :type '(choice + (const :tag "Not" nil) + (const :tag "Locally" local) + (const :tag "Globally (slow on startup in large files)" t))) + (defcustom org-startup-align-all-tables nil "Non-nil means, align all tables when visiting a file. This is useful when the column width in tables is forced with cookies @@ -748,6 +765,12 @@ :group 'org-plain-lists :type 'boolean) +(defcustom org-description-max-indent 20 + "Maximum indentation for the second line of a description list. +When the indentation would be larger than this, it will become +5 characters instead." + :group 'org-plain-lists + :type 'integer) (defgroup org-imenu-and-speedbar nil "Options concerning imenu and speedbar in Org-mode." @@ -1380,6 +1403,13 @@ (const :tag "By default" t) (const :tag "Only with C-u C-c C-t" prefix))) +(defcustom org-provide-todo-statistics t + "Non-nil means, update todo statistics after insert and toggle. +When this is set, todo statistics is updated in the parent of the current +entry each time a todo state is changed." + :group 'org-todo + :type 'boolean) + (defcustom org-after-todo-state-change-hook nil "Hook which is run after the state of a TODO item was changed. The new state (a string with a TODO keyword, or nil) is available in the @@ -1463,8 +1493,8 @@ "Non-nil means, record moving through the DONE state when triggering repeat. An auto-repeating tasks is immediately switched back to TODO when marked done. If you are not logging state changes (by adding \"@\" or \"!\" to -the TODO keyword definition, or recording a cloing note by setting -`org-log-done', there will be no record of the task moving trhough DONE. +the TODO keyword definition, or recording a closing note by setting +`org-log-done', there will be no record of the task moving through DONE. This variable forces taking a note anyway. Possible values are: nil Don't force a record @@ -1590,6 +1620,12 @@ (concat "[" (substring f 1 -1) "]") f))) +(defcustom org-time-clocksum-format "%d:%02d" + "The format string used when creating CLOCKSUM lines, or when +org-mode generates a time duration." + :group 'org-time + :type 'string) + (defcustom org-deadline-warning-days 14 "No. of days before expiration during which a deadline becomes active. This variable governs the display in sparse trees and in the agenda. @@ -1682,6 +1718,12 @@ (const :tag "Start radio group" (:startgroup)) (const :tag "End radio group" (:endgroup))))) +(defvar org-file-tags nil + "List of tags that can be inherited by all entries in the file. +The tags will be inherited if the variable `org-use-tag-inheritance' +says they should be. +This variable is populated from #+TAG lines.") + (defcustom org-use-fast-tag-selection 'auto "Non-nil means, use fast tag selection scheme. This is a special interface to select and deselect tags with single keys. @@ -1732,8 +1774,10 @@ (defcustom org-use-tag-inheritance t "Non-nil means, tags in levels apply also for sublevels. When nil, only the tags directly given in a specific line apply there. -If you turn off this option, you very likely want to turn on the -companion option `org-tags-match-list-sublevels'. +If this option is t, a match early-on in a tree can lead to a large +number of matches in the subtree. If you only want to see the first +match in a tree during a search, check out the variable +`org-tags-match-list-sublevels'. This may also be a list of tags that should be inherited, or a regexp that matches tags that should be inherited." @@ -1755,7 +1799,7 @@ (member tag org-use-tag-inheritance)) (t (error "Invalid setting of `org-use-tag-inheritance'")))) -(defcustom org-tags-match-list-sublevels nil +(defcustom org-tags-match-list-sublevels t "Non-nil means list also sublevels of headlines matching tag search. Because of tag inheritance (see variable `org-use-tag-inheritance'), the sublevels of a headline matching a tag search often also match @@ -1839,6 +1883,17 @@ :group 'org-properties :type 'string) +(defcustom org-columns-ellipses ".." + "The ellipses to be used when a field in column view is truncated. +When this is the empty string, as many characters as possible are shown, +but then there will be no visual indication that the field has been truncated. +When this is a string of length N, the last N characters of a truncated +field are replaced by this string. If the column is narrower than the +ellipses string, only part of the ellipses string will be shown." + :group 'org-properties + :type 'string) + + (defcustom org-effort-property "Effort" "The property that is being used to keep track of effort estimates. Effort estimates given in this property need to have the format H:MM." @@ -1846,6 +1901,12 @@ :group 'org-progress :type '(string :tag "Property")) +(defconst org-global-properties-fixed + '(("VISIBILITY_ALL" . "folded children content all")) + "List of property/value pairs that can be inherited by any entry. +These are fixed values, for the preset properties.") + + (defcustom org-global-properties nil "List of property/value pairs that can be inherited by any entry. You can set buffer-local values for this by adding lines like @@ -1856,10 +1917,11 @@ (cons (string :tag "Property") (string :tag "Value")))) -(defvar org-local-properties nil +(defvar org-file-properties nil "List of property/value pairs that can be inherited by any entry. Valid for the current buffer. This variable is populated from #+PROPERTY lines.") +(make-variable-buffer-local 'org-file-properties) (defgroup org-agenda nil "Options concerning agenda views in Org-mode." @@ -1938,9 +2000,19 @@ :group 'org-agenda :type 'sexp) +(defcustom org-calendar-agenda-action-key [?k] + "The key to be installed in `calendar-mode-map' for agenda-action. +The command `org-agenda-action' will be bound to this key. The +default is the character `k' because we use the same key in the agenda." + :group 'org-agenda + :type 'sexp) + (eval-after-load "calendar" - '(org-defkey calendar-mode-map org-calendar-to-agenda-key - 'org-calendar-goto-agenda)) + '(progn + (org-defkey calendar-mode-map org-calendar-to-agenda-key + 'org-calendar-goto-agenda) + (org-defkey calendar-mode-map org-calendar-agenda-action-key + 'org-agenda-action))) (defgroup org-latex nil "Options for embedding LaTeX code into Org-mode." @@ -2123,7 +2195,7 @@ (sexp :tag "Forbidden chars in border ") (sexp :tag "Regexp for body ") (integer :tag "number of newlines allowed") - (option (boolean :tag "Stacking (DISABLED) ")))) + (option (boolean :tag "Please ignore this button")))) (defcustom org-emphasis-alist `(("*" bold "" "") @@ -2200,6 +2272,8 @@ (newhead hdmarker &optional fixface)) (declare-function org-agenda-set-restriction-lock "org-agenda" (&optional type)) (declare-function org-agenda-maybe-redo "org-agenda" ()) +(declare-function org-agenda-save-markers-for-cut-and-paste "org-agenda" + (beg end)) (declare-function parse-time-string "parse-time" (string)) (declare-function remember "remember" (&optional initial)) (declare-function remember-buffer-desc "remember" ()) @@ -2345,6 +2419,7 @@ org-replace-region-by-html org-export-region-as-html org-export-as-html org-export-icalendar-this-file org-export-icalendar-all-agenda-files + org-table-clean-before-export org-export-icalendar-combine-agenda-files org-export-as-xoxo))) ;; Declare and autoload functions from org-exp.el @@ -2364,6 +2439,11 @@ ;; Autoload org-clock.el + +(declare-function org-clock-save-markers-for-cut-and-paste "org-clock" + (beg end)) +(declare-function org-update-mode-line "org-clock" ()) +(defvar org-clock-start-time) (defvar org-clock-marker (make-marker) "Marker recording the last clock-in.") @@ -2385,15 +2465,26 @@ (skip-chars-forward " \t") (when (looking-at org-clock-string) (let ((re (concat "[ \t]*" org-clock-string - " *[[<]\\([^]>]+\\)[]>]-+[[<]\\([^]>]+\\)[]>]" - "\\([ \t]*=>.*\\)?")) + " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]" + "\\([ \t]*=>.*\\)?\\)?")) ts te h m s) - (if (not (looking-at re)) - nil - (and (match-end 3) (delete-region (match-beginning 3) (match-end 3))) + (cond + ((not (looking-at re)) + nil) + ((not (match-end 2)) + (when (and (equal (marker-buffer org-clock-marker) (current-buffer)) + (> org-clock-marker (point)) + (<= org-clock-marker (point-at-eol))) + ;; The clock is running here + (setq org-clock-start-time + (apply 'encode-time + (org-parse-time-string (match-string 1)))) + (org-update-mode-line))) + (t + (and (match-end 4) (delete-region (match-beginning 4) (match-end 4))) (end-of-line 1) (setq ts (match-string 1) - te (match-string 2)) + te (match-string 3)) (setq s (- (time-to-seconds (apply 'encode-time (org-parse-time-string te))) (time-to-seconds @@ -2403,7 +2494,7 @@ m (floor (/ s 60)) s (- s (* 60 s))) (insert " => " (format "%2d:%02d" h m)) - t))))) + t)))))) (defun org-check-running-clock () "Check if the current buffer contains the running clock. @@ -2552,6 +2643,14 @@ org-columns-compute org-agenda-columns org-columns-remove-overlays org-columns org-insert-columns-dblock)) +;; Autoload ID code + +(org-autoload "org-id" + '(org-id-get-create org-id-new org-id-copy org-id-get + org-id-get-with-outline-path-completion + org-id-get-with-outline-drilling + org-id-goto org-id-find)) + ;;; Variables for pre-computed regular expressions, all buffer local (defvar org-drawer-regexp nil @@ -2699,19 +2798,27 @@ (org-set-local 'org-todo-heads nil) (org-set-local 'org-todo-sets nil) (org-set-local 'org-todo-log-states nil) + (org-set-local 'org-file-properties nil) + (org-set-local 'org-file-tags nil) (let ((re (org-make-options-regexp '("CATEGORY" "SEQ_TODO" "TYP_TODO" "TODO" "COLUMNS" - "STARTUP" "ARCHIVE" "TAGS" "LINK" "PRIORITIES" - "CONSTANTS" "PROPERTY" "DRAWERS"))) + "STARTUP" "ARCHIVE" "FILETAGS" "TAGS" "LINK" "PRIORITIES" + "CONSTANTS" "PROPERTY" "DRAWERS" "SETUPFILE"))) (splitre "[ \t]+") kwds kws0 kwsa key log value cat arch tags const links hw dws - tail sep kws1 prio props drawers) + tail sep kws1 prio props ftags drawers + ext-setup-or-nil setup-contents (start 0)) (save-excursion (save-restriction (widen) (goto-char (point-min)) - (while (re-search-forward re nil t) - (setq key (match-string 1) value (org-match-string-no-properties 2)) + (while (or (and ext-setup-or-nil + (string-match re ext-setup-or-nil start) + (setq start (match-end 0))) + (and (setq ext-setup-or-nil nil start 0) + (re-search-forward re nil t))) + (setq key (upcase (match-string 1 ext-setup-or-nil)) + value (org-match-string-no-properties 2 ext-setup-or-nil)) (cond ((equal key "CATEGORY") (if (string-match "[ \t]+$" value) @@ -2736,6 +2843,14 @@ (when (string-match "\\(\\S-+\\)\\s-+\\(.*\\)" value) (push (cons (match-string 1 value) (match-string 2 value)) props))) + ((equal key "FILETAGS") + (when (string-match "\\S-" value) + (setq ftags + (append + ftags + (apply 'append + (mapcar (lambda (x) (org-split-string x ":")) + (org-split-string value))))))) ((equal key "DRAWERS") (setq drawers (org-split-string value splitre))) ((equal key "CONSTANTS") @@ -2756,8 +2871,19 @@ (string-match " *$" value) (setq arch (replace-match "" t t value)) (remove-text-properties 0 (length arch) - '(face t fontified t) arch))) - ))) + '(face t fontified t) arch)) + ((equal key "SETUPFILE") + (setq setup-contents (org-file-contents + (expand-file-name + (org-remove-double-quotes value)) + 'noerror)) + (if (not ext-setup-or-nil) + (setq ext-setup-or-nil setup-contents start 0) + (setq ext-setup-or-nil + (concat (substring ext-setup-or-nil 0 start) + "\n" setup-contents "\n" + (substring ext-setup-or-nil start))))) + )))) (when cat (org-set-local 'org-category (intern cat)) (push (cons "CATEGORY" cat) props)) @@ -2767,7 +2893,8 @@ (org-set-local 'org-highest-priority (nth 0 prio)) (org-set-local 'org-lowest-priority (nth 1 prio)) (org-set-local 'org-default-priority (nth 2 prio))) - (and props (org-set-local 'org-local-properties (nreverse props))) + (and props (org-set-local 'org-file-properties (nreverse props))) + (and ftags (org-set-local 'org-file-tags ftags)) (and drawers (org-set-local 'org-drawers drawers)) (and arch (org-set-local 'org-archive-location arch)) (and links (setq org-link-abbrev-alist-local (nreverse links))) @@ -2838,87 +2965,101 @@ (while (setq e (pop tgs)) (or (and (stringp (car e)) (assoc (car e) org-tag-alist)) - (push e org-tag-alist)))))) - - ;; Compute the regular expressions and other local variables - (if (not org-done-keywords) - (setq org-done-keywords (list (org-last org-todo-keywords-1)))) - (setq org-ds-keyword-length (+ 2 (max (length org-deadline-string) - (length org-scheduled-string) - (length org-clock-string) - (length org-closed-string))) - org-drawer-regexp - (concat "^[ \t]*:\\(" - (mapconcat 'regexp-quote org-drawers "\\|") - "\\):[ \t]*$") - org-not-done-keywords - (org-delete-all org-done-keywords (copy-sequence org-todo-keywords-1)) - org-todo-regexp - (concat "\\<\\(" (mapconcat 'regexp-quote org-todo-keywords-1 - "\\|") "\\)\\>") - org-not-done-regexp - (concat "\\<\\(" - (mapconcat 'regexp-quote org-not-done-keywords "\\|") - "\\)\\>") - org-todo-line-regexp - (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" - (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)\\>\\)?[ \t]*\\(.*\\)") - org-complex-heading-regexp - (concat "^\\(\\*+\\)\\(?:[ \t]+\\(" - (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)" - "\\(?:[ \t]+\\(:[[:alnum:]_@:]+:\\)\\)?[ \t]*$") - org-nl-done-regexp - (concat "\n\\*+[ \t]+" - "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|") - "\\)" "\\>") - org-todo-line-tags-regexp - (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" - (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") - (org-re - "\\)\\>\\)? *\\(.*?\\([ \t]:[[:alnum:]:_@]+:[ \t]*\\)?$\\)")) - org-looking-at-done-regexp - (concat "^" "\\(?:" - (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)" - "\\>") - org-deadline-regexp (concat "\\<" org-deadline-string) - org-deadline-time-regexp - (concat "\\<" org-deadline-string " *<\\([^>]+\\)>") - org-deadline-line-regexp - (concat "\\<\\(" org-deadline-string "\\).*") - org-scheduled-regexp - (concat "\\<" org-scheduled-string) - org-scheduled-time-regexp - (concat "\\<" org-scheduled-string " *<\\([^>]+\\)>") - org-closed-time-regexp - (concat "\\<" org-closed-string " *\\[\\([^]]+\\)\\]") - org-keyword-time-regexp - (concat "\\<\\(" org-scheduled-string - "\\|" org-deadline-string - "\\|" org-closed-string - "\\|" org-clock-string "\\)" - " *[[<]\\([^]>]+\\)[]>]") - org-keyword-time-not-clock-regexp - (concat "\\<\\(" org-scheduled-string - "\\|" org-deadline-string - "\\|" org-closed-string - "\\)" - " *[[<]\\([^]>]+\\)[]>]") - org-maybe-keyword-time-regexp - (concat "\\(\\<\\(" org-scheduled-string - "\\|" org-deadline-string - "\\|" org-closed-string - "\\|" org-clock-string "\\)\\)?" - " *\\([[<][0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^]\r\n>]*?[]>]\\|<%%([^\r\n>]*>\\)") - org-planning-or-clock-line-re - (concat "\\(?:^[ \t]*\\(" org-scheduled-string - "\\|" org-deadline-string - "\\|" org-closed-string "\\|" org-clock-string - "\\)\\>\\)") - ) - (org-compute-latex-and-specials-regexp) - (org-set-font-lock-defaults))) + (push e org-tag-alist))))) + + ;; Compute the regular expressions and other local variables + (if (not org-done-keywords) + (setq org-done-keywords (list (org-last org-todo-keywords-1)))) + (setq org-ds-keyword-length (+ 2 (max (length org-deadline-string) + (length org-scheduled-string) + (length org-clock-string) + (length org-closed-string))) + org-drawer-regexp + (concat "^[ \t]*:\\(" + (mapconcat 'regexp-quote org-drawers "\\|") + "\\):[ \t]*$") + org-not-done-keywords + (org-delete-all org-done-keywords (copy-sequence org-todo-keywords-1)) + org-todo-regexp + (concat "\\<\\(" (mapconcat 'regexp-quote org-todo-keywords-1 + "\\|") "\\)\\>") + org-not-done-regexp + (concat "\\<\\(" + (mapconcat 'regexp-quote org-not-done-keywords "\\|") + "\\)\\>") + org-todo-line-regexp + (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" + (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") + "\\)\\>\\)?[ \t]*\\(.*\\)") + org-complex-heading-regexp + (concat "^\\(\\*+\\)\\(?:[ \t]+\\(" + (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") + "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)" + "\\(?:[ \t]+\\(:[[:alnum:]_@:]+:\\)\\)?[ \t]*$") + org-nl-done-regexp + (concat "\n\\*+[ \t]+" + "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|") + "\\)" "\\>") + org-todo-line-tags-regexp + (concat "^\\(\\*+\\)[ \t]+\\(?:\\(" + (mapconcat 'regexp-quote org-todo-keywords-1 "\\|") + (org-re + "\\)\\>\\)? *\\(.*?\\([ \t]:[[:alnum:]:_@]+:[ \t]*\\)?$\\)")) + org-looking-at-done-regexp + (concat "^" "\\(?:" + (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)" + "\\>") + org-deadline-regexp (concat "\\<" org-deadline-string) + org-deadline-time-regexp + (concat "\\<" org-deadline-string " *<\\([^>]+\\)>") + org-deadline-line-regexp + (concat "\\<\\(" org-deadline-string "\\).*") + org-scheduled-regexp + (concat "\\<" org-scheduled-string) + org-scheduled-time-regexp + (concat "\\<" org-scheduled-string " *<\\([^>]+\\)>") + org-closed-time-regexp + (concat "\\<" org-closed-string " *\\[\\([^]]+\\)\\]") + org-keyword-time-regexp + (concat "\\<\\(" org-scheduled-string + "\\|" org-deadline-string + "\\|" org-closed-string + "\\|" org-clock-string "\\)" + " *[[<]\\([^]>]+\\)[]>]") + org-keyword-time-not-clock-regexp + (concat "\\<\\(" org-scheduled-string + "\\|" org-deadline-string + "\\|" org-closed-string + "\\)" + " *[[<]\\([^]>]+\\)[]>]") + org-maybe-keyword-time-regexp + (concat "\\(\\<\\(" org-scheduled-string + "\\|" org-deadline-string + "\\|" org-closed-string + "\\|" org-clock-string "\\)\\)?" + " *\\([[<][0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^]\r\n>]*?[]>]\\|<%%([^\r\n>]*>\\)") + org-planning-or-clock-line-re + (concat "\\(?:^[ \t]*\\(" org-scheduled-string + "\\|" org-deadline-string + "\\|" org-closed-string "\\|" org-clock-string + "\\)\\>\\)") + ) + (org-compute-latex-and-specials-regexp) + (org-set-font-lock-defaults)))) + +(defun org-file-contents (file &optional noerror) + "Return the contents of FILE, as a string." + (if (or (not file) + (not (file-readable-p file))) + (if noerror + (progn + (message "Cannot read file %s" file) + (ding) (sit-for 2) + "") + (error "Cannot read file %s" file)) + (with-temp-buffer + (insert-file-contents file) + (buffer-string)))) (defun org-extract-log-state-settings (x) "Extract the log state setting from a TODO keyword string. @@ -3123,13 +3264,7 @@ (let ((bmp (buffer-modified-p))) (org-table-map-tables 'org-table-align) (set-buffer-modified-p bmp))) - (org-cycle-hide-drawers 'all) - (cond - ((eq org-startup-folded t) - (org-cycle '(4))) - ((eq org-startup-folded 'content) - (let ((this-command 'org-cycle) (last-command 'org-cycle)) - (org-cycle '(4)) (org-cycle '(4))))))) + (org-set-startup-visibility))) (put 'org-mode 'flyspell-mode-predicate 'org-mode-flyspell-verify) @@ -3583,14 +3718,22 @@ (defvar org-font-lock-keywords nil) -(defconst org-property-re (org-re "^[ \t]*\\(:\\([[:alnum:]_]+\\):\\)[ \t]*\\([^ \t\r\n].*\\)") +(defconst org-property-re (org-re "^[ \t]*\\(:\\([-[:alnum:]_]+\\):\\)[ \t]*\\([^ \t\r\n].*\\)") "Regular expression matching a property line.") +(defvar org-font-lock-hook nil + "Functions to be called for special font lock stuff.") + +(defun org-font-lock-hook (limit) + (run-hook-with-args 'org-font-lock-hook limit)) + (defun org-set-font-lock-defaults () (let* ((em org-fontify-emphasized-text) (lk org-activate-links) (org-font-lock-extra-keywords (list + ;; Call the hook + '(org-font-lock-hook) ;; Headlines '("^\\(\\**\\)\\(\\* \\)\\(.*\\)" (1 (org-get-level-face 1)) (2 (org-get-level-face 2)) (3 (org-get-level-face 3))) @@ -3647,6 +3790,9 @@ (if org-provide-checkbox-statistics '("\\[\\([0-9]*%\\)\\]\\|\\[\\([0-9]*\\)/\\([0-9]*\\)\\]" (0 (org-get-checkbox-statistics-face) t))) + ;; Description list items + '("^[ \t]*\\([-+*]\\|[0-9]+[.)]\\) +\\(.*? ::\\)" + 2 'bold prepend) (list (concat "^\\*+ \\(.*:" org-archive-tag ":.*\\)") '(1 'org-archived prepend)) ;; Specials @@ -3716,6 +3862,9 @@ 1. OVERVIEW: Show only top-level headlines. 2. CONTENTS: Show all headlines of all levels, but no body text. 3. SHOW ALL: Show everything. + When called with two C-c C-u prefixes, switch to the startup visibility, + determined by the variable `org-startup-folded', and by any VISIBILITY + properties in the buffer. - When point is at the beginning of a headline, rotate the subtree started by this line through 3 different states (local cycling) @@ -3729,8 +3878,8 @@ a `show-subtree' and return to the previous cursor position. If ARG is negative, go up that many levels. -- When point is not at the beginning of a headline, execute - `indent-relative', like TAB normally does. See the option +- When point is not at the beginning of a headline, execute the global + binding for TAB, which is re-indenting the line. See the option `org-cycle-emulate-tab' for details. - Special case: if point is at the beginning of the buffer and there is @@ -3757,6 +3906,10 @@ (cond + ((equal arg '(16)) + (org-set-startup-visibility) + (message "Startup visibility, plus VISIBILITY properties.")) + ((org-at-table-p 'any) ;; Enter the table or move to the next field in the table (or (org-table-recognize-table.el) @@ -3865,9 +4018,11 @@ (setq org-cycle-subtree-status 'folded) (run-hook-with-args 'org-cycle-hook 'folded))))) - ;; TAB emulation + ;; TAB emulation and template completion (buffer-read-only (org-back-to-heading)) + ((org-try-structure-completion)) + ((org-try-cdlatex-tab)) ((and (eq org-cycle-emulate-tab 'exc-hl-bol) @@ -3891,16 +4046,67 @@ ;;;###autoload (defun org-global-cycle (&optional arg) - "Cycle the global visibility. For details see `org-cycle'." + "Cycle the global visibility. For details see `org-cycle'. +With C-u prefix arg, switch to startup visibility. +With a numeric prefix, show all headlines up to that level." (interactive "P") (let ((org-cycle-include-plain-lists (if (org-mode-p) org-cycle-include-plain-lists nil))) - (if (integerp arg) - (progn - (show-all) - (hide-sublevels arg) - (setq org-cycle-global-status 'contents)) - (org-cycle '(4))))) + (cond + ((integerp arg) + (show-all) + (hide-sublevels arg) + (setq org-cycle-global-status 'contents)) + ((equal arg '(4)) + (org-set-startup-visibility) + (message "Startup visibility, plus VISIBILITY properties.")) + (t + (org-cycle '(4)))))) + +(defun org-set-startup-visibility () + "Set the visibility required by startup options and properties." + (cond + ((eq org-startup-folded t) + (org-cycle '(4))) + ((eq org-startup-folded 'content) + (let ((this-command 'org-cycle) (last-command 'org-cycle)) + (org-cycle '(4)) (org-cycle '(4))))) + (org-set-visibility-according-to-property 'no-cleanup) + (org-cycle-hide-archived-subtrees 'all) + (org-cycle-hide-drawers 'all) + (org-cycle-show-empty-lines 'all)) + +(defun org-set-visibility-according-to-property (&optional no-cleanup) + "Switch subtree visibilities according to :VISIBILITY: property." + (interactive) + (let (state) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward + "^[ \t]*:VISIBILITY:[ \t]+\\([a-z]+\\)" + nil t) + (setq state (match-string 1)) + (save-excursion + (org-back-to-heading t) + (hide-subtree) + (org-reveal) + (cond + ((equal state '("fold" "folded")) + (hide-subtree)) + ((equal state "children") + (org-show-hidden-entry) + (show-children)) + ((equal state "content") + (save-excursion + (save-restriction + (org-narrow-to-subtree) + (org-content)))) + ((member state '("all" "showall")) + (show-subtree))))) + (unless no-cleanup + (org-cycle-hide-archived-subtrees 'all) + (org-cycle-hide-drawers 'all) + (org-cycle-show-empty-lines 'all))))) (defun org-overview () "Switch to overview mode, shoing only top-level headlines. @@ -4024,8 +4230,6 @@ (outline-flag-region b (point-at-eol) flag) (error ":END: line missing")))))) - - (defun org-subtree-end-visible-p () "Is the end of the current subtree visible?" (pos-visible-in-window-p @@ -4083,6 +4287,7 @@ (defvar org-goto-start-pos) ; dynamically scoped parameter +;; FIXME: Docstring doe not mention both interfaces (defun org-goto (&optional alternative-interface) "Look up a different location in the current file, keeping current visibility. @@ -4405,7 +4610,9 @@ (not (match-beginning 2)) (member (match-string 2) org-done-keywords)) (insert (car org-todo-keywords-1) " ") - (insert (match-string 2) " ")))) + (insert (match-string 2) " ")) + (when org-provide-todo-statistics + (org-update-parent-todo-statistics)))) (defun org-insert-subheading (arg) "Insert a new subheading and demote it. @@ -4665,10 +4872,14 @@ (setq ne-ins (org-back-over-empty-lines)) (move-marker ins-point (point)) (setq txt (buffer-substring beg end)) + (org-save-markers-in-region beg end) (delete-region beg end) (outline-flag-region (1- beg) beg nil) (outline-flag-region (1- (point)) (point) nil) - (insert txt) + (let ((bbb (point))) + (insert-before-markers txt) + (org-reinstall-markers-in-region bbb) + (move-marker ins-point bbb)) (or (bolp) (insert "\n")) (setq ins-end (point)) (goto-char ins-point) @@ -4705,11 +4916,14 @@ (interactive "p") (org-copy-subtree n 'cut)) -(defun org-copy-subtree (&optional n cut) +(defun org-copy-subtree (&optional n cut force-store-markers) "Cut the current subtree into the clipboard. With prefix arg N, cut this many sequential subtrees. This is a short-hand for marking the subtree and then copying it. -If CUT is non-nil, actually cut the subtree." +If CUT is non-nil, actually cut the subtree. +If FORCE-STORE-MARKERS is non-nil, store the relative locations +of some markers in the region, even if CUT is non-nil. This is +useful if the caller implements cut-and-paste as copy-then-paste-then-cut." (interactive "p") (let (beg end folded (beg0 (point))) (if (interactive-p) @@ -4730,6 +4944,8 @@ (goto-char beg0) (when (> end beg) (setq org-subtree-clip-folded folded) + (when (or cut force-store-markers) + (org-save-markers-in-region beg end)) (if cut (kill-region beg end) (copy-region-as-kill beg end)) (setq org-subtree-clip (current-kill 0)) (message "%s: Subtree(s) with %d characters" @@ -4807,6 +5023,7 @@ (setq beg (point)) (insert-before-markers txt) (unless (string-match "\n\\'" txt) (insert "\n")) + (org-reinstall-markers-in-region beg) (setq end (point)) (goto-char beg) (skip-chars-forward " \t\n\r") @@ -4851,6 +5068,40 @@ (throw 'exit nil))) t)))) +(defvar org-markers-to-move nil + "Markers that should be moved with a cut-and-paste operation. +Those markers are stored together with their positions relative to +the start of the region.") + +(defun org-save-markers-in-region (beg end) + "Check markers in region. +If these markers are between BEG and END, record their position relative +to BEG, so that after moving the block of text, we can put the markers back +into place. +This function gets called just before an entry or tree gets cut from the +buffer. After re-insertion, `org-reinstall-markers-in-region' must be +called immediately, to move the markers with the entries." + (setq org-markers-to-move nil) + (when (featurep 'org-clock) + (org-clock-save-markers-for-cut-and-paste beg end)) + (when (featurep 'org-agenda) + (org-agenda-save-markers-for-cut-and-paste beg end))) + +(defun org-check-and-save-marker (marker beg end) + "Check if MARKER is between BEG and END. +If yes, remember the marker and the distance to BEG." + (when (and (marker-buffer marker) + (equal (marker-buffer marker) (current-buffer))) + (if (and (>= marker beg) (< marker end)) + (push (cons marker (- marker beg)) org-markers-to-move)))) + +(defun org-reinstall-markers-in-region (beg) + "Move all remembered markers to their position relative to BEG." + (mapc (lambda (x) + (move-marker (car x) (+ beg (cdr x)))) + org-markers-to-move) + (setq org-markers-to-move nil)) + (defun org-narrow-to-subtree () "Narrow buffer to the current subtree." (interactive) @@ -5104,6 +5355,147 @@ table) (lambda (a b) (funcall comparefun (car a) (car b)))))) +;;; Editing source examples + +(defvar org-exit-edit-mode-map (make-sparse-keymap)) +(define-key org-exit-edit-mode-map "\C-c'" 'org-edit-src-exit) +(defvar org-edit-src-force-single-line nil) +(defvar org-edit-src-from-org-mode nil) + +(define-minor-mode org-exit-edit-mode + "Minor mode installing a single key binding, \"C-c '\" to exit special edit.") + +(defun org-edit-src-code () + "Edit the source code example at point. +An indirect buffer is created, and that buffer is then narrowed to the +example at point and switched to the correct language mode. When done, +exit by killing the buffer with \\[org-edit-src-exit]." + (interactive) + (let ((line (org-current-line)) + (case-fold-search t) + (msg (substitute-command-keys + "Edit, then exit with C-c ' (C-c and single quote)")) + (info (org-edit-src-find-region-and-lang)) + (org-mode-p (eq major-mode 'org-mode)) + beg end lang lang-f single) + (if (not info) + nil + (setq beg (nth 0 info) + end (nth 1 info) + lang (nth 2 info) + single (nth 3 info) + lang-f (intern (concat lang "-mode"))) + (unless (functionp lang-f) + (error "No such language mode: %s" lang-f)) + (goto-line line) + (if (get-buffer "*Org Edit Src Example*") + (kill-buffer "*Org Edit Src Example*")) + (switch-to-buffer (make-indirect-buffer (current-buffer) + "*Org Edit Src Example*")) + (narrow-to-region beg end) + (remove-text-properties beg end '(display nil invisible nil + intangible nil)) + (let ((org-inhibit-startup t)) + (funcall lang-f)) + (set (make-local-variable 'org-edit-src-force-single-line) single) + (set (make-local-variable 'org-edit-src-from-org-mode) org-mode-p) + (when org-mode-p + (goto-char (point-min)) + (while (re-search-forward "^," nil t) + (replace-match ""))) + (goto-line line) + (org-exit-edit-mode) + (org-set-local 'header-line-format msg) + (message "%s" msg) + t))) + +(defun org-edit-src-find-region-and-lang () + "Find the region and language for a local edit. +Return a list with beginning and end of the region, a string representing +the language, a switch telling of the content should be in a single line." + (let ((re-list + '( + ("[^<]*>[ \t]*\n?" "\n?[ \t]*" lang) + ("[^<]*>[ \t]*\n?" "\n?[ \t]*" style) + ("[ \t]*\n?" "\n?[ \t]*" "fundamental") + ("[ \t]*\n?" "\n?[ \t]*" "emacs-lisp") + ("[ \t]*\n?" "\n?[ \t]*" "perl") + ("[ \t]*\n?" "\n?[ \t]*" "python") + ("[ \t]*\n?" "\n?[ \t]*" "ruby") + ("^#\\+begin_src\\( \\([^ \t\n]+\\)\\)?.*\n" "\n#\\+end_src" 2) + ("^#\\+begin_example.*\n" "^#\\+end_example" "fundamental") + ("^#\\+html:" "\n" "html" single-line) + ("^#\\+begin_html.*\n" "\n#\\+end_html" "html") + ("^#\\+begin_latex.*\n" "\n#\\+end_latex" "latex") + ("^#\\+latex:" "\n" "latex" single-line) + ("^#\\+begin_ascii.*\n" "\n#\\+end_ascii" "fundamental") + ("^#\\+ascii:" "\n" "ascii" single-line) + )) + (pos (point)) + re re1 re2 single beg end lang) + (catch 'exit + (while (setq entry (pop re-list)) + (setq re1 (car entry) re2 (nth 1 entry) lang (nth 2 entry) + single (nth 3 entry)) + (save-excursion + (if (or (looking-at re1) + (re-search-backward re1 nil t)) + (progn + (setq beg (match-end 0) lang (org-edit-src-get-lang lang)) + (if (and (re-search-forward re2 nil t) + (>= (match-end 0) pos)) + (throw 'exit (list beg (match-beginning 0) lang single)))) + (if (or (looking-at re2) + (re-search-forward re2 nil t)) + (progn + (setq end (match-beginning 0)) + (if (and (re-search-backward re1 nil t) + (<= (match-beginning 0) pos)) + (throw 'exit + (list (match-end 0) end + (org-edit-src-get-lang lang) single))))))))))) + +(defun org-edit-src-get-lang (lang) + "Extract the src language." + (let ((m (match-string 0))) + (cond + ((stringp lang) lang) + ((integerp lang) (match-string lang)) + ((and (eq lang lang) + (string-match "\\ (point-min) 1) + (error "This buffer is not narrowed, something is wrong...")) + (goto-char (point-min)) + (if (looking-at "[ \t\n]*\n") (replace-match "")) + (if (re-search-forward "\n[ \t\n]*\\'" nil t) (replace-match "")) + (when (org-bound-and-true-p org-edit-src-force-single-line) + (goto-char (point-min)) + (while (re-search-forward "\n" nil t) + (replace-match " ")) + (goto-char (point-min)) + (if (looking-at "\\s-*") (replace-match " ")) + (if (re-search-forward "\\s-+\\'" nil t) + (replace-match ""))) + (when (org-bound-and-true-p org-edit-src-from-org-mode) + (goto-char (point-min)) + (while (re-search-forward (if (org-mode-p) "^\\(.\\)" "^\\([*#]\\)") nil t) + (replace-match ",\\1")) + (when font-lock-mode + (font-lock-unfontify-region (point-min) (point-max))) + (put-text-property (point-min) (point-max) 'font-lock-fontified t)) + (kill-buffer (current-buffer))) + ;;;; Plain list items, including checkboxes ;;; Plain list items @@ -5143,10 +5535,15 @@ t) (error nil))) (let* ((bul (match-string 0)) + (descp (save-excursion (goto-char (match-beginning 0)) + (beginning-of-line 1) + (save-match-data + (looking-at "[ \t]*.*? ::")))) (eow (save-excursion (beginning-of-line 1) (looking-at "[ \t]*") (match-end 0))) (blank (cdr (assq 'plain-list-item org-blank-before-new-entry))) pos) + (if descp (setq checkbox nil)) (cond ((and (org-at-item-p) (<= (point) eow)) ;; before the bullet @@ -5159,7 +5556,10 @@ (end-of-line 1) (delete-horizontal-space)) (newline (if blank 2 1)))) - (insert bul (if checkbox "[ ]" "")) + (insert bul + (if checkbox "[ ]" "") + (if descp (concat (if checkbox " " "") + (read-string "Term: ") " :: ") "")) (just-one-space) (setq pos (point)) (end-of-line 1) @@ -6197,7 +6597,10 @@ (t nil))) (when (or (null txt) (string-match "\\S-" txt)) (setq cpltxt - (concat cpltxt "::" (org-make-org-heading-search-string txt)) + (concat cpltxt "::" + (condition-case nil + (org-make-org-heading-search-string txt) + (error ""))) desc "NONE")))) (if (string-match "::\\'" cpltxt) (setq cpltxt (substring cpltxt 0 -2))) @@ -7084,6 +7487,10 @@ (if (equal (substring s 0 1) "<") nil (setq s (concat "<" s))) (if (equal (substring s -1) ">") nil (setq s (concat s ">"))) s) +(defun org-remove-double-quotes (s) + (if (equal (substring s 0 1) "\"") (setq s (substring s 1))) + (if (equal (substring s -1) "\"") (setq s (substring s 0 -1))) + s) ;;; Following specific links @@ -7157,7 +7564,9 @@ (setq cmd (replace-match "%s" t t cmd))) (while (string-match "%s" cmd) (setq cmd (replace-match - (save-match-data (shell-quote-argument file)) + (save-match-data + (shell-quote-argument + (convert-standard-filename file))) t t cmd))) (save-window-excursion (start-process-shell-command cmd nil cmd) @@ -7170,7 +7579,8 @@ (if line (goto-line line) (if search (org-link-search search)))) ((consp cmd) - (eval cmd)) + (let ((file (convert-standard-filename file))) + (eval cmd))) (t (funcall (cdr (assq 'file org-link-frame-setup)) file))) (and (org-mode-p) (eq old-mode 'org-mode) (or (not (equal old-buffer (current-buffer))) @@ -7346,7 +7756,7 @@ (switch-to-buffer nbuf) (goto-char pos) (org-show-context 'org-goto)) - (org-copy-special) + (org-copy-subtree 1 nil t) (save-excursion (set-buffer (setq nbuf (or (find-buffer-visiting file) (find-file-noselect file)))) @@ -7365,7 +7775,8 @@ (point-max)))) (bookmark-set "org-refile-last-stored") (org-paste-subtree level)))) - (org-cut-special) + (org-cut-subtree) + (setq org-markers-to-move nil) (message "Entry refiled to \"%s\"" (car it))))))) (defun org-refile-goto-last-stored () @@ -7382,20 +7793,54 @@ (unless org-refile-target-table (error "No refile targets")) (let* ((cbuf (current-buffer)) + (cfunc (if org-refile-use-outline-path + 'org-olpath-completing-read + 'completing-read)) + (extra (if org-refile-use-outline-path "/" "")) (filename (buffer-file-name (buffer-base-buffer cbuf))) (fname (and filename (file-truename filename))) (tbl (mapcar (lambda (x) (if (not (equal fname (file-truename (nth 1 x)))) - (cons (concat (car x) " (" (file-name-nondirectory - (nth 1 x)) ")") + (cons (concat (car x) extra " (" + (file-name-nondirectory (nth 1 x)) ")") (cdr x)) - x)) + (cons (concat (car x) extra) (cdr x)))) org-refile-target-table)) (completion-ignore-case t)) - (assoc (completing-read prompt tbl nil t nil 'org-refile-history) + (assoc (funcall cfunc prompt tbl nil t nil 'org-refile-history) tbl))) +(defun org-olpath-completing-read (prompt collection &rest args) + "Read an outline path like a file name." + (let ((thetable collection)) + (apply + 'completing-read prompt + (lambda (string predicate &optional flag) + (let (rtn r s f (l (length string))) + (cond + ((eq flag nil) + ;; try completion + (try-completion string thetable)) + ((eq flag t) + ;; all-completions + (setq rtn (all-completions string thetable predicate)) + (mapcar + (lambda (x) + (setq r (substring x l)) + (if (string-match " ([^)]*)$" x) + (setq f (match-string 0 x)) + (setq f "")) + (if (string-match "/" r) + (concat string (substring r 0 (match-end 0)) f) + x)) + rtn)) + ((eq flag 'lambda) + ;; exact match? + (assoc string thetable))) + )) + args))) + ;;;; Dynamic blocks (defun org-find-dblock (name) @@ -7521,6 +7966,82 @@ "ORGTBL" "HTML:" "LaTeX:" "BEGIN:" "END:" "TBLFM" "BEGIN_EXAMPLE" "END_EXAMPLE")) +(defcustom org-structure-template-alist + '( + ("s" "#+begin_src ?\n\n#+end_src" + "\n\n") + ("e" "#+begin_example\n?\n#+end_example" + "\n?\n") + ("q" "#+begin_quote\n?\n#+end_quote" + "\n?\n") + ("v" "#+begin_verse\n?\n#+end_verse" + "\n?\n/verse>") + ("l" "#+begin_latex\n?\n#+end_latex" + "\n?\n") + ("L" "#+latex: " + "?") + ("h" "#+begin_html\n?\n#+end_html" + "\n?\n") + ("H" "#+html: " + "?") + ("a" "#+begin_ascii\n?\n#+end_ascii") + ("A" "#+ascii: ") + ("i" "#+include %file ?" + "") + ) + "Structure completion elements. +This is a list of abbreviation keys and values. The value gets inserted +it you type @samp{.} followed by the key and then the completion key, +usually `M-TAB'. %file will be replaced by a file name after prompting +for the file uning completion. +There are two templates for each key, the first uses the original Org syntax, +the second uses Emacs Muse-like syntax tags. These Muse-like tags become +the default when the /org-mtags.el/ module has been loaded. See also the +variable `org-mtags-prefere-muse-templates'. +This is an experimental feature, it is undecided if it is going to stay in." + :group 'org-completion + :type '(repeat + (string :tag "Key") + (string :tag "Template") + (string :tag "Muse Template"))) + +(defun org-try-structure-completion () + "Try to complete a structure template before point. +This looks for strings like \".*?file=\"\\)\\([^\"\n>]+\\)")) + (find-file (org-trim (match-string 1)))) + ((org-edit-src-code)) + (t (call-interactively 'ffap)))) + (defun org-ctrl-c-ctrl-c (&optional arg) "Set tags in headline, or update according to changed information at point. @@ -12216,15 +12943,18 @@ (if (org-at-table-p) (org-call-with-arg 'org-table-recalculate t)))) (t - (call-interactively 'org-mode-restart)))) +; (org-set-regexps-and-options) +; (org-restart-font-lock) + (let ((org-inhibit-startup t)) (org-mode-restart)) + (message "Local setup has been refreshed")))) (t (error "C-c C-c can do nothing useful at this location."))))) (defun org-mode-restart () "Restart Org-mode, to scan again for special lines. Also updates the keyword regular expressions." (interactive) - (let ((org-inhibit-startup t)) (org-mode)) - (message "Org-mode restarted to refresh keyword and special line setup")) + (org-mode) + (message "Org-mode restarted")) (defun org-kill-note-or-show-branches () "If this is a Note buffer, abort storing the note. Else call `show-branches'." @@ -12261,7 +12991,7 @@ (defun org-ctrl-c-star () "Compute table, or change heading status of lines. -Calls `org-table-recalculate' or `org-toggle-region-headlines', +Calls `org-table-recalculate' or `org-toggle-region-headings', depending on context. This will also turn a plain list item or a normal line into a subheading." (interactive) @@ -12412,7 +13142,7 @@ ("Calculate" ["Set Column Formula" org-table-eval-formula (org-at-table-p)] ["Set Field Formula" (org-table-eval-formula '(4)) :active (org-at-table-p) :keys "C-u C-c ="] - ["Edit Formulas" org-table-edit-formulas (org-at-table-p)] + ["Edit Formulas" org-edit-special (org-at-table-p)] "--" ["Recalculate line" org-table-recalculate (org-at-table-p)] ["Recalculate all" (lambda () (interactive) (org-table-recalculate '(4))) :active (org-at-table-p) :keys "C-u C-c *"] @@ -12477,7 +13207,8 @@ ["Convert to odd levels" org-convert-to-odd-levels t] ["Convert to odd/even levels" org-convert-to-oddeven-levels t]) ("Editing" - ["Emphasis..." org-emphasize t]) + ["Emphasis..." org-emphasize t] + ["Edit Source Example" org-edit-special t]) ("Archive" ["Toggle ARCHIVE tag" org-toggle-archive-tag t] ; ["Check and Tag Children" (org-toggle-archive-tag (4)) @@ -12633,13 +13364,15 @@ ;;;; Documentation +;;;###autoload (defun org-require-autoloaded-modules () (interactive) (mapc 'require '(org-agenda org-archive org-clock org-colview - org-exp org-export-latex org-publish + org-exp org-id org-export-latex org-publish org-remember org-table))) +;;;###autoload (defun org-customize () "Call the customize function with org as argument." (interactive) @@ -12671,6 +13404,41 @@ ;;; Generally useful functions +(defun org-display-warning (message) ;; Copied from Emacs-Muse + "Display the given MESSAGE as a warning." + (if (fboundp 'display-warning) + (display-warning 'org message + (if (featurep 'xemacs) + 'warning + :warning)) + (let ((buf (get-buffer-create "*Org warnings*"))) + (with-current-buffer buf + (goto-char (point-max)) + (insert "Warning (Org): " message) + (unless (bolp) + (newline))) + (display-buffer buf) + (sit-for 0)))) + +(defun org-goto-marker-or-bmk (marker &optional bookmark) + "Go to MARKER, widen if necesary. When marker is not live, try BOOKMARK." + (if (and marker (marker-buffer marker) + (buffer-live-p (marker-buffer marker))) + (progn + (switch-to-buffer (marker-buffer marker)) + (if (or (> marker (point-max)) (< marker (point-min))) + (widen)) + (goto-char marker)) + (if bookmark + (bookmark-jump bookmark) + (error "Cannot find location")))) + +(defun org-quote-csv-field (s) + "Quote field for inclusion in CSV material." + (if (string-match "[\",]" s) + (concat "\"" (mapconcat 'identity (split-string s "\"") "\"\"") "\"") + s)) + (defun org-plist-delete (plist property) "Delete PROPERTY from PLIST. This is in contrast to merely setting it to 0." @@ -12708,6 +13476,12 @@ (setq l (- l (get-text-property b 'org-dwidth-n s)))) l)) +(defun org-base-buffer (buffer) + "Return the base buffer of BUFFER, if it has one. Else return the buffer." + (if (not buffer) + buffer + (or (buffer-base-buffer buffer) + buffer))) (defun org-trim (s) "Remove whitespace at beginning and end of string." @@ -13083,6 +13857,37 @@ (save-match-data (string-match (org-image-file-name-regexp) file))) +(defun org-get-cursor-date () + "Return the date at cursor in as a time. +This works in the calendar and in the agenda, anywhere else it just +returns the current time." + (let (date day defd) + (cond + ((eq major-mode 'calendar-mode) + (setq date (calendar-cursor-to-date) + defd (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date)))) + ((eq major-mode 'org-agenda-mode) + (setq day (get-text-property (point) 'day)) + (if day + (setq date (calendar-gregorian-from-absolute day) + defd (encode-time 0 0 0 (nth 1 date) (nth 0 date) + (nth 2 date)))))) + (or defd (current-time)))) + +(defvar org-agenda-action-marker (make-marker) + "Marker pointing to the entry for the next agenda action.") + +(defun org-mark-entry-for-agenda-action () + "Mark the current entry as target of an agenda action. +Agenda actions are actions executed from the agenda with the key `k', +which make use of the date at the cursor." + (interactive) + (move-marker org-agenda-action-marker + (save-excursion (org-back-to-heading t) (point)) + (current-buffer)) + (message + "Entry marked for action; press `k' at desired date in agenda or calendar")) + ;;; Paragraph filling stuff. ;; We want this to be just right, so use the full arsenal. @@ -13103,17 +13908,21 @@ (beginning-of-line 0)) (cond ((looking-at "\\*+[ \t]+") - (goto-char (match-end 0)) - (setq column (current-column))) + (if (not org-adapt-indentation) + (setq column 0) + (goto-char (match-end 0)) + (setq column (current-column)))) ((org-in-item-p) (org-beginning-of-item) ; (looking-at "[ \t]*\\(\\S-+\\)[ \t]*") - (looking-at "[ \t]*\\(\\S-+\\)[ \t]*\\(\\[[- X]\\][ \t]*\\)?") + (looking-at "[ \t]*\\(\\S-+\\)[ \t]*\\(\\[[- X]\\][ \t]*\\|.*? :: \\)?") (setq bpos (match-beginning 1) tpos (match-end 0) bcol (progn (goto-char bpos) (current-column)) tcol (progn (goto-char tpos) (current-column)) bullet (match-string 1) bullet-type (if (string-match "[0-9]" bullet) "n" bullet)) + (if (> tcol (+ bcol org-description-max-indent)) + (setq tcol (+ bcol 5))) (if (not itemp) (setq column tcol) (goto-char pos) @@ -13197,6 +14006,13 @@ work correctly." (cond ((looking-at "#[ \t]+") (match-string 0)) + ((looking-at "[ \t]*\\([-*+] .*? :: \\)") + (save-excursion + (if (> (match-end 1) (+ (match-beginning 1) + org-description-max-indent)) + (goto-char (+ (match-beginning 1) 5)) + (goto-char (match-end 0))) + (make-string (current-column) ?\ ))) ((looking-at "[ \t]*\\([-*+] \\|[0-9]+[.)] \\)?") (save-excursion (goto-char (match-end 0)) @@ -13259,7 +14075,7 @@ first attempt, and only move to after the tags when the cursor is already beyond the end of the headline." (interactive "P") - (let ((pos (point))) + (let ((pos (point)) refpos) (beginning-of-line 1) (if (bobp) nil @@ -13271,16 +14087,18 @@ (forward-char 1))) (when org-special-ctrl-a/e (cond - ((and (looking-at org-todo-line-regexp) + ((and (looking-at org-complex-heading-regexp) (= (char-after (match-end 1)) ?\ )) + (setq refpos (min (1+ (or (match-end 3) (match-end 2) (match-end 1))) + (point-at-eol))) (goto-char (if (eq org-special-ctrl-a/e t) - (cond ((> pos (match-beginning 3)) (match-beginning 3)) - ((= pos (point)) (match-beginning 3)) + (cond ((> pos refpos) refpos) + ((= pos (point)) refpos) (t (point))) (cond ((> pos (point)) (point)) ((not (eq last-command this-command)) (point)) - (t (match-beginning 3)))))) + (t refpos))))) ((org-at-item-p) (goto-char (if (eq org-special-ctrl-a/e t) @@ -13289,7 +14107,9 @@ (t (point))) (cond ((> pos (point)) (point)) ((not (eq last-command this-command)) (point)) - (t (match-end 4)))))))))) + (t (match-end 4)))))))) + (org-no-warnings + (and (featurep 'xemacs) (setq zmacs-region-stays t))))) (defun org-end-of-line (&optional arg) "Go to the end of the line. @@ -13311,7 +14131,10 @@ (if (or (< pos (match-end 0)) (not (eq this-command last-command))) (goto-char (match-end 0)) (goto-char (match-beginning 1)))) - (end-of-line arg))))) + (end-of-line arg)))) + (org-no-warnings + (and (featurep 'xemacs) (setq zmacs-region-stays t)))) + (define-key org-mode-map "\C-a" 'org-beginning-of-line) (define-key org-mode-map "\C-e" 'org-end-of-line) @@ -13688,6 +14511,6 @@ (run-hooks 'org-load-hook) ;; arch-tag: e77da1a7-acc7-4336-b19e-efa25af3f9fd + ;;; org.el ends here -