1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>

* org-exp.el (org-export-as-html): Turn \par into a paragraph.

	* org.el (org-agenda-tags-todo-honor-ignore-options): Declare
	variable.

	* org-table.el (org-table-insert-hline): Fix typo in fuction call
	to `backward-char'.

	* org-exp.el (org-export-as-html): Remove the initial space from
	colon examples.

	* org.el (org-scan-tags): Call
	`org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'.

	* org-agenda.el (org-agenda-todo-list, org-agenda-match-view): New
	customization groups.
	(org-agenda-tags-todo-honor-ignore-options): New option.
	(org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item):
	New function.
	(org-agenda-get-todos): Use
	`org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-exp.el (org-export-format-source-code-or-example): Escape
	HTML characters also in examples that anre not treated with
	htmlize.  Also, just switch to EXAMPLE processing if we do not
	have a good version of htmlize.

	* org-rmail.el: Fix copyright notice.

	* org.el (org-activate-footnote-links): Improve footnote link
	highlighting.

	* org-footnote.el (org-footnote-normalize): Fix finding the end of
	a footnote definition at the end of the file.

	* org-table.el (org-table-get-specials): Add an imagined hline at
	the end of the table.  This can be useful for references that want
	to go to the end of the table.  Also fix bug when computing last
	row constants, in tables that do not start right at the right
	margin.
	(org-table-eval-formula): Match and replace remove references.
	(org-table-formula-substitute-names): Make sure that names inside
	a "remote" call are left alone, the will be replaced later when
	the remote call is handled.
	(org-table-convert-refs-to-rc): Do not convert things that might
	look like a reference, but are really part of an ID or namei n a
	remote reference.
	(org-table-get-remote-range): New function.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-faces.el (org-clock-overlay): Fix bug in face definition.

	* org-clock.el (org-clock-put-overlay): Use new face instead of
	`secondary-selection'.

	* org-faces.el (org-clock-overlay): New face.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-exp.el (org-get-current-options): Include the option for
	publishing time stamps.

	* org.el (org-toggle-heading): Renamed from
	`org-toggel-region-headings'.
	No longer needs a region defined, but will use it if there is one.
	(org-ctrl-c-star): Simplified, relying more on the internal
	workings of `org-toggle-heading'.
	(org-toggle-item): Renamed from `org-toggle-region-items'.
	No longer needs a region defined, but will use it if there is one.
	(org-ctrl-c-minus): Simplified, relying more on the inernal
	workings of `org-toggle-item'.

	* org-export-latex.el (org-export-latex-preprocess): Fix bug in
	environment detection.  Also, do real changes only in unprotected
	places.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-export-latex.el (org-export-latex-quotation-marks): Use
	`org-if-unprotected-1'.
	(org-export-latex-set-initial-vars): Check for class definition in
	property.

	* org-macs.el (org-if-unprotected-1): New macro.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-compat.el (org-count-lines): New function.

	* org-exp.el (org-export-format-source-code-or-example): Handle
	switches related to text areas.

	* org.el (org-activate-footnote-links): Don't allow match inside a
	link.

	* org-footnote.el (org-footnote-re): Don't allow match inside a link.

	* org-export-latex.el (org-export-latex-links): Keep a relative
	path relative also after export.

	* org-exp.el (org-export-html-scripts): Fix HTML snippet.

	* org.el (org-make-tags-matcher): Never use IDO for completing the
	tags matcher match string.
	(org-completing-read): Also remove the special biding for "?".

	* org-attach.el (org-attach-allow-inheritance): New option.
	(org-attach-inherited): New variable.
	(org-attach-dir): Handle properties related to the attachment
	directory.
	(org-attach-check-absolute-path): New function.
	(org-attach-set-directory, org-attach-set-inherit): New commands.
	(org-attach): Accommodate the new commands in the dispatcher.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-compat.el (org-fit-window-to-buffer): Fix bug with using
	`window-full-width-p'.

	* org-exp.el (org-export-as-html): Only check for images files
	that really can be inlined

	* org.el (org-image-file-name-regexp, org-file-image-p): Allow the
	list of extensions to be a parameter.

	* org-exp.el (org-export-html-inline-image-extensions): New
	variable.

	* org-agenda.el (org-prepare-agenda): Use
	`org-agenda-block-separator'.
	(org-agenda-block-separator): New option.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-export-latex.el (org-export-latex-tables): Call
	`org-table-clean-before-export' with the new optional argument.

	* org-exp.el (org-table-clean-before-export): New optional
	parameter MAYBE-QUOTED, allows for quoted characters like \# in
	first column.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-plot.el (org-plot/gnuplot): Fix text-ind parameter for
	histograms.

	* org-colview.el (org-colview-construct-allowed-dates): Better
	error catching when a date/time property does not have allowed
	values defined.

	* org-colview-xemacs.el (org-colview-construct-allowed-dates):
	Better error catching when a date/time property does not have
	allowed values defined.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org.el (org-map-entries): Restore point and restriction after
	`org-map-entries'.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org.el (org-time=, org-time<, org-time<=, org-time>)
	(org-time>=, org-time<>): Make sure both values are dates.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-archive.el (org-extract-archive-heading): Allow %s for file
	name also in achive location heading.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-archive.el (org-add-archive-files): Uniquify the list before
	returning it.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-compat.el (org-fit-window-to-buffer): Use
	`window-full-width-p'.

	* org-export-latex.el (org-export-latex-fixed-width): Enforce the
	space after the colon in short examples.

	* org-exp.el (org-export-protect-colon-examples): Rewritten, to
	enforce a space after the colon.  However, we also allow lines
	that are *only* a colon.
	(org-export-as-html): Enforce the space after the colon in short
	examples.
	(org-export-preprocess-string): Do the colon example protection
	earlier.
	(org-export-remove-timestamps): Do not check for protection at the
	end of the line.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org.el (org-format-latex-options): Add new matcher for single
	letters between dollars.
	(org-get-header): Function removed.
	(org-heading-components): New function.

	* org-exp.el (org-export-define-heading-targets): Record ID's also
	as alternative targets.
	(org-export-as-html): Interpret "id:" links to other files by
	preserving the relative path.

	* org-jsinfo.el (org-infojs-handle-options): Catch the case if v
	is nil.

	* org-exp.el (org-export-normalize-links): Protect the main link,
	to avoid special character processing.

	* org-export-latex.el (org-export-latex-special-keyword-regexp):
	New variable.
	(org-export-latex-special-string-regexps): Variable removed.
	(org-export-latex-keywords): Use the new regexp.

	* org-exp.el (org-export-handle-include-files): Fetch switches and
	put them into the BEGIN statement.

	* org-timer.el (org-timer-mode-line-string): New variable.

	* org-clock.el (org-clock-mode-line-map): Renamed from
	`org-clock-mode-map'.
	(org-clock-mode-line-timer): Renamed from `org-mode-line-timer'.
	(org-clock-update-mode-line): Renamed from `org-update-mode-line'.
	(org-clock-put-overlay): Renamed from `org-put-clock-overlay'.
	(org-clock-remove-overlays): Renamed from
	`org-remove-clock-overlays'.

	* org-timer.el (org-timer-pause-or-continue): Implement stopping
	and mode line display.
	(org-timer-stop): New command.
	(org-timer-seconds): Return correct time when timer is paused.
	(org-timer-mode-line-timer): New variable.
	(org-timer-set-mode-line, org-timer-update-mode-line): New
	functions.

	* org.el (org-insert-heading):  Handle new value `auto' for
	`org-blank-before-new-entry'.
	(org-org-menu): Add new items for timer functions.

	* org-list.el (org-insert-item): Handle new value `auto' for
	`org-blank-before-new-entry'.

	* org.el (org-blank-before-new-entry): New value `auto', made
	default.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-exp.el (org-export-normalize-links): If the link is also
	used as the description, protect the description.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org.el (org-closest-date): Fix bug with yearly repeats, in
	combination with preference of the past as it is used for deadline
	and scheduling search.

	* org-exp.el (org-html-handle-time-stamps): No longer check for
	the `org-export-with-timestamps' option, because the preprocesser
	has taken care of this already.

	* org.el (org-entry-properties): Catch the case when this is
	called in a non-org-mode file.

	* org-export-latex.el (org-export-latex-remove-from-headlines):
	Variable made obsolete, also LaTeX export now uses the standard
	variables.
	(org-export-as-latex): Add the timestamps parameter to the
	preprocessor parameter list.
	(org-export-latex-content): Export the remaining keywords without
	considering to remove them.
	(org-export-latex-keywords-maybe): Make the REMOVE-LIST optional.
	Use bold font instead of tt font for the keywords.
	(org-export-latex-fontify-headline): Format headlines, assuming
	that all keywords still present should be published.
	(org-export-latex-keywords): Remove argument TIMESTAMPS and just
	publish what ever remains of the time stamps.
	(org-export-latex-list-parameters): New option.
	(org-export-latex-lists): Pass additional parameters to the list
	converter.

	* org-exp.el (org-export-preprocess-string): Remove clock lines
	and timestamps already in the preprocesor.
	(org-export-remove-timestamps, org-export-remove-clock-lines): New
	functions.
	(org-export-as-ascii, org-export-as-html): Add the timestamps
	parameter to the preprocessor parameter list.

	* org-list.el (org-list-parse-list): Parse for checkboxes.
	(org-list-to-generic): Introduce and handle new parameters :cbon
	and :cboff.
	(org-list-to-latex, org-list-to-html, org-list-to-texinfo): Add
	optional parameter PARAMS.

	* org-export-latex.el (org-export-latex-special-chars): Fix
	problems with interpreting dollar signs.
	(org-inside-latex-math-p): New function.
	(org-export-latex-preprocess): Protect all the math fragments.

	* org.el (org-latex-regexps): Allow a dash after a dollar.

	* org-w3m.el (org-w3m-copy-for-org-mode): Always deactivate the
	mark after copying.

	* org-agenda.el (org-run-agenda-series): Have series options set
	when finalizing the agenda.

	* org-exp.el (org-export-format-source-code-or-example): Protect
	the converted examples.

	* org.el (org-set-regexps-and-options): Fix the regexp
	`org-complex-heading-regexp'.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org.el (org-edit-src-get-label-format): New function.
	(org-coderef-label-format): New option.
	(org-edit-src-code, org-edit-src-find-region-and-lang): Parse for
	a label format specification and make sure it is used in the edit
	buffer.
	(org-edit-src-get-label-format): New function.
	(org-store-link): Handle new coderef formats.
	(org-link-search): Handle new coderef formats.

	* org-footnote.el (org-footnote-create-definition)
	(org-footnote-goto-local-insertion-point): Make footnote insertion
	work correctly when the "Footnotes" headline is the last line in
	the buffer.

	* org.el (org-goto-marker-or-bmk): Expose context after jumping to
	the location.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-w3m.el (org-w3m): New customization group.
	(org-w3m-deactivate-mark): New option.
	(org-w3m-copy-for-org-mode): Deactivate region, unless the user
	option say not to.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org.el (org-set-font-lock-defaults): Trigger footnote
	fontification.
	(org-activate-footnote-links): New function.
	(org-activate-links): New entry `footnote'.

	* org-faces.el (org-footnote): New face.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-macs.el (org-re): Handle the [:word:] class.

	* org-exp.el (org-export-preprocess-string): Call
	`org-export-protect-colon-examples'.
	(org-export-protect-colon-examples): Renamed from
	`org-export-protect-examples', and scope limited to lines starting
	with a colon.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-exp.el (org-export-preprocess-string): Move the preprocess
	hook to after turning on Org-mode.
	(org-export-preprocess-after-include-files-hook)
	(org-export-preprocess-after-tree-selection-hook)
	(org-export-preprocess-before-backend-specifics-hook)
	(org-export-preprocess-final-hook): New hooks.
	(org-export-preprocess-string): Run the new hooks.

	* org.el (org-ctrl-c-minus): Fix indentation for new items.

	* org-footnote.el: New file.

	* org.el (org-footnote): Require footnote code.
	(org-startup-options): Add new footnote options.
	(org-mode-map): New keybindig for footnotes.
	(org-ctrl-c-ctrl-c): Add function at footnotes.
	(org-org-menu): New menu entries for footnotes.

	* org-export-latex.el (org-export-as-latex): Pass footnote
	variable to preprocessor.
	(org-export-latex-preprocess): Treat multiple references to a
	footnote.

	* org-exp.el (org-export-preprocess-string): Call
	`org-footnote-normalize'.
	(org-export-as-ascii, org-export-as-html): Pass footnote variable
	to preprocessor.
	(org-export-as-html): Treat multiple references to a footnote.

2009-01-25  Carsten Dominik  <carsten.dominik@gmail.com>

	* org-export-latex.el (org-export-latex-links): Handle coderef
	links.

	* org.el (org-bracket-link-analytic-regexp++): New variable.
	(org-make-link-regexps): Initialize
	`org-bracket-link-analytic-regexp++'.
	(org-store-link): Implement special case in edit-src buffer.
	(org-insert-link): No use of ide to insert stored links.
	(org-link-search): Implement special case for coderefs.

	* org-exp.el (org-export-html-scripts): New constant.
	(org-export-html-style-default): Add a new style for highlighted
	code.
	(org-export-code-refs): New variable.
	(org-export-preprocess-string): Initialize `org-export-code-refs'.
	Call `org-export-replace-src-segments-and-examples'
	No longer call `org-export-protect-examples'.
	(org-export-target-internal-links): Take care of coderef targets.
	(org-export-last-code-line-counter-value): New variable.
	(org-export-replace-src-segments-and-examples): Renamed from
	`org-export-replace-src-segments', and modified.
	(org-export-format-source-code-or-example): Renamed from
	`org-export-format-source-code'.
	(org-export-number-lines): New function.
	(org-export-as-ascii, org-export-as-html): Handle coderef links.
This commit is contained in:
Carsten Dominik 2009-01-25 15:54:03 +00:00
parent f052351afe
commit 0bd48b37bb
35 changed files with 2559 additions and 654 deletions

View File

@ -1,3 +1,30 @@
2009-01-25 Carsten Dominik <dominik@science.uva.nl>
* org.texi (References): Add information about remote references.
(Built-in table editor): Document `C-c RET' in tables.
(Math symbols, Quoting LaTeX code): Mention that simple
LaTeX macros survive LaTeX export.
(Images in LaTeX export): Show how to create a reference to a
figure.
(Sectioning structure): Document that the LaTeX class can be
specified in a property.
(Text areas in HTML export): New section.
(External links): Add examples for text search and ID links.
(Built-in table editor): Remove the descriptio of `C-c
C-q', it not longer works.
(Literal examples): Document that a space must follow
the colon in short examples.
(Relative timer): Document `org-timer-stop'.
(Footnotes): New section.
(Footnote markup): Shorten section and refer to new Footnote
section.
(Literal examples): Add documentation for line
numbering in and references to code examples.
(CSS support): Fix the description of default CSS styles.
(Capturing column view): Document
"file:path/to/file.org" as an allowed value for the ID property of
a dynamic block copying column view.
2009-01-23 Stephen Eglen <stephen@gnu.org>
* mh-e.texi (Getting Started): Describe $MH.

View File

@ -1,3 +1,425 @@
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-as-html): Turn \par into a paragraph.
* org.el (org-agenda-tags-todo-honor-ignore-options): Declare
variable.
* org-table.el (org-table-insert-hline): Fix typo in fuction call
to `backward-char'.
* org-exp.el (org-export-as-html): Remove the initial space from
colon examples.
* org.el (org-scan-tags): Call
`org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'.
* org-agenda.el (org-agenda-todo-list, org-agenda-match-view): New
customization groups.
(org-agenda-tags-todo-honor-ignore-options): New option.
(org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item):
New function.
(org-agenda-get-todos): Use
`org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-format-source-code-or-example): Escape
HTML characters also in examples that anre not treated with
htmlize. Also, just switch to EXAMPLE processing if we do not
have a good version of htmlize.
* org-rmail.el: Fix copyright notice.
* org.el (org-activate-footnote-links): Improve footnote link
highlighting.
* org-footnote.el (org-footnote-normalize): Fix finding the end of
a footnote definition at the end of the file.
* org-table.el (org-table-get-specials): Add an imagined hline at
the end of the table. This can be useful for references that want
to go to the end of the table. Also fix bug when computing last
row constants, in tables that do not start right at the right
margin.
(org-table-eval-formula): Match and replace remove references.
(org-table-formula-substitute-names): Make sure that names inside
a "remote" call are left alone, the will be replaced later when
the remote call is handled.
(org-table-convert-refs-to-rc): Do not convert things that might
look like a reference, but are really part of an ID or namei n a
remote reference.
(org-table-get-remote-range): New function.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-faces.el (org-clock-overlay): Fix bug in face definition.
* org-clock.el (org-clock-put-overlay): Use new face instead of
`secondary-selection'.
* org-faces.el (org-clock-overlay): New face.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-get-current-options): Include the option for
publishing time stamps.
* org.el (org-toggle-heading): Renamed from
`org-toggel-region-headings'.
No longer needs a region defined, but will use it if there is one.
(org-ctrl-c-star): Simplified, relying more on the internal
workings of `org-toggle-heading'.
(org-toggle-item): Renamed from `org-toggle-region-items'.
No longer needs a region defined, but will use it if there is one.
(org-ctrl-c-minus): Simplified, relying more on the inernal
workings of `org-toggle-item'.
* org-export-latex.el (org-export-latex-preprocess): Fix bug in
environment detection. Also, do real changes only in unprotected
places.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-export-latex.el (org-export-latex-quotation-marks): Use
`org-if-unprotected-1'.
(org-export-latex-set-initial-vars): Check for class definition in
property.
* org-macs.el (org-if-unprotected-1): New macro.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-compat.el (org-count-lines): New function.
* org-exp.el (org-export-format-source-code-or-example): Handle
switches related to text areas.
* org.el (org-activate-footnote-links): Don't allow match inside a
link.
* org-footnote.el (org-footnote-re): Don't allow match inside a link.
* org-export-latex.el (org-export-latex-links): Keep a relative
path relative also after export.
* org-exp.el (org-export-html-scripts): Fix HTML snippet.
* org.el (org-make-tags-matcher): Never use IDO for completing the
tags matcher match string.
(org-completing-read): Also remove the special biding for "?".
* org-attach.el (org-attach-allow-inheritance): New option.
(org-attach-inherited): New variable.
(org-attach-dir): Handle properties related to the attachment
directory.
(org-attach-check-absolute-path): New function.
(org-attach-set-directory, org-attach-set-inherit): New commands.
(org-attach): Accommodate the new commands in the dispatcher.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-compat.el (org-fit-window-to-buffer): Fix bug with using
`window-full-width-p'.
* org-exp.el (org-export-as-html): Only check for images files
that really can be inlined
* org.el (org-image-file-name-regexp, org-file-image-p): Allow the
list of extensions to be a parameter.
* org-exp.el (org-export-html-inline-image-extensions): New
variable.
* org-agenda.el (org-prepare-agenda): Use
`org-agenda-block-separator'.
(org-agenda-block-separator): New option.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-export-latex.el (org-export-latex-tables): Call
`org-table-clean-before-export' with the new optional argument.
* org-exp.el (org-table-clean-before-export): New optional
parameter MAYBE-QUOTED, allows for quoted characters like \# in
first column.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-plot.el (org-plot/gnuplot): Fix text-ind parameter for
histograms.
* org-colview.el (org-colview-construct-allowed-dates): Better
error catching when a date/time property does not have allowed
values defined.
* org-colview-xemacs.el (org-colview-construct-allowed-dates):
Better error catching when a date/time property does not have
allowed values defined.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-map-entries): Restore point and restriction after
`org-map-entries'.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-time=, org-time<, org-time<=, org-time>)
(org-time>=, org-time<>): Make sure both values are dates.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-archive.el (org-extract-archive-heading): Allow %s for file
name also in achive location heading.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-archive.el (org-add-archive-files): Uniquify the list before
returning it.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-compat.el (org-fit-window-to-buffer): Use
`window-full-width-p'.
* org-export-latex.el (org-export-latex-fixed-width): Enforce the
space after the colon in short examples.
* org-exp.el (org-export-protect-colon-examples): Rewritten, to
enforce a space after the colon. However, we also allow lines
that are *only* a colon.
(org-export-as-html): Enforce the space after the colon in short
examples.
(org-export-preprocess-string): Do the colon example protection
earlier.
(org-export-remove-timestamps): Do not check for protection at the
end of the line.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-format-latex-options): Add new matcher for single
letters between dollars.
(org-get-header): Function removed.
(org-heading-components): New function.
* org-exp.el (org-export-define-heading-targets): Record ID's also
as alternative targets.
(org-export-as-html): Interpret "id:" links to other files by
preserving the relative path.
* org-jsinfo.el (org-infojs-handle-options): Catch the case if v
is nil.
* org-exp.el (org-export-normalize-links): Protect the main link,
to avoid special character processing.
* org-export-latex.el (org-export-latex-special-keyword-regexp):
New variable.
(org-export-latex-special-string-regexps): Variable removed.
(org-export-latex-keywords): Use the new regexp.
* org-exp.el (org-export-handle-include-files): Fetch switches and
put them into the BEGIN statement.
* org-timer.el (org-timer-mode-line-string): New variable.
* org-clock.el (org-clock-mode-line-map): Renamed from
`org-clock-mode-map'.
(org-clock-mode-line-timer): Renamed from `org-mode-line-timer'.
(org-clock-update-mode-line): Renamed from `org-update-mode-line'.
(org-clock-put-overlay): Renamed from `org-put-clock-overlay'.
(org-clock-remove-overlays): Renamed from
`org-remove-clock-overlays'.
* org-timer.el (org-timer-pause-or-continue): Implement stopping
and mode line display.
(org-timer-stop): New command.
(org-timer-seconds): Return correct time when timer is paused.
(org-timer-mode-line-timer): New variable.
(org-timer-set-mode-line, org-timer-update-mode-line): New
functions.
* org.el (org-insert-heading): Handle new value `auto' for
`org-blank-before-new-entry'.
(org-org-menu): Add new items for timer functions.
* org-list.el (org-insert-item): Handle new value `auto' for
`org-blank-before-new-entry'.
* org.el (org-blank-before-new-entry): New value `auto', made
default.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-normalize-links): If the link is also
used as the description, protect the description.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-closest-date): Fix bug with yearly repeats, in
combination with preference of the past as it is used for deadline
and scheduling search.
* org-exp.el (org-html-handle-time-stamps): No longer check for
the `org-export-with-timestamps' option, because the preprocesser
has taken care of this already.
* org.el (org-entry-properties): Catch the case when this is
called in a non-org-mode file.
* org-export-latex.el (org-export-latex-remove-from-headlines):
Variable made obsolete, also LaTeX export now uses the standard
variables.
(org-export-as-latex): Add the timestamps parameter to the
preprocessor parameter list.
(org-export-latex-content): Export the remaining keywords without
considering to remove them.
(org-export-latex-keywords-maybe): Make the REMOVE-LIST optional.
Use bold font instead of tt font for the keywords.
(org-export-latex-fontify-headline): Format headlines, assuming
that all keywords still present should be published.
(org-export-latex-keywords): Remove argument TIMESTAMPS and just
publish what ever remains of the time stamps.
(org-export-latex-list-parameters): New option.
(org-export-latex-lists): Pass additional parameters to the list
converter.
* org-exp.el (org-export-preprocess-string): Remove clock lines
and timestamps already in the preprocesor.
(org-export-remove-timestamps, org-export-remove-clock-lines): New
functions.
(org-export-as-ascii, org-export-as-html): Add the timestamps
parameter to the preprocessor parameter list.
* org-list.el (org-list-parse-list): Parse for checkboxes.
(org-list-to-generic): Introduce and handle new parameters :cbon
and :cboff.
(org-list-to-latex, org-list-to-html, org-list-to-texinfo): Add
optional parameter PARAMS.
* org-export-latex.el (org-export-latex-special-chars): Fix
problems with interpreting dollar signs.
(org-inside-latex-math-p): New function.
(org-export-latex-preprocess): Protect all the math fragments.
* org.el (org-latex-regexps): Allow a dash after a dollar.
* org-w3m.el (org-w3m-copy-for-org-mode): Always deactivate the
mark after copying.
* org-agenda.el (org-run-agenda-series): Have series options set
when finalizing the agenda.
* org-exp.el (org-export-format-source-code-or-example): Protect
the converted examples.
* org.el (org-set-regexps-and-options): Fix the regexp
`org-complex-heading-regexp'.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-edit-src-get-label-format): New function.
(org-coderef-label-format): New option.
(org-edit-src-code, org-edit-src-find-region-and-lang): Parse for
a label format specification and make sure it is used in the edit
buffer.
(org-edit-src-get-label-format): New function.
(org-store-link): Handle new coderef formats.
(org-link-search): Handle new coderef formats.
* org-footnote.el (org-footnote-create-definition)
(org-footnote-goto-local-insertion-point): Make footnote insertion
work correctly when the "Footnotes" headline is the last line in
the buffer.
* org.el (org-goto-marker-or-bmk): Expose context after jumping to
the location.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-w3m.el (org-w3m): New customization group.
(org-w3m-deactivate-mark): New option.
(org-w3m-copy-for-org-mode): Deactivate region, unless the user
option say not to.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-set-font-lock-defaults): Trigger footnote
fontification.
(org-activate-footnote-links): New function.
(org-activate-links): New entry `footnote'.
* org-faces.el (org-footnote): New face.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-macs.el (org-re): Handle the [:word:] class.
* org-exp.el (org-export-preprocess-string): Call
`org-export-protect-colon-examples'.
(org-export-protect-colon-examples): Renamed from
`org-export-protect-examples', and scope limited to lines starting
with a colon.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-preprocess-string): Move the preprocess
hook to after turning on Org-mode.
(org-export-preprocess-after-include-files-hook)
(org-export-preprocess-after-tree-selection-hook)
(org-export-preprocess-before-backend-specifics-hook)
(org-export-preprocess-final-hook): New hooks.
(org-export-preprocess-string): Run the new hooks.
* org.el (org-ctrl-c-minus): Fix indentation for new items.
* org-footnote.el: New file.
* org.el (org-footnote): Require footnote code.
(org-startup-options): Add new footnote options.
(org-mode-map): New keybindig for footnotes.
(org-ctrl-c-ctrl-c): Add function at footnotes.
(org-org-menu): New menu entries for footnotes.
* org-export-latex.el (org-export-as-latex): Pass footnote
variable to preprocessor.
(org-export-latex-preprocess): Treat multiple references to a
footnote.
* org-exp.el (org-export-preprocess-string): Call
`org-footnote-normalize'.
(org-export-as-ascii, org-export-as-html): Pass footnote variable
to preprocessor.
(org-export-as-html): Treat multiple references to a footnote.
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org-export-latex.el (org-export-latex-links): Handle coderef
links.
* org.el (org-bracket-link-analytic-regexp++): New variable.
(org-make-link-regexps): Initialize
`org-bracket-link-analytic-regexp++'.
(org-store-link): Implement special case in edit-src buffer.
(org-insert-link): No use of ide to insert stored links.
(org-link-search): Implement special case for coderefs.
* org-exp.el (org-export-html-scripts): New constant.
(org-export-html-style-default): Add a new style for highlighted
code.
(org-export-code-refs): New variable.
(org-export-preprocess-string): Initialize `org-export-code-refs'.
Call `org-export-replace-src-segments-and-examples'
No longer call `org-export-protect-examples'.
(org-export-target-internal-links): Take care of coderef targets.
(org-export-last-code-line-counter-value): New variable.
(org-export-replace-src-segments-and-examples): Renamed from
`org-export-replace-src-segments', and modified.
(org-export-format-source-code-or-example): Renamed from
`org-export-format-source-code'.
(org-export-number-lines): New function.
(org-export-as-ascii, org-export-as-html): Handle coderef links.
2009-01-23 Glenn Morris <rgm@gnu.org>
* org-rmail.el (rmail-narrow-to-non-pruned-header):

View File

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -81,6 +81,15 @@ This is done by leaving out unnecessary lines."
:group 'org-agenda
:type 'boolean)
(defcustom org-agenda-block-separator ?=
"The separator between blocks in the agenda.
If this is a string, it will be used as the separator, with a newline added.
If it is a character, it will be repeated to fill the window width."
:group 'org-agenda
:type '(choice
(character)
(string)))
(defgroup org-agenda-export nil
"Options concerning exporting agenda views in Org-mode."
:tag "Org Agenda Export"
@ -400,6 +409,18 @@ this one will be used."
"Options concerning skipping parts of agenda files."
:tag "Org Agenda Skip"
:group 'org-agenda)
(defgroup org-agenda-daily/weekly nil
"Options concerning the daily/weekly agenda."
:tag "Org Agenda Daily/Weekly"
:group 'org-agenda)
(defgroup org-agenda-todo-list nil
"Options concerning the global todo list agenda view."
:tag "Org Agenda Todo List"
:group 'org-agenda)
(defgroup org-agenda-match-view nil
"Options concerning the general tags/property/todo match agenda view."
:tag "Org Agenda Match View"
:group 'org-agenda)
(defvar org-agenda-archives-mode nil
"Non-nil means, the agenda will include archived items.
@ -419,7 +440,7 @@ When nil, these trees are also scanned by agenda commands."
When nil, the sublevels of a TODO entry are not checked, resulting in
potentially much shorter TODO lists."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-todo-ignore-with-date nil
@ -430,7 +451,7 @@ When this is set, it also covers deadlines and scheduled items, the settings
of `org-agenda-todo-ignore-scheduled' and `org-agenda-todo-ignore-deadlines'
will be ignored."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-todo-ignore-scheduled nil
@ -439,7 +460,7 @@ The idea behind this is that by scheduling it, you have already taken care
of this item.
See also `org-agenda-todo-ignore-with-date'."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-todo-ignore-deadlines nil
@ -448,7 +469,22 @@ Near means closer than `org-deadline-warning-days' days.
The idea behind this is that such items will appear in the agenda anyway.
See also `org-agenda-todo-ignore-with-date'."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-tags-todo-honor-ignore-options nil
"Non-nil means, honor todo-list ...ignore options also in tags-todo search.
The variables
`org-agenda-todo-ignore-with-date',
`org-agenda-todo-ignore-scheduled'
`org-agenda-todo-ignore-deadlines'
make the global TODO list skip entries that have time stamps of certain
kinds. If this option is set, the same options will also apply for the
tags-todo search, which is the general tags/property matcher
restricted to unfinished TODO entries only."
:group 'org-agenda-skip
:group 'org-agenda-todo-list
:group 'org-agenda-match-view
:type 'boolean)
(defcustom org-agenda-skip-scheduled-if-done nil
@ -458,6 +494,7 @@ it applies only to the actual date of the scheduling. Warnings about
an item with a past scheduling dates are always turned off when the item
is DONE."
:group 'org-agenda-skip
:group 'org-agenda-daily/weekly
:type 'boolean)
(defcustom org-agenda-skip-deadline-if-done nil
@ -467,11 +504,13 @@ This is relevant for the daily/weekly agenda. And it applied only to the
actually date of the deadline. Warnings about approaching and past-due
deadlines are always turned off when the item is DONE."
:group 'org-agenda-skip
:group 'org-agenda-daily/weekly
:type 'boolean)
(defcustom org-agenda-skip-timestamp-if-done nil
"Non-nil means don't select item by timestamp or -range if it is DONE."
:group 'org-agenda-skip
:group 'org-agenda-daily/weekly
:type 'boolean)
(defcustom org-timeline-show-empty-dates 3
@ -550,11 +589,6 @@ option will be ignored.."
:group 'org-agenda-windows
:type 'boolean)
(defgroup org-agenda-daily/weekly nil
"Options concerning the daily/weekly agenda."
:tag "Org Agenda Daily/Weekly"
:group 'org-agenda)
(defcustom org-agenda-ndays 7
"Number of days to include in overview display.
Should be 1 or 7."
@ -631,7 +665,8 @@ and timeline buffers."
(defcustom org-agenda-include-all-todo nil
"Set means weekly/daily agenda will always contain all TODO entries.
The TODO entries will be listed at the top of the agenda, before
the entries for specific days."
the entries for specific days.
This option is deprecated, it is better to define a block agenda instead."
:group 'org-agenda-daily/weekly
:type 'boolean)
@ -991,7 +1026,6 @@ or a list like `(:background \"Red\")'."
(list (character :tag "Priority" :value ?A)
(sexp :tag "face")))))
(defgroup org-agenda-column-view nil
"Options concerning column view in the agenda."
:tag "Org Agenda Column View"
@ -1057,7 +1091,8 @@ works you probably want to add it to `org-agenda-custom-commands' for good."
(defvar org-agenda-show-log nil)
(defvar org-agenda-redo-command nil)
(defvar org-agenda-query-string nil)
(defvar org-agenda-mode-hook nil)
(defvar org-agenda-mode-hook nil
"Hook for org-agenda-mode, run after the mode is turned on.")
(defvar org-agenda-type nil)
(defvar org-agenda-force-single-file nil)
@ -1712,7 +1747,7 @@ s Search for keywords C Configure custom agenda commands
(widen)
(setq org-agenda-redo-command redo)
(goto-char (point-min)))
(org-finalize-agenda))
(org-let (nth 1 series) '(org-finalize-agenda)))
;;;###autoload
(defmacro org-batch-agenda (cmd-key &rest parameters)
@ -2040,7 +2075,11 @@ VALUE defaults to t."
(setq buffer-read-only nil)
(goto-char (point-max))
(unless (or (bobp) org-agenda-compact-blocks)
(insert "\n" (make-string (window-width) ?=) "\n"))
(insert "\n"
(if (stringp org-agenda-block-separator)
org-agenda-block-separator
(make-string (window-width) org-agenda-block-separator))
"\n"))
(narrow-to-region (point) (point-max)))
(org-agenda-reset-markers)
(setq org-agenda-contributing-files nil)
@ -3234,13 +3273,7 @@ the documentation of `org-diary'."
(save-match-data
(beginning-of-line)
(setq beg (point) end (progn (outline-next-heading) (point)))
(when (or (and org-agenda-todo-ignore-with-date (goto-char beg)
(re-search-forward org-ts-regexp end t))
(and org-agenda-todo-ignore-scheduled (goto-char beg)
(re-search-forward org-scheduled-time-regexp end t))
(and org-agenda-todo-ignore-deadlines (goto-char beg)
(re-search-forward org-deadline-time-regexp end t)
(org-deadline-close (match-string 1))))
(when (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item end)
(goto-char (1+ beg))
(or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible))
(throw :skip nil)))
@ -3263,6 +3296,22 @@ the documentation of `org-diary'."
(org-end-of-subtree 'invisible))))
(nreverse ee)))
;;;###autoload
(defun org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item (&optional end)
"Do we have a reason to ignore this todo entry because it has a time stamp?"
(when (or org-agenda-todo-ignore-with-date
org-agenda-todo-ignore-scheduled
org-agenda-todo-ignore-deadlines)
(setq end (or end (save-excursion (outline-next-heading) (point))))
(save-excursion
(or (and org-agenda-todo-ignore-with-date
(re-search-forward org-ts-regexp end t))
(and org-agenda-todo-ignore-scheduled
(re-search-forward org-scheduled-time-regexp end t))
(and org-agenda-todo-ignore-deadlines
(re-search-forward org-deadline-time-regexp end t)
(org-deadline-close (match-string 1)))))))
(defconst org-agenda-no-heading-message
"No heading for this item in buffer or region.")

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -102,18 +102,19 @@ information."
(t org-archive-location (match-string 1)))))))
(defun org-add-archive-files (files)
"Splice the archive files into the list f files.
"Splice the archive files into the list of files.
This implies visiting all these files and finding out what the
archive file is."
(apply
'append
(mapcar
(lambda (f)
(if (not (file-exists-p f))
nil
(with-current-buffer (org-get-agenda-file-buffer f)
(cons f (org-all-archive-files)))))
files)))
(org-uniquify
(apply
'append
(mapcar
(lambda (f)
(if (not (file-exists-p f))
nil
(with-current-buffer (org-get-agenda-file-buffer f)
(cons f (org-all-archive-files)))))
files))))
(defun org-all-archive-files ()
"Get a list of all archive files used in the current buffer."
@ -150,7 +151,8 @@ if LOCATION is not given, the value of `org-archive-location' is used."
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)))
(format (match-string 2 location)
(file-name-nondirectory buffer-file-name))))
(defun org-archive-subtree (&optional find-done)
"Move the current subtree to the archive.
@ -304,7 +306,8 @@ this heading."
(message "Subtree archived %s"
(if (eq this-buffer buffer)
(concat "under heading: " heading)
(concat "in file: " (abbreviate-file-name afile)))))))
(concat "in file: " (abbreviate-file-name afile))))))
(org-reveal))
(defun org-archive-to-archive-sibling ()
"Archive the current heading by moving it under the archive sibling.
@ -355,7 +358,8 @@ sibling does not exist, it will be created at the end of the subtree."
(outline-up-heading 1 t)
(hide-subtree)
(org-cycle-show-empty-lines 'folded)
(goto-char pos))))
(goto-char pos)))
(org-reveal))
(defun org-archive-all-done (&optional tag)
"Archive sublevels of the current tree without open TODO items.

View File

@ -4,7 +4,7 @@
;; Author: John Wiegley <johnw@newartisans.com>
;; Keywords: org data task
;; Version: 6.16
;; Version: 6.19a
;; This file is part of GNU Emacs.
;;
@ -64,7 +64,9 @@ where the Org file lives."
(defcustom org-attach-file-list-property "Attachments"
"The property used to keep a list of attachment belonging to this entry.
This is not really needed, so you may set this to nil if you don't want it."
This is not really needed, so you may set this to nil if you don't want it.
Also, for entries where children inherit the directory, the list of
attachments is not kept in this property."
:group 'org-attach
:type '(choice
(const :tag "None" nil)
@ -89,6 +91,15 @@ ln create a hard link. Note that this is not supported
:group 'org-attach
:type 'boolean)
(defcustom org-attach-allow-inheritance t
"Non-nil means, allow attachment directories be inherited."
:group 'org-attach
:type 'boolean)
(defvar org-attach-inherited nil
"Indicates if the last access to the attachment directory was inherited.")
;;;###autoload
(defun org-attach ()
"The dispatcher for attachment commands.
@ -124,7 +135,10 @@ F Like \"f\", but force using dired in Emacs.
d Delete one attachment, you will be prompted for a file name.
D Delete all of a task's attachments. A safer way is
to open the directory in dired and delete from there.")))
to open the directory in dired and delete from there.
s Set a specific attachment directory for this entry.
i Make children of the current entry inherit its attachment directory.")))
(org-fit-window-to-buffer (get-buffer-window "*Org Attach*"))
(message "Select command: [acmlzoOfFdD]")
(setq c (read-char-exclusive))
@ -147,29 +161,81 @@ D Delete all of a task's attachments. A safer way is
'org-attach-delete-one))
((eq c ?D) (call-interactively 'org-attach-delete-all))
((eq c ?q) (message "Abort"))
((memq c '(?s ?\C-s)) (call-interactively
'org-attach-set-directory))
((memq c '(?i ?\C-i)) (call-interactively
'org-attach-set-inherit))
(t (error "No such attachment command %c" c))))))
(defun org-attach-dir (&optional create-if-not-exists-p)
"Return the directory associated with the current entry.
This first checks for a local property ATTACH_DIR, and then for an inherited
property ATTACH_DIR_INHERIT. If neither exists, the default mechanism
using the entry ID will be invoked to access the unique directory for the
current entry.
If the directory does not exist and CREATE-IF-NOT-EXISTS-P is non-nil,
the directory and the corresponding ID will be created."
(when (and (not (buffer-file-name (buffer-base-buffer)))
(not (file-name-absolute-p org-attach-directory)))
(error "Need absolute `org-attach-directory' to attach in buffers without filename."))
(let ((uuid (org-id-get (point) create-if-not-exists-p)))
(when (or uuid create-if-not-exists-p)
(unless uuid
(error "ID retrieval/creation failed"))
(let ((attach-dir (expand-file-name
(format "%s/%s"
(substring uuid 0 2)
(substring uuid 2))
(expand-file-name org-attach-directory))))
(if (and create-if-not-exists-p
(not (file-directory-p attach-dir)))
(make-directory attach-dir t))
(and (file-exists-p attach-dir)
attach-dir)))))
the directory and (if necessary) the corresponding ID will be created."
(let (attach-dir uuid inherit)
(setq org-attach-inherited (org-entry-get nil "ATTACH_DIR_INHERIT"))
(cond
((setq attach-dir (org-entry-get nil "ATTACH_DIR"))
(org-attach-check-absolute-path attach-dir))
((and org-attach-allow-inheritance
(setq inherit (org-entry-get nil "ATTACH_DIR_INHERIT" t)))
(setq attach-dir
(save-excursion
(save-restriction
(widen)
(goto-char org-entry-property-inherited-from)
(let (org-attach-allow-inheritance)
(org-attach-dir create-if-not-exists-p)))))
(org-attach-check-absolute-path attach-dir)
(setq org-attach-inherited t))
(t ; use the ID
(org-attach-check-absolute-path nil)
(setq uuid (org-id-get (point) create-if-not-exists-p))
(when (or uuid create-if-not-exists-p)
(unless uuid (error "ID retrieval/creation failed"))
(setq attach-dir (expand-file-name
(format "%s/%s"
(substring uuid 0 2)
(substring uuid 2))
(expand-file-name org-attach-directory))))))
(when attach-dir
(if (and create-if-not-exists-p
(not (file-directory-p attach-dir)))
(make-directory attach-dir t))
(and (file-exists-p attach-dir)
attach-dir))))
(defun org-attach-check-absolute-path (dir)
"Check if we have enough information to root the atachment directory.
When DIR is given, check also if it is already absolute. Otherwise,
assume that it will be relative, and check if `org-attach-directory' is
absolute, or if at least the current buffer has a file name.
Throw an error if we cannot root the directory."
(or (and dir (file-name-absolute-p dir))
(file-name-absolute-p org-attach-directory)
(buffer-file-name (buffer-base-buffer))
(error "Need absolute `org-attach-directory' to attach in buffers without filename.")))
(defun org-attach-set-directory ()
"Set the ATTACH_DIR property of the current entry.
The property defines the directory that is used for attachments
of the entry."
(interactive)
(let ((dir (org-entry-get nil "ATTACH_DIR")))
(setq dir (read-directory-name "Attachment directory: " dir))
(org-entry-put nil "ATTACH_DIR" dir)))
(defun org-attach-set-inherit ()
"Set the ATTACH_DIR_INHERIT property of the current entry.
The property defines the directory that is used for attachments
of the entry and any children that do not explicitly define (by setting
the ATTACH_DIR property) their own attachment directory."
(interactive)
(org-entry-put nil "ATTACH_DIR_INHERIT" "t")
(message "Children will inherit attachment directory"))
(defun org-attach-commit ()
"Commit changes to git if `org-attach-directory' is properly initialized.
@ -200,7 +266,7 @@ METHOD may be `cp', `mv', or `ln', default taken from `org-attach-method'."
(interactive "fFile to keep as an attachment: \nP")
(setq method (or method org-attach-method))
(let ((basename (file-name-nondirectory file)))
(when org-attach-file-list-property
(when (and org-attach-file-list-property (not org-attach-inherited))
(org-entry-add-to-multivalued-property
(point) org-attach-file-list-property basename))
(let* ((attach-dir (org-attach-dir t))
@ -234,7 +300,7 @@ On some systems, this apparently does copy the file instead."
"Create a new attachment FILE for the current task.
The attachment is created as an Emacs buffer."
(interactive "sCreate attachment named: ")
(when org-attach-file-list-property
(when (and org-attach-file-list-property (not org-attach-inherited))
(org-entry-add-to-multivalued-property
(point) org-attach-file-list-property file))
(let ((attach-dir (org-attach-dir t)))
@ -263,7 +329,7 @@ The attachment is created as an Emacs buffer."
This actually deletes the entire attachment directory.
A safer way is to open the directory in dired and delete from there."
(interactive "P")
(when org-attach-file-list-property
(when (and org-attach-file-list-property (not org-attach-inherited))
(org-entry-delete (point) org-attach-file-list-property))
(let ((attach-dir (org-attach-dir)))
(when
@ -280,7 +346,7 @@ A safer way is to open the directory in dired and delete from there."
This can be used after files have been added externally."
(interactive)
(org-attach-commit)
(when org-attach-file-list-property
(when (and org-attach-file-list-property (not org-attach-inherited))
(org-entry-delete (point) org-attach-file-list-property))
(let ((attach-dir (org-attach-dir)))
(when attach-dir

View File

@ -7,7 +7,7 @@
;; Thomas Baumann <thomas dot baumann at ch dot tum dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Bastien Guerry <bzg at altern dot org>
;; Carsten Dominik <carsten dot dominik at gmail dot com>
;; Keywords: org, wp, remember
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -140,7 +140,7 @@ load."
(defvar org-mode-line-string "")
(put 'org-mode-line-string 'risky-local-variable t)
(defvar org-mode-line-timer nil)
(defvar org-clock-mode-line-timer nil)
(defvar org-clock-heading "")
(defvar org-clock-heading-for-remember "")
(defvar org-clock-start-time "")
@ -156,8 +156,8 @@ of a different task.")
(defvar org-clock-interrupted-task (make-marker)
"Marker pointing to the task that has been interrupted by the current clock.")
(defvar org-clock-mode-map (make-sparse-keymap))
(define-key org-clock-mode-map [mode-line mouse-2] 'org-clock-goto)
(defvar org-clock-mode-line-map (make-sparse-keymap))
(define-key org-clock-mode-line-map [mode-line mouse-2] 'org-clock-goto)
(defun org-clock-history-push (&optional pos buffer)
"Push a marker to the clock history."
@ -241,7 +241,7 @@ of a different task.")
(insert (format "[%c] %-15s %s\n" i cat task))
(cons i marker)))))
(defun org-update-mode-line ()
(defun org-clock-update-mode-line ()
(let* ((delta (- (time-to-seconds (current-time))
(time-to-seconds org-clock-start-time)))
(h (floor delta 3600))
@ -256,7 +256,7 @@ of a different task.")
(org-propertize (substring clock-string 0 org-clock-string-limit)
'help-echo (concat help-text ": " org-clock-heading))
(org-propertize clock-string 'help-echo help-text)))
'local-map org-clock-mode-map
'local-map org-clock-mode-line-map
'mouse-face (if (featurep 'xemacs) 'highlight 'mode-line-highlight)))
(force-mode-line-update)))
@ -363,9 +363,9 @@ the clocking selection, associated with the letter `d'."
(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))
(org-clock-update-mode-line)
(setq org-clock-mode-line-timer
(run-with-timer 60 60 'org-clock-update-mode-line))
(message "Clock started at %s" ts)))))))
(defun org-clock-find-position ()
@ -463,9 +463,9 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
(when org-log-note-clock-out
(org-add-log-setup 'clock-out nil nil nil
(concat "# Task: " (org-get-heading t) "\n\n")))
(when org-mode-line-timer
(cancel-timer org-mode-line-timer)
(setq org-mode-line-timer nil))
(when org-clock-mode-line-timer
(cancel-timer org-clock-mode-line-timer)
(setq org-clock-mode-line-timer nil))
(setq global-mode-string
(delq 'org-mode-line-string global-mode-string))
(force-mode-line-update)
@ -562,7 +562,7 @@ Puts the resulting times in minutes as a text property on each headline."
If TOTAL-ONLY is non-nil, only show the total time for the entire file
in the echo area."
(interactive)
(org-remove-clock-overlays)
(org-clock-remove-overlays)
(let (time h m p)
(org-clock-sum)
(unless total-only
@ -574,19 +574,19 @@ in the echo area."
(point) :org-clock-minutes)))
(goto-char p)
(when (setq time (get-text-property p :org-clock-minutes))
(org-put-clock-overlay time (funcall outline-level))))
(org-clock-put-overlay time (funcall outline-level))))
(setq h (/ org-clock-file-total-minutes 60)
m (- org-clock-file-total-minutes (* 60 h)))
;; Arrange to remove the overlays upon next change.
(when org-remove-highlights-with-change
(org-add-hook 'before-change-functions 'org-remove-clock-overlays
(org-add-hook 'before-change-functions 'org-clock-remove-overlays
nil 'local))))
(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)
(defun org-put-clock-overlay (time &optional level)
(defun org-clock-put-overlay (time &optional level)
"Put an overlays on the current line, displaying TIME.
If LEVEL is given, prefix time with a corresponding number of stars.
This creates a new overlay and stores it in `org-clock-overlays', so that it
@ -605,7 +605,7 @@ will be easy to remove."
(org-add-props (format fmt
(make-string l ?*) h m
(make-string (- 16 l) ?\ ))
'(face secondary-selection))
(list 'face 'org-clock-overlay))
""))
(if (not (featurep 'xemacs))
(org-overlay-put ov 'display tx)
@ -613,7 +613,7 @@ will be easy to remove."
(org-overlay-put ov 'end-glyph (make-glyph tx)))
(push ov org-clock-overlays)))
(defun org-remove-clock-overlays (&optional beg end noremove)
(defun org-clock-remove-overlays (&optional beg end noremove)
"Remove the occur highlights from the buffer.
BEG and END are ignored. If NOREMOVE is nil, remove this function
from the `before-change-functions' in the current buffer."
@ -623,7 +623,7 @@ from the `before-change-functions' in the current buffer."
(setq org-clock-overlays nil)
(unless noremove
(remove-hook 'before-change-functions
'org-remove-clock-overlays 'local))))
'org-clock-remove-overlays 'local))))
(defvar state) ;; dynamically scoped into this function
(defun org-clock-out-if-current ()
@ -671,7 +671,7 @@ will be updated. If not, a new clocktable will be inserted.
When called with a prefix argument, move to the first clock table in the
buffer and update it."
(interactive "P")
(org-remove-clock-overlays)
(org-clock-remove-overlays)
(when arg
(org-find-dblock "clocktable")
(org-show-entry))

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -594,7 +594,7 @@ an integer, select that value."
This respects the format of the time stamp in S, active or non-active,
and also including time or not. S must be just a time stamp, no text
around it."
(when (string-match (concat "^" org-ts-regexp3 "$") s)
(when (and s (string-match (concat "^" org-ts-regexp3 "$") s))
(let* ((time (org-parse-time-string s 'nodefaults))
(active (equal (string-to-char s) ?<))
(fmt (funcall (if (nth 1 time) 'cdr 'car) org-time-stamp-formats))
@ -1067,10 +1067,12 @@ PARAMS is a property list of parameters:
:width enforce same column widths with <N> specifiers.
:id the :ID: property of the entry where the columns view
should be built, as a string. When `local', call locally.
should be built. When the symbol `local', call locally.
When `global' call column view with the cursor at the beginning
of the buffer (usually this means that the whole buffer switches
to column view).
to column view). When \"file:path/to/file.org\", invoke column
view at the start of that file. Otherwise, the ID is located
using `org-id-find'.
:hlines When t, insert a hline before each item. When a number, insert
a hline before each level <= that number.
:vlines When t, make each column a colgroup to enforce vertical lines.
@ -1083,20 +1085,38 @@ PARAMS is a property list of parameters:
(maxlevel (plist-get params :maxlevel))
(content-lines (org-split-string (plist-get params :content) "\n"))
(skip-empty-rows (plist-get params :skip-empty-rows))
tbl id idpos nfields tmp recalc line)
(save-excursion
(save-restriction
(when (setq id (plist-get params :id))
(cond ((not id) nil)
((eq id 'global) (goto-char (point-min)))
((eq id 'local) nil)
((setq idpos (org-find-entry-with-id id))
(goto-char idpos))
(t (error "Cannot find entry with :ID: %s" id))))
(org-columns)
(setq tbl (org-columns-capture-view maxlevel skip-empty-rows))
(setq nfields (length (car tbl)))
(org-columns-quit)))
tbl id idpos nfields tmp recalc line
id-as-string view-file view-pos)
(when (setq id (plist-get params :id))
(setq id-as-string (cond ((numberp id) (number-to-string id))
((symbolp id) (symbol-name id))
((stringp id) id)
(t "")))
(cond ((not id) nil)
((eq id 'global) (setq view-pos (point-min)))
((eq id 'local))
((string-match "^file:\\(.*\\)" id-as-string)
(setq view-file (match-string 1 id-as-string)
view-pos 1)
(unless (file-exists-p view-file)
(error "No such file: \"%s\"" id-as-string)))
((setq idpos (org-find-entry-with-id id))
(setq view-pos idpos))
((setq idpos (org-id-find id))
(setq view-file (car idpos))
(setq view-pos (cdr idpos)))
(t (error "Cannot find entry with :ID: %s" id))))
(with-current-buffer (if view-file
(get-file-buffer view-file)
(current-buffer))
(save-excursion
(save-restriction
(widen)
(goto-char (or view-pos (point)))
(org-columns)
(setq tbl (org-columns-capture-view maxlevel skip-empty-rows))
(setq nfields (length (car tbl)))
(org-columns-quit))))
(goto-char pos)
(move-marker pos nil)
(when tbl
@ -1108,7 +1128,9 @@ PARAMS is a property list of parameters:
(if (string-match "\\` *\\(\\*+\\)" (caar tbl))
(if (and (not (eq (car tmp) 'hline))
(or (eq hlines t)
(and (numberp hlines) (<= (- (match-end 1) (match-beginning 1)) hlines))))
(and (numberp hlines)
(<= (- (match-end 1) (match-beginning 1))
hlines))))
(push 'hline tmp)))
(push (pop tbl) tmp)))
(setq tbl (nreverse tmp)))

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -157,7 +157,9 @@ WINDOW defaults to the selected window. MAX-HEIGHT and MIN-HEIGHT are
passed through to `fit-window-to-buffer'. If SHRINK-ONLY is set, call
`shrink-window-if-larger-than-buffer' instead, the hight limit are
ignored in this case."
(cond ((> (frame-width) (window-width window))
(cond ((if (fboundp 'window-full-width-p)
(not (window-full-width-p window))
(> (frame-width) (window-width window)))
;; do nothing if another window would suffer
)
((and (fboundp 'fit-window-to-buffer) (not shrink-only))
@ -287,6 +289,15 @@ that can be added."
(org-no-properties (substring string (or from 0) to))
(substring-no-properties string from to)))
(defun org-count-lines (s)
"How many lines in string S?"
(let ((start 0) (n 1))
(while (string-match "\n" s start)
(setq start (match-end 0) n (1+ n)))
(if (and (> (length s) 0) (= (aref s (1- (length s))) ?\n))
(setq n (1- n)))
n))
(provide 'org-compat)
;; arch-tag: a0a0579f-e68c-4bdf-9e55-93768b846bbe

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -34,6 +34,7 @@
(declare-function org-agenda-skip "org-agenda" ())
(declare-function org-infojs-options-inbuffer-template "org-jsinfo" ())
(declare-function htmlize-region "ext:htmlize" (beg end))
(declare-function org-id-find-id-file "org-id" (id))
(defvar htmlize-buffer-places) ; from htmlize.el
(defgroup org-export nil
@ -298,6 +299,24 @@ drawer names to export."
"Hook for preprocessing an export buffer.
Pretty much the first thing when exporting is running this hook.")
(defvar org-export-preprocess-after-include-files-hook nil
"Hook for preprocessing an export buffer.
This is run after the contents of included files have been inserted.")
(defvar org-export-preprocess-after-tree-selection-hook nil
"Hook for preprocessing an export buffer.
This is run after selection of trees to be exported has happened.
This selection includes tags-based selection, as well as removal
of commented and archived trees.")
(defvar org-export-preprocess-before-backend-specifics-hook nil
"Hook run before backend-specific functions are called during preprocessing.")
(defvar org-export-preprocess-final-hook nil
"Hook for preprocessing an export buffer.
This is run as the last thing in the preprocessing buffer, just before
returning the buffer string to the backend.")
(defgroup org-export-translation nil
"Options for translating special ascii sequences for the export backends."
:tag "Org Export Translation"
@ -381,7 +400,7 @@ This option can also be set with the +OPTIONS line, e.g. \"-:nil\"."
(defcustom org-export-with-TeX-macros t
"Non-nil means, interpret simple TeX-like macros when exporting.
For example, HTML export converts \\alpha to &alpha; and \\AA to &Aring;.
No only real TeX macros will work here, but the standard HTML entities
Not only real TeX macros will work here, but the standard HTML entities
for math can be used as macro names as well. For a list of supported
names in HTML export, see the constant `org-html-entities'.
Not all export backends support this.
@ -522,6 +541,31 @@ Org-mode file."
:group 'org-export-html
:type '(string :tag "File or URL"))
(defconst org-export-html-scripts
"<script type=\"text/javascript\">
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = \"code-highlighted\";
elem.className = \"code-highlighted\";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*/-->
</script>"
"Basic javascript that is needed by HTML files produced by Org-mode.")
(defconst org-export-html-style-default
"<style type=\"text/css\">
<!--/*--><![CDATA[/*><!--*/
@ -547,6 +591,8 @@ Org-mode file."
dt { font-weight: bold; }
div.figure { padding: 0.5em; }
div.figure p { text-align: center; }
.linenr { font-size:smaller }
.code-highlighted {background-color:#ffff00;}
.org-info-js_info-navigation { border-style:none; }
#org-info-js_console-label { font-size:10px; font-weight:bold;
white-space:nowrap; }
@ -647,6 +693,12 @@ be linked only."
(const :tag "Always" t)
(const :tag "When there is no description" maybe)))
(defcustom org-export-html-inline-image-extensions
'("png" "jpeg" "jpg" "gif")
"Extensions of image files that can be inlined into HTML."
:group 'org-export-html
:type '(repeat (string :tag "Extension")))
;; FIXME: rename
(defcustom org-export-html-expand t
"Non-nil means, for HTML export, treat @<...> as HTML tag.
@ -1422,6 +1474,8 @@ translations. There is currently no way for users to extend this.")
(defvar org-export-target-aliases nil
"Alist of targets with invisible aliases.")
(defvar org-export-code-refs nil
"Alist of code references and line numbers")
(defun org-export-preprocess-string (string &rest parameters)
"Cleanup STRING so that that the true exported has a more consistent source.
@ -1442,13 +1496,12 @@ on this string to produce the exported version."
target-alist rtn)
(setq org-export-target-aliases nil)
(setq org-export-code-refs nil)
(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 marks some stuff for killing, stuff that has been
@ -1457,17 +1510,36 @@ on this string to produce the exported version."
(let ((org-inhibit-startup t)) (org-mode))
(setq case-fold-search t)
;; Call the hook
(run-hooks 'org-export-preprocess-hook)
(untabify (point-min) (point-max))
;; Handle include files
;; Handle include files, and call a hook
(org-export-handle-include-files)
(run-hooks 'org-export-preprocess-after-include-files-hook)
;; Get rid of excluded trees
;; Get rid of archived trees
(org-export-remove-archived-trees archived-trees)
;; Remove comment environment and comment subtrees
(org-export-remove-comment-blocks-and-subtrees)
;; Get rid of excluded trees, and call a hook
(org-export-handle-export-tags (plist-get parameters :select-tags)
(plist-get parameters :exclude-tags))
(run-hooks 'org-export-preprocess-after-tree-selection-hook)
;; Handle source code snippets
(org-export-replace-src-segments)
(org-export-replace-src-segments-and-examples backend)
;; Protect short examples marked by a leading colon
(org-export-protect-colon-examples)
;; Normalize footnotes
(when (plist-get parameters :footnotes)
(org-footnote-normalize nil t))
;; Find all headings and compute the targets for them
(setq target-alist (org-export-define-heading-targets target-alist))
@ -1487,9 +1559,6 @@ on this string to produce the exported version."
(goto-char (point-min))
(insert (plist-get parameters :add-text) "\n"))
;; Get rid of archived trees
(org-export-remove-archived-trees archived-trees)
;; Remove todo-keywords before exporting, if the user has requested so
(org-export-remove-headline-metadata parameters)
@ -1497,10 +1566,8 @@ on this string to produce the exported version."
;; but mark them as targets that should be invisible
(setq target-alist (org-export-handle-invisible-targets target-alist))
;; Protect examples
(org-export-protect-examples (if asciip 'indent nil))
;; Protect backend specific stuff, throw away the others.
;; Select and protect backend specific stuff, throw away stuff
;; that is specific for other backends
(org-export-select-backend-specific-text backend)
;; Protect quoted subtrees
@ -1512,13 +1579,15 @@ on this string to produce the exported version."
;; Blockquotes and verse
(org-export-mark-blockquote-and-verse)
;; Remove timestamps, if the user has requested so
(org-export-remove-clock-lines)
(unless (plist-get parameters :timestamps)
(org-export-remove-timestamps))
;; Attach captions to the correct object
(setq target-alist (org-export-attach-captions-and-attributes
backend target-alist))
;; Remove comment environment and comment subtrees
(org-export-remove-comment-blocks-and-subtrees)
;; Find matches for radio targets and turn them into internal links
(org-export-mark-radio-links)
@ -1542,22 +1611,28 @@ on this string to produce the exported version."
(when org-export-table-remove-special-lines
(org-export-remove-special-table-lines))
;; Specific LaTeX stuff
;; Another hook
(run-hooks 'org-export-preprocess-before-backend-specifics-hook)
;; LaTeX-specific preprocessing
(when latexp
(require 'org-export-latex nil)
(org-export-latex-preprocess))
;; Specific ASCII stuff
;; ASCII-specific preprocessing
(when asciip
(org-export-ascii-preprocess))
;; Specific HTML stuff
;; HTML-specific preprocessing
(when htmlp
(org-export-html-preprocess parameters))
;; Remove or replace comments
(org-export-handle-comments (plist-get parameters :comments))
;; Run the final hook
(run-hooks 'org-export-preprocess-final-hook)
(setq rtn (buffer-string)))
(kill-buffer " org-mode-tmp")
rtn))
@ -1578,16 +1653,24 @@ The new targets are added to TARGET-ALIST, which is also returned."
(org-init-section-numbers)
(let ((re (concat "^" org-outline-regexp
"\\| [ \t]*:ID:[ \t]*\\([^ \t\r\n]+\\)"))
level target)
level target last-section-target a)
(while (re-search-forward re nil t)
(if (match-end 1)
(push (cons (org-match-string-no-properties 1)
target) target-alist)
(progn
(push (cons (org-match-string-no-properties 1)
target) target-alist)
(setq a (or (assoc last-section-target org-export-target-aliases)
(progn
(push (list last-section-target)
org-export-target-aliases)
(car org-export-target-aliases))))
(push (caar target-alist) (cdr a)))
(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))))
(setq last-section-target target)
(push (cons target target) target-alist)
(add-text-properties
(point-at-bol) (point-at-eol)
@ -1632,12 +1715,15 @@ the current file."
(desc (match-end 2))
(link (org-link-unescape (match-string 1)))
(slink (org-solidify-link-text link))
found props pos
found props pos cref
(target
(cond
((cdr (assoc slink target-alist)))
((and (string-match "^id:" link)
(cdr (assoc (substring link 3) target-alist))))
((string-match "^(\\(.*\\))$" link)
(setq cref (match-string 1 link))
(concat "coderef:" cref))
((string-match org-link-types-re link) nil)
((or (file-name-absolute-p link)
(string-match "^\\." link))
@ -1767,9 +1853,27 @@ from the buffer."
(when (or (not todo) (not tags) (not pri))
(goto-char (point-min))
(while (re-search-forward re nil t)
(setq rpl (mapconcat (lambda (i) (if (match-end i) (match-string i) ""))
elts " "))
(replace-match rpl t t)))))
(org-if-unprotected
(setq rpl (mapconcat (lambda (i) (if (match-end i) (match-string i) ""))
elts " "))
(replace-match rpl t t))))))
(defun org-export-remove-timestamps ()
"Remove timestamps and keywords for export."
(while (re-search-forward org-maybe-keyword-time-regexp nil t)
(backward-char 1)
(org-if-unprotected
(replace-match "")
(beginning-of-line 1)
(if (looking-at "[- \t]*\\(=>[- \t0-9:]*\\)?[ \t]*\n")
(replace-match "")))))
(defun org-export-remove-clock-lines ()
"Remove timestamps and keywords for export."
(let ((re (concat "^[ \t]*" org-clock-string ".*\n?")))
(while (re-search-forward re nil t)
(org-if-unprotected
(replace-match "")))))
(defun org-export-protect-quoted-subtrees ()
"Mark quoted subtrees with the protection property."
@ -1789,24 +1893,25 @@ from the buffer."
'(org-protected t))
(goto-char (1+ (match-end 4)))))
(defun org-export-protect-examples (&optional indent)
"Protect code that should be exported as monospaced examples."
(defun org-export-protect-colon-examples ()
"Protect lines starting with a colon."
(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 (if indent ": " ":"))
(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))))
(let ((re "^[ \t]*:\\([ \t]\\|$\\)") beg end)
(while (re-search-forward re nil t)
(beginning-of-line 1)
(setq beg (point))
(while (looking-at re)
(end-of-line 1)
(or (eobp) (forward-char 1)))
(add-text-properties beg (if (bolp) (1- (point)) (point))
'(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")))
(case-fold-search t)
fmt)
(while formatters
@ -1969,10 +2074,15 @@ When it is nil, all comments will be removed."
(org-translate-link
(org-link-expand-abbrev (match-string 1)))))
(s (concat
"[[" xx "]"
"[[" (org-add-props (copy-sequence xx)
nil 'org-protected t)
"]"
(if (match-end 3)
(match-string 2)
(concat "[" xx "]"))
(concat "[" (org-add-props
(copy-sequence xx)
'(org-protected t))
"]"))
"]")))
(put-text-property 0 (length s) 'face 'org-link s)
(replace-match s t t))))))
@ -1993,8 +2103,10 @@ 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))))
(if (and (not (= (char-after (match-beginning 3))
(char-after (match-beginning 4))))
(save-excursion (goto-char (match-beginning 0))
(save-match-data (not (org-at-table-p)))))
(org-if-unprotected
(subst-char-in-region (match-beginning 0) (match-end 0)
?\n ?\ t)
@ -2149,7 +2261,7 @@ TYPE must be a string, any of:
(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 prefix prefix1)
params file markup lang start end prefix prefix1 switches)
(goto-char (point-min))
(while (re-search-forward "^#\\+INCLUDE:?[ \t]+\\(.*\\)" nil t)
(setq params (read (concat "(" (match-string 1) ")"))
@ -2157,7 +2269,9 @@ TYPE must be a string, any of:
prefix1 (org-get-and-remove-property 'params :prefix1)
file (org-symname-or-string (pop params))
markup (org-symname-or-string (pop params))
lang (org-symname-or-string (pop params)))
lang (and (member markup '("src" "SRC"))
(org-symname-or-string (pop params)))
switches (mapconcat '(lambda (x) (format "%s" x)) params " "))
(delete-region (match-beginning 0) (match-end 0))
(if (or (not file)
(not (file-exists-p file))
@ -2165,9 +2279,11 @@ TYPE must be a string, any of:
(insert (format "CANNOT INCLUDE FILE %s" file))
(when markup
(if (equal (downcase markup) "src")
(setq start (format "#+begin_src %s\n" (or lang "fundamental"))
(setq start (format "#+begin_src %s %s\n"
(or lang "fundamental")
(or switches ""))
end "#+end_src")
(setq start (format "#+begin_%s\n" markup)
(setq start (format "#+begin_%s %s\n" markup switches)
end (format "#+end_%s" markup))))
(insert (or start ""))
(insert (org-get-file-contents (expand-file-name file) prefix prefix1))
@ -2207,70 +2323,207 @@ in the list) and remove property and value from the list in LISTVAR."
(if s (symbol-name s) s)
s))
;;; Fontification of code
;; Currently only for the HTML backend, but who knows....
(defun org-export-replace-src-segments ()
;;; Fontification and line numbers for code examples
(defvar org-export-last-code-line-counter-value 0)
(defun org-export-replace-src-segments-and-examples (backend)
"Replace source code segments with special code for export."
(setq org-export-last-code-line-counter-value 0)
(let ((case-fold-search t)
lang code trans)
lang code trans opts)
(goto-char (point-min))
(while (re-search-forward
"^#\\+BEGIN_SRC:?[ \t]+\\([^ \t\n]+\\)[ \t]*\n\\([^\000]+?\n\\)#\\+END_SRC.*"
"\\(^#\\+BEGIN_SRC:?[ \t]+\\([^ \t\n]+\\)\\(.*\\)\n\\([^\000]+?\n\\)#\\+END_SRC.*\\)\\|\\(^#\\+BEGIN_EXAMPLE:?\\(?:[ \t]+\\(.*\\)\\)?\n\\([^\000]+?\n\\)#\\+END_EXAMPLE.*\\)"
nil t)
(setq lang (match-string 1) code (match-string 2)
trans (org-export-format-source-code lang code))
(if (match-end 1)
;; src segments
(setq lang (match-string 2)
opts (match-string 3)
code (match-string 4))
(setq lang nil
opts (match-string 6)
code (match-string 7)))
(setq trans (org-export-format-source-code-or-example
backend lang code opts))
(replace-match trans t t))))
(defvar htmlp) ;; dynamically scoped from org-exp.el
(defvar htmlp) ;; dynamically scoped
(defvar latexp) ;; dynamically scoped
(defun org-export-format-source-code (lang code)
(defun org-export-format-source-code-or-example (backend
lang code &optional opts)
"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."
If LANG is nil, do not add any fontification.
OPTS contains formatting optons, like `-n' for triggering numbering lines,
and `+n' for continuing previous numering.
Code formatting according to language currently only works for HTML.
Numbering lines works for all three major backends (html, latex, and ascii)."
(save-match-data
(cond
(htmlp
;; We are exporting to HTML
(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 "<pre\\([^>]*\\)>\n?" htmltext)
(setq htmltext (replace-match
(format "<pre class=\"src src-%s\">\n" lang)
t t htmltext)))
(concat "\n#+BEGIN_HTML\n" htmltext "\n#+END_HTML\n\n"))))
(t
;; This is not HTML, so just make it an example.
(let (num cont rtn named rpllbl keepp textareap cols rows fmt)
(setq opts (or opts "")
num (string-match "[-+]n\\>" opts)
cont (string-match "\\+n\\>" opts)
rpllbl (string-match "-r\\>" opts)
keepp (string-match "-k\\>" opts)
textareap (string-match "-t\\>" opts)
cols (if (string-match "-w[ \t]+\\([0-9]+\\)" opts)
(string-to-number (match-string 1 opts))
80)
rows (if (string-match "-h[ \t]+\\([0-9]+\\)" opts)
(string-to-number (match-string 1 opts))
(org-count-lines code))
fmt (if (string-match "-l[ \t]+\"\\([^\"\n]+\\)\"" opts)
(match-string 1 opts)))
(when (and textareap (eq backend 'html))
;; we cannot use numbering or highlighting.
(setq num nil cont nil lang nil))
(if keepp (setq rpllbl 'keep))
(setq rtn code)
(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")))))
(setq rtn (with-temp-buffer
(insert rtn)
;; Free up the protected lines
(goto-char (point-min))
(while (re-search-forward "^," nil t)
(replace-match "")
(end-of-line 1))
(buffer-string))))
;; Now backend-specific coding
(cond
((eq backend 'html)
;; We are exporting to HTML
(when lang
(require 'htmlize nil t)
(when (not (fboundp 'htmlize-region-for-paste))
;; we do not have htmlize.el, or an old version of it
(setq lang nil)
(message
"htmlize.el 1.34 or later is needed for source code formatting")))
(if lang
(let* ((mode (and lang (intern (concat lang "-mode"))))
(org-inhibit-startup t)
(org-startup-folded nil))
(setq rtn
(with-temp-buffer
(insert rtn)
(if (functionp mode)
(funcall mode)
(fundamental-mode))
(font-lock-fontify-buffer)
(org-export-htmlize-region-for-paste
(point-min) (point-max))))
(if (string-match "<pre\\([^>]*\\)>\n?" rtn)
(setq rtn (replace-match
(format "<pre class=\"src src-%s\">\n" lang)
t t rtn))))
(if textareap
(setq rtn (concat
(format "<p>\n<textarea cols=\"%d\" rows=\"%d\" overflow-x:scroll >\n"
cols rows)
rtn "</textarea>\n</p>\n"))
(with-temp-buffer
(insert rtn)
(goto-char (point-min))
(while (re-search-forward "[<>&]" nil t)
(replace-match (cdr (assq (char-before)
'((?&."&amp;")(?<."&lt;")(?>."&gt;"))))
t t))
(setq rtn (buffer-string)))
(setq rtn (concat "<pre class=\"example\">\n" rtn "</pre>\n"))))
(unless textareap
(setq rtn (org-export-number-lines rtn 'html 1 1 num
cont rpllbl fmt)))
(concat "\n#+BEGIN_HTML\n" (org-add-props rtn '(org-protected t)) "\n#+END_HTML\n\n"))
((eq backend 'latex)
(setq rtn (org-export-number-lines rtn 'latex 0 0 num cont rpllbl fmt))
(concat "\n#+BEGIN_LaTeX\n"
(org-add-props (concat "\\begin{verbatim}\n" rtn "\n\\end{verbatim}\n")
'(org-protected t))
"#+END_LaTeX\n\n"))
((eq backend 'ascii)
;; This is not HTML or LaTeX, so just make it an example.
(setq rtn (org-export-number-lines rtn 'ascii 0 0 num cont rpllbl fmt))
(concat "#+BEGIN_ASCII\n"
(org-add-props
(concat
(mapconcat
(lambda (l) (concat " " l))
(org-split-string rtn "\n")
"\n")
"\n")
'(org-protected t))
"#+END_ASCII\n"))))))
(defun org-export-number-lines (text backend
&optional skip1 skip2 number cont
replace-labels label-format)
(if (and (not number) (not (eq replace-labels 'keep)))
(setq replace-labels nil)) ;; must use names if no numbers
(setq skip1 (or skip1 0) skip2 (or skip2 0))
(if (not cont) (setq org-export-last-code-line-counter-value 0))
(with-temp-buffer
(insert text)
(goto-char (point-max))
(skip-chars-backward " \t\n\r")
(delete-region (point) (point-max))
(beginning-of-line (- 1 skip2))
(let* ((last (org-current-line))
(n org-export-last-code-line-counter-value)
(nmax (+ n (- last skip1)))
(fmt (format "%%%dd: " (length (number-to-string nmax))))
(fm
(cond
((eq backend 'html) (format "<span class=\"linenr\">%s</span>"
fmt))
((eq backend 'ascii) fmt)
((eq backend 'latex) fmt)
(t "")))
(label-format (or label-format org-coderef-label-format))
(label-pre (if (string-match "%s" label-format)
(substring label-format 0 (match-beginning 0))
label-format))
(label-post (if (string-match "%s" label-format)
(substring label-format (match-end 0))
""))
(lbl-re
(concat
".*?\\S-.*?\\([ \t]*\\("
(regexp-quote label-pre)
"\\([-a-zA-Z0-9_]+\\)"
(regexp-quote label-post)
"\\)\\)"))
ref)
(goto-line (1+ skip1))
(while (and (re-search-forward "^" nil t) (not (eobp)) (< n nmax))
(if number
(insert (format fm (incf n)))
(forward-char 1))
(when (and (not (eq replace-labels 'keep))
(looking-at lbl-re))
(setq ref (match-string 3))
(if replace-labels
(progn
(delete-region (match-beginning 1) (match-end 1))
(push (cons ref n) org-export-code-refs))
(goto-char (match-beginning 2))
(delete-region (match-beginning 2) (match-end 2))
(insert "(" ref ")")
(push (cons ref (concat "(" ref ")")) org-export-code-refs))
(when (eq backend 'html)
(save-excursion
(beginning-of-line 1)
(insert (format "<span id=\"coderef-%s\" class=\"coderef-off\">"
ref))
(end-of-line 1)
(insert "</span>")))))
(setq org-export-last-code-line-counter-value n)
(goto-char (point-max))
(newline)
(buffer-string))))
;;; ASCII export
@ -2351,6 +2604,8 @@ underlined headlines. The default is 3."
:drawers (plist-get opt-plist :drawers)
:tags (plist-get opt-plist :tags)
:priority (plist-get opt-plist :priority)
:footnotes (plist-get opt-plist :footnotes)
:timestamps (plist-get opt-plist :timestamps)
:todo-keywords (plist-get opt-plist :todo-keywords)
:verbatim-multiline t
:select-tags (plist-get opt-plist :select-tags)
@ -2360,7 +2615,7 @@ underlined headlines. The default is 3."
:add-text (plist-get opt-plist :text))
"\n"))
thetoc have-headings first-heading-pos
table-open table-buffer)
table-open table-buffer link desc)
(let ((inhibit-read-only t))
(org-unmodified
@ -2473,9 +2728,19 @@ underlined headlines. The default is 3."
(setq line (org-html-expand-for-ascii line))
;; Replace links with the description when possible
(while (string-match org-bracket-link-regexp line)
(setq line (replace-match
(if (match-end 3) "[\\3]" "[\\1]")
t nil line)))
(setq link (match-string 1 line)
desc (match-string (if (match-end 3) 3 1) line))
(if (and (> (length link) 8)
(equal (substring link 0 8) "coderef:"))
(setq line (replace-match
(format (org-export-get-coderef-format (substring link 8) desc)
(cdr (assoc
(substring link 8)
org-export-code-refs)))
t t line))
(setq line (replace-match
(if (match-end 3) "[\\3]" "[\\1]")
t nil line))))
(when custom-times
(setq line (org-translate-time line)))
(cond
@ -2719,7 +2984,8 @@ Does include HTML export options as well as TODO and CATEGORY stuff."
#+EMAIL: %s
#+DATE: %s
#+LANGUAGE: %s
#+OPTIONS: H:%d num:%s toc:%s \\n:%s @:%s ::%s |:%s ^:%s -:%s f:%s *:%s TeX:%s LaTeX:%s skip:%s d:%s todo:%s pri:%s tags:%s
#+OPTIONS: H:%d num:%s toc:%s \\n:%s @:%s ::%s |:%s ^:%s -:%s f:%s *:%s <:%s
#+OPTIONS: TeX:%s LaTeX:%s skip:%s d:%s todo:%s pri:%s tags:%s
%s
#+EXPORT_SELECT_TAGS: %s
#+EXPORT_EXCLUDE_TAGS: %s
@ -2750,6 +3016,7 @@ Does include HTML export options as well as TODO and CATEGORY stuff."
org-export-with-special-strings
org-export-with-footnotes
org-export-with-emphasize
org-export-with-timestamps
org-export-with-TeX-macros
org-export-with-LaTeX-fragments
org-export-skip-text-before-1st-heading
@ -2933,7 +3200,8 @@ PUB-DIR is set, use this as the publishing directory."
(style (concat (if (plist-get opt-plist :style-include-default)
org-export-html-style-default)
(plist-get opt-plist :style)
(plist-get opt-plist :style-extra)))
(plist-get opt-plist :style-extra)
"\n" org-export-html-scripts))
(html-extension (plist-get opt-plist :html-extension))
(link-validate (plist-get opt-plist :link-validation-function))
valid thetoc have-headings first-heading-pos
@ -3032,6 +3300,8 @@ PUB-DIR is set, use this as the publishing directory."
:todo-keywords (plist-get opt-plist :todo-keywords)
:tags (plist-get opt-plist :tags)
:priority (plist-get opt-plist :priority)
:footnotes (plist-get opt-plist :footnotes)
:timestamps (plist-get opt-plist :timestamps)
:archived-trees
(plist-get opt-plist :archived-trees)
:select-tags (plist-get opt-plist :select-tags)
@ -3046,7 +3316,8 @@ PUB-DIR is set, use this as the publishing directory."
ind item-type starter didclose
rpl path attr desc descp desc1 desc2 link
snumber fnc item-tag
footnotes
footnotes footref-seen
id-file
)
(let ((inhibit-read-only t))
@ -3214,12 +3485,12 @@ lang=\"%s\" xml:lang=\"%s\">
;; Fixed-width, verbatim lines (examples)
(when (and org-export-with-fixed-width
(string-match "^[ \t]*:\\(.*\\)" line))
(string-match "^[ \t]*:\\(\\([ \t]\\|$\\)\\(.*\\)\\)" line))
(when (not infixed)
(setq infixed t)
(org-close-par-maybe)
(insert "<pre class=\"example\">\n"))
(insert (org-html-protect (match-string 1 line)) "\n")
(insert (org-html-protect (match-string 3 line)) "\n")
(when (or (not lines)
(not (string-match "^[ \t]*\\(:.*\\)"
(car lines))))
@ -3236,7 +3507,6 @@ lang=\"%s\" xml:lang=\"%s\">
(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"))
@ -3308,7 +3578,7 @@ lang=\"%s\" xml:lang=\"%s\">
;; Format the links
(setq start 0)
(while (string-match org-bracket-link-analytic-regexp line start)
(while (string-match org-bracket-link-analytic-regexp++ line start)
(setq start (match-beginning 0))
(setq path (save-match-data (org-link-unescape
(match-string 3 line))))
@ -3326,7 +3596,8 @@ lang=\"%s\" xml:lang=\"%s\">
descp (and desc1 (not (equal desc1 desc2)))
desc (or desc1 desc2))
;; Make an image out of the description if that is so wanted
(when (and descp (org-file-image-p desc))
(when (and descp (org-file-image-p
desc org-export-html-inline-image-extensions))
(save-match-data
(if (string-match "^file:" desc)
(setq desc (substring desc (match-end 0)))))
@ -3344,11 +3615,24 @@ lang=\"%s\" xml:lang=\"%s\">
"\"" attr ">"
(org-export-html-format-desc desc)
"</a>")))
((and (equal type "id")
(setq id-file (org-id-find-id-file path)))
;; This is an id: link to another file (if it was the same file,
;; it would have become an internal link...)
(setq id-file (file-relative-name
id-file (file-name-directory org-current-export-file)))
(setq id-file (concat (file-name-sans-extension id-file)
"." html-extension))
(setq rpl (concat "<a href=\"" id-file "#" path "\""
attr ">"
(org-export-html-format-desc desc)
"</a>")))
((member type '("http" "https"))
;; standard URL, just check if we need to inline an image
(if (and (or (eq t org-export-html-inline-images)
(and org-export-html-inline-images (not descp)))
(org-file-image-p path))
(org-file-image-p
path org-export-html-inline-image-extensions))
(setq rpl (org-export-html-format-image
(concat type ":" path)))
(setq link (concat type ":" path))
@ -3366,6 +3650,13 @@ lang=\"%s\" xml:lang=\"%s\">
(org-export-html-format-desc desc)
"</a>")))
((string= type "coderef")
(setq rpl (format "<a href=\"#coderef-%s\" class=\"coderef\" onmouseover=\"CodeHighlightOn(this, 'coderef-%s');\" onmouseout=\"CodeHighlightOff(this, 'coderef-%s');\">%s</a>"
path path path
(format (org-export-get-coderef-format path (and descp desc))
(cdr (assoc path org-export-code-refs))))))
((functionp (setq fnc (nth 2 (assoc type org-link-protocols))))
;; The link protocol has a function for format the link
(setq rpl
@ -3385,7 +3676,9 @@ lang=\"%s\" xml:lang=\"%s\">
(if (functionp link-validate)
(funcall link-validate filename current-dir)
t))
(setq file-is-image-p (org-file-image-p filename))
(setq file-is-image-p
(org-file-image-p
filename org-export-html-inline-image-extensions))
(setq thefile (if abs-p (expand-file-name filename) filename))
(when (and org-export-html-link-org-files-as-html
(string-match "\\.org$" thefile))
@ -3441,12 +3734,18 @@ lang=\"%s\" xml:lang=\"%s\">
(while (string-match "\\([^* \t].*?\\)\\[\\([0-9]+\\)\\]" line start)
(if (get-text-property (match-beginning 2) 'org-protected line)
(setq start (match-end 2))
(let ((n (match-string 2 line)))
(let ((n (match-string 2 line)) extra a)
(if (setq a (assoc n footref-seen))
(progn
(setcdr a (1+ (cdr a)))
(setq extra (format ".%d" (cdr a))))
(setq extra "")
(push (cons n 1) footref-seen))
(setq line
(replace-match
(format
"%s<sup><a class=\"footref\" name=\"fnr.%s\" href=\"#fn.%s\">%s</a></sup>"
(match-string 1 line) n n n)
"%s<sup><a class=\"footref\" name=\"fnr.%s%s\" href=\"#fn.%s\">%s</a></sup>"
(match-string 1 line) n extra n n)
t t line))))))
(cond
@ -3585,6 +3884,17 @@ lang=\"%s\" xml:lang=\"%s\">
(org-export-preserve-breaks
(setq line (concat line "<br/>"))))
;; Check if a paragraph should be started
(let ((start 0))
(while (and org-par-open
(string-match "\\\\par\\>" line start))
;; Leave a space in the </p> so that the footnote matcher
;; does not see this.
(if (not (get-text-property (match-beginning 0)
'org-protected line))
(setq line (replace-match "</p ><p >" t t line)))
(setq start (match-end 0))))
(insert line "\n")))))
;; Properly close all local lists and other lists
@ -3693,6 +4003,15 @@ lang=\"%s\" xml:lang=\"%s\">
(kill-buffer (current-buffer)))
(current-buffer)))))
(defun org-export-get-coderef-format (path desc)
(save-match-data
(if (and desc (string-match
(regexp-quote (concat "(" path ")"))
desc))
(replace-match "%s" t t desc)
"%s")))
(defun org-export-html-format-href (s)
"Make sure the S is valid as a href reference in an XHTML document."
(save-match-data
@ -3881,14 +4200,18 @@ lang=\"%s\" xml:lang=\"%s\">
(push html-table-tag html))
(concat (mapconcat 'identity html "\n") "\n")))
(defun org-table-clean-before-export (lines)
(defun org-table-clean-before-export (lines &optional maybe-quoted)
"Check if the table has a marking column.
If yes remove the column and the special lines."
(setq org-table-colgroup-info nil)
(if (memq nil
(mapcar
(lambda (x) (or (string-match "^[ \t]*|-" x)
(string-match "^[ \t]*| *\\([#!$*_^ /]\\) *|" x)))
(string-match
(if maybe-quoted
"^[ \t]*| *\\\\?\\([\#!$*_^ /]\\) *|"
"^[ \t]*| *\\([\#!$*_^ /]\\) *|")
x)))
lines))
(progn
(setq org-table-clean-did-remove-column nil)
@ -4007,22 +4330,16 @@ But it has the disadvantage, that Org-mode's HTML conversions cannot be used."
(catch 'exit
(let (r b)
(while (string-match org-maybe-keyword-time-regexp s)
(if (and (match-end 1) (equal (match-string 1 s) org-clock-string))
;; never export CLOCK
(throw 'exit ""))
(or b (setq b (substring s 0 (match-beginning 0))))
(if (not org-export-with-timestamps)
(setq r (concat r (substring s 0 (match-beginning 0)))
s (substring s (match-end 0)))
(setq r (concat
r (substring s 0 (match-beginning 0))
(if (match-end 1)
(format "@<span class=\"timestamp-kwd\">%s @</span>"
(match-string 1 s)))
(format " @<span class=\"timestamp\">%s@</span>"
(substring
(org-translate-time (match-string 3 s)) 1 -1)))
s (substring s (match-end 0)))))
(setq r (concat
r (substring s 0 (match-beginning 0))
(if (match-end 1)
(format "@<span class=\"timestamp-kwd\">%s @</span>"
(match-string 1 s)))
(format " @<span class=\"timestamp\">%s@</span>"
(substring
(org-translate-time (match-string 3 s)) 1 -1)))
s (substring s (match-end 0))))
;; Line break if line started and ended with time stamp stuff
(if (not r)
s

View File

@ -4,7 +4,7 @@
;;
;; Emacs Lisp Archive Entry
;; Filename: org-export-latex.el
;; Version: 6.16
;; Version: 6.19a
;; Author: Bastien Guerry <bzg AT altern DOT org>
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
;; Keywords: org, wp, tex
@ -62,12 +62,11 @@
(defvar org-export-latex-add-level 0)
(defvar org-export-latex-sectioning "")
(defvar org-export-latex-sectioning-depth 0)
(defvar org-export-latex-special-string-regexps
'(org-ts-regexp
org-scheduled-string
org-deadline-string
org-clock-string)
"A list of regexps to convert as special keywords.")
(defvar org-export-latex-special-keyword-regexp
(concat "\\<\\(" org-scheduled-string "\\|"
org-deadline-string "\\|"
org-closed-string"\\)")
"Regexp matching special time planning keywords plus the time after it.")
(defvar latexp) ; dynamically scoped from org.el
(defvar re-quote) ; dynamically scoped from org.el
@ -221,12 +220,25 @@ inserted headline and is mandatory."
(symbol :tag "Convert as descriptive list" description)
(string :tag "Use a section string" :value "\\subparagraph{%s}")))
(defcustom org-export-latex-list-parameters
'(:cbon "\\texttt{[ ]}" :cboff "\\texttt{[ ]}")
"Parameters for the LaTeX list exporter.
These parameters will be passed on to `org-list-to-latex', which in turn
will pass them (combined with the LaTeX default list parameters) to
`org-list-to-generic'."
:group 'org-export-latex
:type 'plist)
(defcustom org-export-latex-remove-from-headlines
'(:todo t :priority t :tags t)
"A plist of keywords to remove from headlines.
'(:todo nil :priority nil :tags nil)
"A plist of keywords to remove from headlines. OBSOLETE.
Non-nil means remove this keyword type from the headline.
Don't remove the keys, just change their values."
Don't remove the keys, just change their values.
Obsolete, this variable is no longer used. Use the separate
variables `org-export-with-todo-keywords', `org-export-with-priority',
and `org-export-with-tags' instead."
:type 'plist
:group 'org-export-latex)
@ -235,6 +247,16 @@ Don't remove the keys, just change their values."
:group 'org-export-latex
:type 'string)
(defcustom org-export-latex-inline-image-extensions
'("pdf" "jpeg" "jpg" "png")
"Extensions of image files that can be inlined into LaTeX.
Note that this depends on the way the LaTeX file is processed.
The default setting (pdf and jpg) assumes that pdflatex is doing the
processing. If you are using latex and dvips or something similar,
only postscript files can be included."
:group 'org-export-html
:type '(repeat (string :tag "Extension")))
(defcustom org-export-latex-coding-system nil
"Coding system for the exported LaTex file."
:group 'org-export-latex
@ -430,6 +452,8 @@ when PUB-DIR is set, use this as the publishing directory."
:comments nil
:tags (plist-get opt-plist :tags)
:priority (plist-get opt-plist :priority)
:footnotes (plist-get opt-plist :footnotes)
:timestamps (plist-get opt-plist :timestamps)
:todo-keywords (plist-get opt-plist :todo-keywords)
:add-text (if (eq to-buffer 'string) nil text)
:skip-before-1st-heading skip
@ -664,12 +688,22 @@ LEVEL indicates the default depth for export."
(org-combine-plists (org-default-export-plist) ext-plist
(org-infile-export-plist))
org-export-latex-class
(save-excursion
(goto-char (point-min))
(if (and (re-search-forward "^#\\+LaTeX_CLASS:[ \t]*\\([a-zA-Z]+\\)" nil t)
(assoc (match-string 1) org-export-latex-classes))
(match-string 1)
org-export-latex-default-class))
(or (and (org-region-active-p)
(save-excursion
(goto-char (region-beginning))
(and (looking-at org-complex-heading-regexp)
(org-entry-get nil "LaTeX_CLASS" 'selective))))
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(and (re-search-forward "^#\\+LaTeX_CLASS:[ \t]*\\([a-zA-Z]+\\)" nil t)
(match-string 1))))
org-export-latex-default-class)
org-export-latex-class
(or (car (assoc org-export-latex-class org-export-latex-classes))
(error "No definition for class `%s' in `org-export-latex-classes'"
org-export-latex-class))
org-export-latex-header
(cadr (assoc org-export-latex-class org-export-latex-classes))
org-export-latex-sectioning
@ -778,8 +812,7 @@ links, keywords, lists, tables, fixed-width"
(unless (memq 'links exclude-list)
(org-export-latex-links))
(unless (memq 'keywords exclude-list)
(org-export-latex-keywords
(plist-get org-export-latex-options-plist :timestamps)))
(org-export-latex-keywords))
(unless (memq 'lists exclude-list)
(org-export-latex-lists))
(unless (memq 'tables exclude-list)
@ -806,7 +839,7 @@ links, keywords, lists, tables, fixed-width"
(match-end 0) '(org-protected t)))
(buffer-string))))
(defun org-export-latex-keywords-maybe (remove-list)
(defun org-export-latex-keywords-maybe (&optional remove-list)
"Maybe remove keywords depending on rules in REMOVE-LIST."
(goto-char (point-min))
(let ((re-todo (mapconcat 'identity org-export-latex-todo-keywords-1 "\\|"))
@ -815,12 +848,12 @@ links, keywords, lists, tables, fixed-width"
(when (re-search-forward (concat "^\\(" re-todo "\\)") nil t)
(if (plist-get remove-list :todo)
(replace-match "")
(replace-match (format "\\texttt{%s}" (match-string 1)) t t)))
(replace-match (format "\\textbf{%s}" (match-string 1)) t t)))
;; convert priority string
(when (re-search-forward "\\[\\\\#.\\]" nil t)
(if (plist-get remove-list :priority)
(replace-match "")
(replace-match (format "\\texttt{%s}" (match-string 0)) t t)))
(replace-match (format "\\textbf{%s}" (match-string 0)) t t)))
;; convert tags
(when (re-search-forward "\\(:[a-zA-Z0-9_@]+\\)+:" nil t)
(if (or (not org-export-with-tags)
@ -828,7 +861,7 @@ links, keywords, lists, tables, fixed-width"
(replace-match "")
(replace-match
(org-export-latex-protect-string
(format "\\texttt{%s}"
(format "\\textbf{%s}"
(save-match-data
(replace-regexp-in-string
"_" "\\\\_" (match-string 0)))))
@ -843,12 +876,10 @@ links, keywords, lists, tables, fixed-width"
(goto-char (point-min))
(when (plist-get org-export-latex-options-plist :emphasize)
(org-export-latex-fontify))
(org-export-latex-keywords-maybe
org-export-latex-remove-from-headlines)
(org-export-latex-keywords-maybe)
(org-export-latex-special-chars
(plist-get org-export-latex-options-plist :sub-superscript))
(org-export-latex-links)
; (org-trim (buffer-substring-no-properties (point-min) (point-max)))))
(org-trim (buffer-string))))
(defun org-export-latex-quotation-marks ()
@ -865,7 +896,7 @@ links, keywords, lists, tables, fixed-width"
(while (re-search-forward (car l) nil t)
(let ((rpl (concat (match-string 1) (cadr l))))
(org-export-latex-protect-string rpl)
(org-if-unprotected
(org-if-unprotected-1
(replace-match rpl t t))))) quote-rpl)))
(defun org-export-latex-special-chars (sub-superscript)
@ -877,15 +908,11 @@ See the `org-export-latex.el' code for a complete conversion table."
(goto-char (point-min))
(while (re-search-forward c nil t)
;; Put the point where to check for org-protected
; (unless (or (get-text-property (match-beginning 2) 'org-protected);
; (org-at-table-p))
(unless (get-text-property (match-beginning 2) 'org-protected)
(cond ((member (match-string 2) '("\\$" "$"))
(if (equal (match-string 2) "\\$")
(replace-match (concat (match-string 1) "$"
(match-string 3)) t t)
(replace-match (concat (match-string 1) "\\$"
(match-string 3)) t t)))
nil
(replace-match "\\$" t t)))
((member (match-string 2) '("&" "%" "#"))
(if (equal (match-string 1) "\\")
(replace-match (match-string 2) t t)
@ -903,12 +930,12 @@ See the `org-export-latex.el' code for a complete conversion table."
(org-export-latex-protect-string
(concat (match-string 1) "\\~{}")) t t))))
((member (match-string 2) '("{" "}"))
(unless (save-match-data (org-inside-LaTeX-fragment-p))
(unless (save-match-data (org-inside-latex-math-p))
(if (equal (match-string 1) "\\")
(replace-match (match-string 2) t t)
(replace-match (concat (match-string 1) "\\"
(match-string 2)) t t)))))
(unless (save-match-data (org-inside-LaTeX-fragment-p))
(unless (save-match-data (org-inside-latex-math-p))
(cond ((equal (match-string 2) "\\")
(replace-match (or (save-match-data
(org-export-latex-treat-backslash-char
@ -922,7 +949,8 @@ See the `org-export-latex.el' code for a complete conversion table."
(match-string 2)
(match-string 1)
(match-string 3))) "") t t)))))))
'("^\\([^\n$]*?\\|^\\)\\(\\\\?\\$\\)\\([^\n$]*\\)$"
'(;"^\\([^\n$]*?\\|^\\)\\(\\\\?\\$\\)\\([^\n$]*\\)$"
"\\(\\(\\\\?\\$\\)\\)"
"\\([a-za-z0-9]+\\|[ \t\n]\\|\\b\\|\\\\\\)\\(_\\|\\^\\)\\([a-za-z0-9]+\\|[ \t\n]\\|[:punct:]\\|{[a-za-z0-9]+}\\|([a-za-z0-9]+)\\)"
"\\(.\\|^\\)\\(\\\\\\)\\([ \t\n]\\|[a-zA-Z&#%{}\"]+\\)"
"\\(.\\|^\\)\\(&\\)"
@ -936,6 +964,9 @@ See the `org-export-latex.el' code for a complete conversion table."
;; (?\> . "\\textgreater{}")
)))
(defun org-inside-latex-math-p ()
(get-text-property (point) 'org-latex-math))
(defun org-export-latex-treat-sub-super-char
(subsup char string-before string-after)
"Convert the \"_\" and \"^\" characters to LaTeX.
@ -948,7 +979,7 @@ Convert CHAR depending on STRING-BEFORE and STRING-AFTER."
(string-match "\\S-+" string-after))
(cond ((eq 'org-link (get-text-property 0 'face char))
(concat string-before "\\" char string-after))
((save-match-data (org-inside-LaTeX-fragment-p))
((save-match-data (org-inside-latex-math-p))
(if subsup
(cond ((eq 1 (length string-after))
(concat string-before char string-after))
@ -996,32 +1027,29 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
(t (org-export-latex-protect-string
(concat string-before "\\textbackslash{}" string-after)))))
(defun org-export-latex-keywords (timestamps)
"Convert special keywords to LaTeX.
Regexps are those from `org-export-latex-special-string-regexps'.
If TIMESTAMPS, convert timestamps, otherwise delete them."
(let ((rg org-export-latex-special-string-regexps) r)
(while (setq r (pop rg))
(goto-char (point-min))
(while (re-search-forward (eval r) nil t)
(if (not timestamps)
(replace-match (format "\\\\texttt{%s}" (match-string 0)) t)
(replace-match ""))))))
(defun org-export-latex-keywords ()
"Convert special keywords to LaTeX."
(goto-char (point-min))
(let ((re (concat org-export-latex-special-keyword-regexp
".*" ; including the time stamp....
)))
(while (re-search-forward re nil t)
(replace-match (format "\\\\texttt{%s}" (match-string 0)) t))))
(defun org-export-latex-fixed-width (opt)
"When OPT is non-nil convert fixed-width sections to LaTeX."
(goto-char (point-min))
(while (re-search-forward "^[ \t]*:" nil t)
(while (re-search-forward "^[ \t]*:\\([ \t]\\|$\\)" nil t)
(if opt
(progn (goto-char (match-beginning 0))
(insert "\\begin{verbatim}\n")
(while (looking-at "^\\([ \t]*\\):\\(.*\\)$")
(while (looking-at "^\\([ \t]*\\):\\(\\([ \t]\\|$\\).*\\)$")
(replace-match (concat (match-string 1)
(match-string 2)) t t)
(forward-line))
(insert "\\end{verbatim}\n\n"))
(progn (goto-char (match-beginning 0))
(while (looking-at "^\\([ \t]*\\):\\(.*\\)$")
(while (looking-at "^\\([ \t]*\\):\\(\\([ \t]\\|$\\).*\\)$")
(replace-match (concat "%" (match-string 1)
(match-string 2)) t t)
(forward-line))))))
@ -1061,7 +1089,7 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(setq lines (split-string raw-table "\n" t))
(apply 'delete-region (list beg end))
(when org-export-table-remove-special-lines
(setq lines (org-table-clean-before-export lines)))
(setq lines (org-table-clean-before-export lines 'maybe-quoted)))
;; make a formatting string to reflect aligment
(setq olines lines)
(while (and (not line-fmt) (setq line (pop olines)))
@ -1142,8 +1170,16 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
;; The match goes one char after the *string*
(let ((emph (assoc (match-string 3)
org-export-latex-emphasis-alist))
(beg (match-beginning 0))
(end (match-end 0))
rpl)
(unless (get-text-property (1- (point)) 'org-protected)
(unless (or (get-text-property (1- (point)) 'org-protected)
(save-excursion
(goto-char (match-beginning 1))
(save-match-data
(and (org-at-table-p)
(string-match
"[|\n]" (buffer-substring beg end))))))
(setq rpl (concat (match-string 1)
(format (org-export-latex-protect-char-in-string
'("\\" "{" "}") (cadr emph))
@ -1159,7 +1195,7 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
;; or send some warnings.
"Convert links to LaTeX."
(goto-char (point-min))
(while (re-search-forward org-bracket-link-analytic-regexp nil t)
(while (re-search-forward org-bracket-link-analytic-regexp++ nil t)
(org-if-unprotected
(goto-char (match-beginning 0))
(let* ((re-radio org-export-latex-all-targets-re)
@ -1171,6 +1207,7 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(if (or (file-name-absolute-p raw-path)
(string-match "^\\.\\.?/" raw-path))
"file")))
(coderefp (equal type "coderef"))
(caption (org-find-text-property-in-string 'org-caption raw-path))
(attr (org-find-text-property-in-string 'org-attributes raw-path))
(label (org-find-text-property-in-string 'org-label raw-path))
@ -1178,6 +1215,8 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
imgp radiop
;; define the path of the link
(path (cond
((member type '("coderef"))
raw-path)
((member type '("http" "https" "ftp"))
(concat type ":" raw-path))
((and re-radio (string-match re-radio raw-path))
@ -1185,9 +1224,10 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
((equal type "mailto")
(concat type ":" raw-path))
((equal type "file")
(if (and (or (org-file-image-p (expand-file-name raw-path))
(string-match "\\.\\(pdf\\|jpg\\|ps\\|eps\\)$"
raw-path))
(if (and (org-file-image-p
(expand-file-name
raw-path)
org-export-latex-inline-image-extensions)
(equal desc full-raw-path))
(setq imgp t)
(progn (when (string-match "\\(.+\\)::.+" raw-path)
@ -1205,12 +1245,18 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(if floatp "\\begin{figure}[htb]\n")
(format "\\centerline{\\includegraphics[%s]{%s}}\n"
(or attr org-export-latex-image-default-option)
(expand-file-name raw-path))
(if (file-name-absolute-p raw-path)
(expand-file-name raw-path)
raw-path))
(if floatp
(format "\\caption{%s%s}\n"
(if label (concat "\\label{" label "}") "")
(or caption "")))
(if floatp "\\end{figure}\n"))))
(coderefp
(insert (format
(org-export-get-coderef-format path desc)
(cdr (assoc path org-export-code-refs)))))
(radiop (insert (format "\\hyperref[%s]{%s}"
(org-solidify-link-text raw-path) desc)))
((not type)
@ -1232,20 +1278,37 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
;; Preserve latex environments
(goto-char (point-min))
(while (re-search-forward "^[ \t]*\\begin{\\([a-zA-Z]+\\)}" nil t)
(while (re-search-forward "^[ \t]*\\\\begin{\\([a-zA-Z]+\\)}" nil t)
(let* ((start (progn (beginning-of-line) (point)))
(end (or (and (re-search-forward
(concat "^[ \t]*\\end{" (match-string 1) "}" nil t)
(point-at-eol)))
(concat "^[ \t]*\\\\end{" (match-string 1) "}") nil t)
(point-at-eol))
(point-max))))
(add-text-properties start end '(org-protected t))))
;; Preserve math snippets
(let* ((matchers (plist-get org-format-latex-options :matchers))
(re-list org-latex-regexps)
beg end re e m n block off)
;; Check the different regular expressions
(while (setq e (pop re-list))
(setq m (car e) re (nth 1 e) n (nth 2 e)
block (if (nth 3 e) "\n\n" ""))
(setq off (if (member m '("$" "$1")) 1 0))
(when (and (member m matchers) (not (equal m "begin")))
(goto-char (point-min))
(while (re-search-forward re nil t)
(setq beg (+ (match-beginning 0) off) end (- (match-end 0) 0))
(add-text-properties beg end '(org-protected t org-latex-math t))))))
;; Convert LaTeX to \LaTeX{}
(goto-char (point-min))
(let ((case-fold-search nil) rpl)
(while (re-search-forward "\\([^+_]\\)LaTeX" nil t)
(replace-match (org-export-latex-protect-string
(concat (match-string 1) "\\LaTeX{}")) t t)))
(org-if-unprotected
(replace-match (org-export-latex-protect-string
(concat (match-string 1) "\\LaTeX{}")) t t))))
;; Convert blockquotes
(goto-char (point-min))
@ -1266,7 +1329,8 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
;; Convert horizontal rules
(goto-char (point-min))
(while (re-search-forward "^----+.$" nil t)
(replace-match (org-export-latex-protect-string "\\hrule") t t))
(org-if-unprotected
(replace-match (org-export-latex-protect-string "\\hrule") t t)))
;; Protect LaTeX commands like \command[...]{...} or \command{...}
(goto-char (point-min))
@ -1285,65 +1349,73 @@ If TIMESTAMPS, convert timestamps, otherwise delete them."
(while (re-search-forward
(concat "<<<?" org-export-latex-all-targets-re
">>>?\\((INVISIBLE)\\)?") nil t)
(replace-match
(org-export-latex-protect-string
(format "\\label{%s}%s" (save-match-data (org-solidify-link-text
(match-string 1)))
(if (match-string 2) "" (match-string 1)))) t t))
(org-if-unprotected
(replace-match
(org-export-latex-protect-string
(format "\\label{%s}%s" (save-match-data (org-solidify-link-text
(match-string 1)))
(if (match-string 2) "" (match-string 1)))) t t)))
;; Delete @<...> constructs
;; Thanks to Daniel Clemente for this regexp
(goto-char (point-min))
(while (re-search-forward "@<\\(?:[^\"\n]\\|\".*\"\\)*?>" nil t)
(replace-match ""))
(org-if-unprotected
(replace-match "")))
;; When converting to LaTeX, replace footnotes
;; FIXME: don't protect footnotes from conversion
(when (plist-get org-export-latex-options-plist :footnotes)
(goto-char (point-min))
(while (re-search-forward "\\[[0-9]+\\]" nil t)
(when (save-match-data
(save-excursion (beginning-of-line)
(looking-at "[^:|#]")))
(let ((foot-beg (match-beginning 0))
(foot-end (match-end 0))
(foot-prefix (match-string 0))
footnote footnote-rpl)
(save-excursion
(when (search-forward foot-prefix nil t)
(replace-match "")
(let ((end (save-excursion
(if (re-search-forward "^$\\|^#.*$\\|\\[[0-9]+\\]" nil t)
(match-beginning 0) (point-max)))))
(setq footnote (concat (org-trim (buffer-substring (point) end))
" ")) ; prevent last } being part of a link
(delete-region (point) end))
(goto-char foot-beg)
(delete-region foot-beg foot-end)
(unless (null footnote)
(setq footnote-rpl (format "\\footnote{%s}" footnote))
(add-text-properties 0 10 '(org-protected t) footnote-rpl)
(add-text-properties (1- (length footnote-rpl))
(length footnote-rpl)
'(org-protected t) footnote-rpl)
(insert footnote-rpl)))))))
(while (re-search-forward "\\[\\([0-9]+\\)\\]" nil t)
(org-if-unprotected
(when (save-match-data
(save-excursion (beginning-of-line)
(looking-at "[^:|#]")))
(let ((foot-beg (match-beginning 0))
(foot-end (match-end 0))
(foot-prefix (match-string 0))
footnote footnote-rpl)
(save-excursion
(if (not (re-search-forward (concat "^" (regexp-quote foot-prefix))
nil t))
(replace-match "$^{\\1}$")
(replace-match "")
(let ((end (save-excursion
(if (re-search-forward "^$\\|^#.*$\\|\\[[0-9]+\\]" nil t)
(match-beginning 0) (point-max)))))
(setq footnote (concat (org-trim (buffer-substring (point) end))
" ")) ; prevent last } being part of a link
(delete-region (point) end))
(goto-char foot-beg)
(delete-region foot-beg foot-end)
(unless (null footnote)
(setq footnote-rpl (format "\\footnote{%s}" footnote))
(add-text-properties 0 10 '(org-protected t) footnote-rpl)
(add-text-properties (1- (length footnote-rpl))
(length footnote-rpl)
'(org-protected t) footnote-rpl)
(insert footnote-rpl)))
)))))
;; Replace footnote section tag for LaTeX
;; Remove footnote section tag for LaTeX
(goto-char (point-min))
(while (re-search-forward
(concat "^" footnote-section-tag-regexp) nil t)
(replace-match ""))))
(org-if-unprotected
(replace-match "")))))
;;; List handling:
(defun org-export-latex-lists ()
"Replace plain text lists in current buffer into LaTeX lists."
"Convert lists to LaTeX."
"Convert plain text lists in current buffer into LaTeX lists."
(goto-char (point-min))
(while (re-search-forward org-list-beginning-re nil t)
(org-if-unprotected
(beginning-of-line)
(insert (org-list-to-latex (org-list-parse-list t)) "\n"))))
(insert (org-list-to-latex (org-list-parse-list t)
org-export-latex-list-parameters))
"\n")))
(defconst org-latex-entities
'("\\!"

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -239,6 +239,13 @@ column view defines special faces for each outline level. See the file
"Face for links."
:group 'org-faces)
(defface org-footnote
'((((class color) (background light)) (:foreground "Purple" :underline t))
(((class color) (background dark)) (:foreground "Cyan" :underline t))
(t (:underline t)))
"Face for links."
:group 'org-faces)
(defface org-ellipsis
'((((class color) (background light)) (:foreground "DarkGoldenrod" :underline t))
(((class color) (background dark)) (:foreground "LightGoldenrod" :underline t))
@ -389,6 +396,22 @@ changes."
:group 'org-faces
:version "22.1")
(defface org-clock-overlay ;; copied from secondary-selection
(org-compatible-face nil
'((((class color) (min-colors 88) (background light))
:background "yellow1")
(((class color) (min-colors 88) (background dark))
:background "SkyBlue4")
(((class color) (min-colors 16) (background light))
:background "yellow")
(((class color) (min-colors 16) (background dark))
:background "SkyBlue4")
(((class color) (min-colors 8))
:background "cyan" :foreground "black")
(t :inverse-video t)))
"Basic face for displaying the secondary selection."
:group 'org-faces)
(defface org-agenda-structure ;; originally copied from font-lock-function-name-face
(org-compatible-face nil
'((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))

504
lisp/org/org-footnote.el Normal file
View File

@ -0,0 +1,504 @@
;;; org-footnote.el --- Footnote support in Org and elsewhere
;;
;; Copyright (C) 2009 Free Software Foundation, Inc.
;;
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;; This file contains the code dealing with footnotes in Org-mode.
;; The code can also be used in arbitrary text modes to provide
;; footnotes. Compared to Steven L Baur's footnote.el it provides
;; better support for resuming editing. It is less configurable than
;; Steve's code, though.
;;; Code:
(eval-when-compile
(require 'cl))
(require 'org-macs)
(require 'org-compat)
(declare-function org-in-regexp "org" (re &optional nlines visually))
(declare-function org-mark-ring-push "org" (&optional pos buffer))
(declare-function outline-next-heading "outline")
(declare-function org-trim "org" (s))
(declare-function org-show-context "org" (&optional key))
(declare-function org-back-to-heading "org" (&optional invisible-ok))
(declare-function org-end-of-subtree "org" (&optional invisible-ok to-heading))
(defconst org-footnote-re
(concat "[^][\n]" ; to make sure it is not at the beginning of a line
"\\["
"\\(?:"
"\\([0-9]+\\)"
"\\|"
(org-re "\\(fn:\\([-_[:word:]]+?\\)?\\)\\(?::\\([^\]]*?\\)\\)?")
"\\)"
"\\]")
"Regular expression for matching footnotes.")
(defconst org-footnote-definition-re
(org-re "^\\(\\[\\([0-9]+\\|fn:[-_[:word:]]+\\)\\]\\)")
"Regular expression matching the definition of a footnote.")
(defcustom org-footnote-section "Footnotes"
"Outline heading containing footnote definitions before export.
This can be nil, to place footnotes locally at the end of the current
outline node. If can also be the name of a special outline heading
under which footnotes should be put.
This variable defines the place where Org puts the definition
automatically, i.e. when creating the footnote, and when sorting the notes.
However, by hand you may place definitions *anywhere*.
If this is a string, during export, all subtrees starting with this
heading will be removed after extracting footnote definitions."
:group 'org-footnotes
:type '(choice
(string :tag "Collect fotnotes under heading")
(const :tag "Define footnotes locally" nil)))
(defcustom org-footnote-tag-for-non-org-mode-files "Footnotes:"
"Tag marking the beginning of footnote section.
The Org-mode footnote engine can be used in arbitrary text files as well
as in Org-mode. Outside Org-mode, new footnotes are always placed at
the end of the file. When you normalize the notes, any line containing
only this tag will be removed, a new one will be inserted at the end
of the file, followed by the collected and normalized footnotes."
:group 'org-footnotes
:type 'string)
(defcustom org-footnote-define-inline nil
"Non-nil means, define footnotes inline, at reference location.
When nil, footnotes will be defined in a special section near
the end of the document. When t, the [fn:label:definition] notation
will be used to define the footnote at the reference position."
:group 'org-footnote
:type 'boolean)
(defcustom org-footnote-auto-label t
"Non-nil means, define automatically new labels for footnotes.
Possible values are:
nil prompt the user for each label
t create unique labels of the form [fn:1], [fn:2], ...
confirm like t, but let the user edit the created value. In particular,
the label can be removed from the minibuffer, to create
an anonymous footnote.
plain Automatically create plain number labels like [1]"
:group 'org-footnote
:type '(choice
(const :tag "Frompt for label" nil)
(const :tag "Create automatic [fn:N]" t)
(const :tag "Offer automatic [fn:N] for editing" confirm)
(const :tag "Create automatic [N]" plain)))
(defcustom org-footnote-fill-after-inline-note-extraction nil
"Non-nil means, fill paragraphs after extracting footnotes.
When extracting inline footnotes, the lengths of lines can change a lot.
When this option is set, paragraphs from which an inline footnote has been
extracted will be filled again."
:group 'org-footnote
:type 'boolean)
(defun org-footnote-at-reference-p ()
"Is the cursor at a footnote reference?
If yes, return the beginning position, the label, and the definition, if local."
(when (org-in-regexp org-footnote-re 15)
(list (match-beginning 0)
(or (match-string 1)
(if (equal (match-string 2) "fn:") nil (match-string 2)))
(match-string 4))))
(defun org-footnote-at-definition-p ()
"Is the cursor at a footnote definition.
This matches only pure definitions like [1] or [fn:name] at the beginning
of a line. It does not a references like [fn:name:definition], where the
footnote text is included and defined locally.
The return value will be nil if not at a foornote definition, and a list
with start and label of the footnote if there is a definition at point."
(save-excursion
(end-of-line 1)
(let ((lim (save-excursion (re-search-backward "^\\*+ \\|^[ \t]*$" nil t))))
(when (re-search-backward org-footnote-definition-re lim t)
(list (match-beginning 0) (match-string 2))))))
(defun org-footnote-goto-definition (label)
"Find the definition of the footnote with label LABEL."
(interactive "sLabel: ")
(org-mark-ring-push)
(setq label (org-footnote-normalize-label label))
(let ((re (format "^\\[%s\\]\\|.\\[%s:" label label))
pos)
(save-excursion
(setq pos (or (re-search-forward re nil t)
(and (goto-char (point-min))
(re-search-forward re nil t))
(and (progn (widen) t)
(goto-char (point-min))
(re-search-forward re nil t)))))
(if (not pos)
(error "Cannot find definition of footnote %s" label)
(goto-char pos)
(org-show-context 'link-search)
(message "Edit definition and go back with `C-c &' or, if unique, with `C-c C-c'."))))
(defun org-footnote-goto-next-reference (label)
"Find the definition of the footnote with label LABEL."
(interactive "sLabel: ")
(org-mark-ring-push)
(setq label (org-footnote-normalize-label label))
(let ((re (format ".\\[%s[]:]" label))
(p0 (point)) pos)
(save-excursion
(setq pos (or (re-search-forward re nil t)
(and (goto-char (point-min))
(re-search-forward re nil t))
(and (progn (widen) t)
(goto-char p0)
(re-search-forward re nil t))
(and (goto-char (point-min))
(re-search-forward re nil t)))))
(if pos
(progn
(goto-char pos)
(org-show-context 'link-search))
(error "Cannot find reference of footnote %s" label))))
(defun org-footnote-normalize-label (label)
(if (numberp label) (setq label (number-to-string label)))
(if (not (string-match "^[0-9]+$\\|^$\\|^fn:" label))
(setq label (concat "fn:" label)))
label)
(defun org-footnote-all-labels ()
"Return list with all defined foot labels used in the buffer."
(let (rtn l)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward org-footnote-definition-re nil t)
(setq l (org-match-string-no-properties 2))
(and l (add-to-list 'rtn l)))
(goto-char (point-min))
(while (re-search-forward org-footnote-re nil t)
(setq l (or (org-match-string-no-properties 1)
(org-match-string-no-properties 2)))
(and l (not (equal l "fn:")) (add-to-list 'rtn l)))))
rtn))
(defun org-footnote-unique-label (&optional current)
"Return a new unique footnote label.
The returns the firsts fn:N labels that is currently not used."
(unless current (setq current (org-footnote-all-labels)))
(let ((fmt (if (eq org-footnote-auto-label 'plain) "%d" "fn:%d"))
(cnt 1))
(while (member (format fmt cnt) current)
(incf cnt))
(format fmt cnt)))
(defvar org-footnote-label-history nil
"History of footnote labels entered in current buffer.")
(make-variable-buffer-local 'org-footnote-label-history)
(defun org-footnote-new ()
"Insert a new footnote.
This command prompts for a label. If this is a label referencing an
existing label, only insert the label. If the footnote label is empty
or new, let the user edit the definition of the footnote."
(interactive)
(let* ((labels (org-footnote-all-labels))
(propose (org-footnote-unique-label labels))
(label
(if (member org-footnote-auto-label '(t plain))
propose
(completing-read
"Label (leave empty for anonymous): "
(mapcar 'list labels) nil nil
(if (eq org-footnote-auto-label 'confirm) propose nil)
'org-footnote-label-history))))
(setq label (org-footnote-normalize-label label))
(cond
((equal label "")
(insert "[fn:: ]")
(backward-char 1))
((member label labels)
(insert "[" label "]")
(message "New reference to existing note"))
(org-footnote-define-inline
(insert "[" label ": ]")
(backward-char 1))
(t
(insert "[" label "]")
(org-footnote-create-definition label)))))
(defun org-footnote-create-definition (label)
"Start the definition of a footnote with label LABEL."
(interactive "sLabel: ")
(setq label (org-footnote-normalize-label label))
(let (re p)
(cond
((org-mode-p)
(if (not org-footnote-section)
;; No section, put footnote into the current outline node
nil
;; Try to find or make the special node
(setq re (concat "^\\*+[ \t]+" org-footnote-section "[ \t]*$"))
(unless (or (re-search-forward re nil t)
(and (progn (widen) t)
(re-search-forward re nil t)))
(goto-char (point-max))
(insert "\n\n* " org-footnote-section "\n")))
;; Now go to the end of this entry and insert there.
(org-footnote-goto-local-insertion-point))
(t
(setq re (concat "^" org-footnote-tag-for-non-org-mode-files "[ \t]*$"))
(unless (re-search-forward re nil t)
(goto-char (point-max))
(skip-chars-backward " \t\r\n")
(insert "\n\n")
(delete-region (point) (point-max))
(insert org-footnote-tag-for-non-org-mode-files "\n"))
(goto-char (point-max))
(skip-chars-backward " \t\r\n")))
(insert "\n\n")
(insert "[" label "] ")
(message "Edit definition and go back with `C-c &' or, if unique, with `C-c C-c'.")))
;;;###autoload
(defun org-footnote-action (&optional special)
"Do the right thing for footnotes.
When at a foornote reference, jump to the definition. When at a definition,
jump to the refernces. When neither at definition or reference,
create a new footnote, interactively.
With prefix arg SPECIAL, offer additional commands in a menu."
(interactive "P")
(let (tmp c)
(cond
(special
(message "Footnotes: [s]ort | convert to [n]umeric | [d]elete")
(setq c (read-char-exclusive))
(cond
((equal c ?s)
(org-footnote-normalize 'sort))
((equal c ?n)
(org-footnote-normalize))
((equal c ?d)
(org-footnote-delete))
(t (error "No such footnote command %c" c))))
((setq tmp (org-footnote-at-reference-p))
(if (nth 1 tmp)
(org-footnote-goto-definition (nth 1 tmp))
(goto-char (match-beginning 4))))
((setq tmp (org-footnote-at-definition-p))
(org-footnote-goto-next-reference (nth 1 tmp)))
(t (org-footnote-new)))))
;;;###autoload
(defun org-footnote-normalize (&optional sort-only for-preprocessor)
"Collect the footnotes in various formats and normalize them.
This find the different sorts of footnotes allowed in Org, and
normalizes them to the usual [N] format that is understood by the
Org-mode exporters.
When SORT-ONLY is set, only sort the footnote definitions into the
referenced sequence."
;; This is based on Paul's function, but rewritten.
(let ((count 0) ref def idef ref-table liste beg beg1 marker a before
ins-point)
(save-excursion
;; Now find footnote references, and extract the definitions
(goto-char (point-min))
(while (re-search-forward org-footnote-re nil t)
(org-if-unprotected
(setq def (match-string 4)
idef def
ref (or (match-string 1) (match-string 2))
before (char-to-string (char-after (match-beginning 0))))
(if (equal ref "fn:") (setq ref nil))
(if (and ref (setq a (assoc ref ref-table)))
(progn
(setq marker (nth 1 a))
(unless (nth 2 a) (setf (caddr a) def)))
(setq marker (number-to-string (incf count))))
(save-match-data
(if def
(setq def (org-trim def))
(save-excursion
(goto-char (point-min))
(if (not (re-search-forward (concat "^\\[" (regexp-quote ref)
"\\]") nil t))
(setq def nil)
(setq beg (match-beginning 0))
(setq beg1 (match-end 0))
(re-search-forward
(org-re "^[ \t]*$\\|^\\*+ \\|^\\[\\([0-9]+\\|fn:[-_[:word:]]+\\)\\]")
nil 'move)
(setq def (buffer-substring beg1 (or (match-beginning 0)
(point-max))))
(goto-char beg)
(skip-chars-backward " \t\n\t")
(delete-region (1+ (point)) (match-beginning 0))))))
(unless sort-only
(replace-match (concat before "[" marker "]"))
(and idef
org-footnote-fill-after-inline-note-extraction
(fill-paragraph)))
(if (not a) (push (list ref marker def) ref-table))))
;; First find and remove the footnote section
(goto-char (point-min))
(cond
((org-mode-p)
(if (and org-footnote-section
(re-search-forward
(concat "^\\*[ \t]+" (regexp-quote org-footnote-section)
"[ \t]*$")
nil t))
(if (or for-preprocessor (not org-footnote-section))
(replace-match "")
(org-back-to-heading t)
(forward-line 1)
(setq ins-point (point))
(delete-region (point) (org-end-of-subtree t)))
(goto-char (point-max))
(unless for-preprocessor
(when org-footnote-section
(or (bolp) (insert "\n"))
(insert "* " org-footnote-section "\n")
(setq ins-point (point))))))
(t
(if (re-search-forward
(concat "^"
(regexp-quote org-footnote-tag-for-non-org-mode-files)
"[ \t]*$")
nil t)
(replace-match ""))
(goto-char (point-max))
(skip-chars-backward " \t\n\r")
(delete-region (point) (point-max))
(insert "\n\n" org-footnote-tag-for-non-org-mode-files "\n")
(setq ins-point (point))))
;; Insert the footnotes again
(goto-char (or ins-point (point-max)))
(setq ref-table (reverse ref-table))
(when sort-only
;; remove anonymous fotnotes from the list
(setq ref-table
(delq nil (mapcar
(lambda (x) (and (car x)
(not (equal (car x) "fn:"))
x))
ref-table))))
;; Make sure each footnote has a description, or an error message.
(setq ref-table
(mapcar
(lambda (x)
(if (not (nth 2 x))
(setcar (cddr x)
(format "FOOTNOTE DEFINITION NOT FOUND: %s" (car x)))
(setcar (cddr x) (org-trim (nth 2 x))))
x)
ref-table))
(if (or (not (org-mode-p)) ; not an Org file
org-footnote-section ; we do not use a footnote section
(not sort-only) ; this is normalization
for-preprocessor) ; the is the preprocessor
;; Insert the footnotes together in one place
(progn
(setq def
(mapconcat
(lambda (x)
(format "[%s] %s" (nth (if sort-only 0 1) x)
(org-trim (nth 2 x))))
ref-table "\n\n"))
(if ref-table (insert "\n" def "\n\n")))
;; Insert each footnote near the first reference
;; Happens only in Org files with no special footnote section,
;; and only when doing sorting
(mapc 'org-insert-footnote-reference-near-definition
ref-table)))))
(defun org-insert-footnote-reference-near-definition (entry)
"Find first reference of footnote ENTRY and insert the definition there.
ENTRY is (fn-label num-mark definition)."
(when (car entry)
(let ((pos (point)))
(goto-char (point-min))
(when (re-search-forward (format ".\\[%s[]:]" (regexp-quote (car entry)))
nil t)
(org-footnote-goto-local-insertion-point)
(insert (format "\n\n[%s] %s" (car entry) (nth 2 entry)))))))
(defun org-footnote-goto-local-insertion-point ()
"Find insertion point for footnote, just before next outline heading."
(outline-next-heading)
(or (bolp) (newline))
(beginning-of-line 0)
(while (and (not (bobp)) (= (char-after) ?#))
(beginning-of-line 0))
(if (looking-at "#\\+TBLFM:") (beginning-of-line 2))
(end-of-line 1)
(skip-chars-backward "\n\r\t "))
(defun org-footnote-delete (&optional label)
"Delete the footnote at point.
This will remove the definition (even multiple definitions if they exist)
and all references of a footnote label."
(catch 'done
(let (x label l beg def-re (nref 0) (ndef 0))
(unless label
(when (setq x (org-footnote-at-reference-p))
(setq label (nth 1 x))
(when (or (not label) (equal "fn:" label))
(delete-region (1+ (match-beginning 0)) (match-end 0))
(message "Anonymous footnote removed")
(throw 'done t)))
(when (and (not label) (setq x (org-footnote-at-definition-p)))
(setq label (nth 1 x)))
(unless label (error "Don't know which footnote to remove")))
(save-excursion
(save-restriction
(goto-char (point-min))
(while (re-search-forward org-footnote-re nil t)
(setq l (or (match-string 1) (match-string 2)))
(when (equal l label)
(delete-region (1+ (match-beginning 0)) (match-end 0))
(incf nref)))
(goto-char (point-min))
(setq def-re (concat "^\\[" (regexp-quote label) "\\]"))
(while (re-search-forward def-re nil t)
(setq beg (match-beginning 0))
(if (re-search-forward "^\\[\\|^[ \t]*$\\|^\\*+ " nil t)
(goto-char (match-beginning 0))
(goto-char (point-max)))
(delete-region beg (point))
(incf ndef))))
(message "%d definition(s) of and %d reference(s) of footnote %s removed"
ndef nref label))))
(provide 'org-footnote)
;; arch-tag: 1b5954df-fb5d-4da5-8709-78d944dbfc37
;;; org-footnote.el ends here

View File

@ -6,7 +6,7 @@
;; Tassilo Horn <tassilo at member dot fsf dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -111,12 +111,12 @@ If `org-store-link' was called with a prefix arg the meaning of
(gnus-group-name))
(t "???")))
desc link)
(unless group (error "Not on a group"))
(org-store-link-props :type "gnus" :group group)
(setq desc (org-gnus-group-link group)
link desc)
(org-add-link-props :link link :description desc)
link))
(when group
(org-store-link-props :type "gnus" :group group)
(setq desc (org-gnus-group-link group)
link desc)
(org-add-link-props :link link :description desc)
link)))
((memq major-mode '(gnus-summary-mode gnus-article-mode))
(and (eq major-mode 'gnus-summary-mode) (gnus-summary-show-article))

View File

@ -1,10 +1,11 @@
;;; org-id.el --- Global identifiers for Org-mode entries
;;
;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
;;
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -262,6 +263,9 @@ Move the cursor to that entry in that buffer."
The return value is a cons cell (file-name . position), or nil
if there is no entry with that ID.
With optional argument MARKERP, return the position as a new marker."
(cond
((symbolp id) (setq id (symbol-name id)))
((numberp id) (setq id (number-to-string id))))
(let ((file (org-id-find-id-file id))
org-agenda-new-buffers where)
(when file
@ -521,6 +525,7 @@ When CHECK is given, prepare detailed information about duplicate IDs."
;; Finding entries with specified id
;;;###autoload
(defun org-id-find-id-file (id)
"Query the id database for the file in which this ID is located."
(unless org-id-locations (org-id-locations-load))

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -1,10 +1,10 @@
;;; org-irc.el --- Store links to IRC sessions
;;
;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
;;
;; Author: Philip Jackson <emacs@shellarchive.co.uk>
;; Keywords: erc, irc, link, org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -140,7 +140,7 @@ Option settings will replace the %MANAGER-OPTIONS cookie."
default (cdr (assoc opt org-infojs-options)))
(and (symbolp default) (not (memq default '(t nil)))
(setq default (plist-get exp-plist default)))
(if (string-match (format " %s:\\(\\S-+\\)" opt) v)
(if (and v (string-match (format " %s:\\(\\S-+\\)" opt) v))
(setq val (match-string 1 v))
(setq val default))
(cond

View File

@ -6,7 +6,7 @@
;; Bastien Guerry <bzg AT altern DOT org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -46,6 +46,7 @@
(declare-function org-trim "org" (s))
(declare-function org-get-indentation "org" (&optional line))
(declare-function org-timer-item "org-timer" (&optional arg))
(declare-function org-combine-plists "org" (&rest plists))
(defgroup org-plain-lists nil
"Options concerning plain lists in Org-mode."
@ -188,13 +189,20 @@ Return t when things worked, nil when we are not in an item."
(save-match-data
(and (looking-at "[ \t]*\\(.*?\\) ::")
(match-string 1)))))
(empty-line-p (save-excursion
(goto-char (match-beginning 0))
(and (not (bobp))
(or (beginning-of-line 0) t)
(save-match-data
(looking-at "[ \t]*$")))))
(timerp (and descp
(save-match-data
(string-match "^[-+*][ \t]+[0-9]+:[0-9]+:[0-9]+$"
descp))))
(eow (save-excursion (beginning-of-line 1) (looking-at "[ \t]*")
(match-end 0)))
(blank (cdr (assq 'plain-list-item org-blank-before-new-entry)))
(blank-a (cdr (assq 'plain-list-item org-blank-before-new-entry)))
(blank (if (eq blank-a 'auto) empty-line-p blank-a))
pos)
(if descp (setq checkbox nil))
(if timerp
@ -894,9 +902,12 @@ sublevels as a list of strings."
(goto-char end))))
(nextindent (match-string 1))
(item (org-trim item))
(item (if (string-match "^\\[.+\\]" item)
(replace-match "\\\\texttt{\\&}"
t nil item) item)))
(item (if (string-match "^\\[\\([xX ]\\)\\]" item)
(replace-match (if (equal (match-string 1 item) " ")
"[CBOFF]"
"[CBON]")
t nil item)
item)))
(push item output)
(when (> (length nextindent)
(length indent1))
@ -1010,7 +1021,10 @@ Valid parameters PARAMS are
:istart String to start a list item
:iend String to end a list item
:isep String to separate items
:lsep String to separate sublists"
:lsep String to separate sublists
:cboff String to insert for an unchecked checkbox
:cbon String to insert for a checked checkbox"
(interactive)
(let* ((p params) sublist
(splicep (plist-get p :splice))
@ -1027,7 +1041,9 @@ Valid parameters PARAMS are
(istart (plist-get p :istart))
(iend (plist-get p :iend))
(isep (plist-get p :isep))
(lsep (plist-get p :lsep)))
(lsep (plist-get p :lsep))
(cbon (plist-get p :cbon))
(cboff (plist-get p :cboff)))
(let ((wrapper
(cond ((eq (car list) 'ordered)
(concat ostart "\n%s" oend "\n"))
@ -1043,6 +1059,10 @@ Valid parameters PARAMS are
(setq term (org-trim (format (concat dtstart "%s" dtend)
(match-string 1 sublist))))
(setq sublist (substring sublist (1+ (length term)))))
(if (string-match "\\[CBON\\]" sublist)
(setq sublist (replace-match cbon t t sublist)))
(if (string-match "\\[CBOFF\\]" sublist)
(setq sublist (replace-match cboff t t sublist)))
(setq rtn (concat rtn istart term ddstart
sublist ddend iend isep)))
(t (setq rtn (concat rtn ;; previous list
@ -1052,38 +1072,56 @@ Valid parameters PARAMS are
)))))
(format wrapper rtn))))
(defun org-list-to-latex (list)
"Convert LIST into a LaTeX list."
(defun org-list-to-latex (list &optional params)
"Convert LIST into a LaTeX list.
LIST is as returnd by `org-list-parse-list'. PARAMS is a property list
with overruling parameters for `org-list-to-generic'."
(org-list-to-generic
list '(:splicep nil :ostart "\\begin{enumerate}" :oend "\\end{enumerate}"
:ustart "\\begin{itemize}" :uend "\\end{itemize}"
:dstart "\\begin{description}" :dend "\\end{description}"
:dtstart "[" :dtend "]"
:ddstart "" :ddend ""
:istart "\\item " :iend ""
:isep "\n" :lsep "\n")))
list
(org-combine-plists
'(:splicep nil :ostart "\\begin{enumerate}" :oend "\\end{enumerate}"
:ustart "\\begin{itemize}" :uend "\\end{itemize}"
:dstart "\\begin{description}" :dend "\\end{description}"
:dtstart "[" :dtend "]"
:ddstart "" :ddend ""
:istart "\\item " :iend ""
:isep "\n" :lsep "\n"
:cbon "\\texttt{[X]}" :cboff "\\texttt{[ ]}")
params)))
(defun org-list-to-html (list)
"Convert LIST into a HTML list."
(defun org-list-to-html (list &optional params)
"Convert LIST into a HTML list.
LIST is as returnd by `org-list-parse-list'. PARAMS is a property list
with overruling parameters for `org-list-to-generic'."
(org-list-to-generic
list '(:splicep nil :ostart "<ol>" :oend "</ol>"
:ustart "<ul>" :uend "</ul>"
:dstart "<dl>" :dend "</dl>"
:dtstart "<dt>" :dtend "</dt>"
:ddstart "<dd>" :ddend "</dd>"
:istart "<li>" :iend "</li>"
:isep "\n" :lsep "\n")))
list
(org-combine-plists
'(:splicep nil :ostart "<ol>" :oend "</ol>"
:ustart "<ul>" :uend "</ul>"
:dstart "<dl>" :dend "</dl>"
:dtstart "<dt>" :dtend "</dt>"
:ddstart "<dd>" :ddend "</dd>"
:istart "<li>" :iend "</li>"
:isep "\n" :lsep "\n"
:cbon "<code>[X]</code>" :cboff "<code>[ ]</code>")
params)))
(defun org-list-to-texinfo (list)
"Convert LIST into a Texinfo list."
(defun org-list-to-texinfo (list &optional params)
"Convert LIST into a Texinfo list.
LIST is as returnd by `org-list-parse-list'. PARAMS is a property list
with overruling parameters for `org-list-to-generic'."
(org-list-to-generic
list '(:splicep nil :ostart "@itemize @minus" :oend "@end itemize"
:ustart "@enumerate" :uend "@end enumerate"
:dstart "@table" :dend "@end table"
:dtstart "@item " :dtend "\n"
:ddstart "" :ddend ""
:istart "@item\n" :iend ""
:isep "\n" :lsep "\n")))
list
(org-combine-plists
'(:splicep nil :ostart "@itemize @minus" :oend "@end itemize"
:ustart "@enumerate" :uend "@end enumerate"
:dstart "@table" :dend "@end table"
:dtstart "@item " :dtend "\n"
:ddstart "" :ddend ""
:istart "@item\n" :iend ""
:isep "\n" :lsep "\n"
:cbon "@code{[X]}" :cboff "@code{[ ]}")
params)))
(provide 'org-list)

View File

@ -3,7 +3,7 @@
;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
;; Author: John Wiegley <johnw@gnu.org>
;; Version: 6.16
;; Version: 6.19a
;; Keywords: outlines, hypermedia, calendar, wp
;; This file is part of GNU Emacs.

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -48,6 +48,8 @@
(save-match-data
(while (string-match "\\[:alnum:\\]" ss)
(setq ss (replace-match "a-zA-Z0-9" t t ss)))
(while (string-match "\\[:word:\\]" ss)
(setq ss (replace-match "a-zA-Z0-9" t t ss)))
(while (string-match "\\[:alpha:\\]" ss)
(setq ss (replace-match "a-zA-Z" t t ss)))
ss))
@ -102,6 +104,11 @@ We use a macro so that the test can happen at compilation time."
`(unless (get-text-property (point) 'org-protected)
,@body))
(defmacro org-if-unprotected-1 (&rest body)
"Execute BODY if there is no `org-protected' text property at point-1."
`(unless (get-text-property (1- (point)) 'org-protected)
,@body))
(defmacro org-with-remote-undo (_buffer &rest _body)
"Execute BODY while recording undo information in two buffers."
`(let ((_cline (org-current-line))
@ -188,6 +195,9 @@ we turn off invisibility temporarily. Use this in a `let' form."
;; works also in narrowed buffer, because we start at 1, not point-min
(+ (if (bolp) 1 0) (count-lines 1 (point)))))
(defsubst org-current-line-string (&optional to-here)
(buffer-substring (point-at-bol) (if to-here (point) (point-at-eol))))
(defsubst org-pos-in-match-range (pos n)
(and (match-beginning n)
(<= (match-beginning n) pos)

View File

@ -5,7 +5,7 @@
;; Author: Tokuya Kameshima <kames at fa2 dot so-net dot ne dot jp>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;; This file is part of GNU Emacs.

View File

@ -5,7 +5,7 @@
;; Author: Thomas Baumann <thomas dot baumann at ch dot tum dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -4,7 +4,7 @@
;;
;; Author: Piotr Zielinski <piotr dot zielinski at gmail dot com>
;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -219,12 +219,11 @@ this function is called. Otherwise, the current major mode menu is used."
(funcall org-mouse-context-menu-function event)
(if (fboundp 'mouse-menu-major-mode-map)
(popup-menu (mouse-menu-major-mode-map) event prefix)
(with-no-warnings ; don't warn about fallback, obsolete since 23.1
(mouse-major-mode-menu event prefix)))))
(org-no-warnings ; don't warn about fallback, obsolete since 23.1
(mouse-major-mode-menu event prefix)))))
(setq this-command 'mouse-save-then-kill)
(mouse-save-then-kill event)))
(defun org-mouse-line-position ()
"Returns `:beginning' or `:middle' or `:end', depending on the point position.

View File

@ -5,7 +5,7 @@
;; Author: Eric Schulte <schulte dot eric at gmail dot com>
;; Keywords: tables, plotting
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -316,12 +316,14 @@ line directly before or after the table."
(mapcar (lambda (row) (nth ind row)) table)))) 0)
(plist-put params :timeind t)
;; check for text ind column
(if (> (length
(delq 0 (mapcar
(lambda (el)
(if (string-match org-table-number-regexp el)
0 1))
(mapcar (lambda (row) (nth ind row)) table)))) 0)
(if (or (string= (plist-get params :with) "hist")
(> (length
(delq 0 (mapcar
(lambda (el)
(if (string-match org-table-number-regexp el)
0 1))
(mapcar (lambda (row) (nth ind row)) table)))) 0))
(plist-put params :textind t)))))
;; write script
(with-temp-buffer

View File

@ -4,7 +4,7 @@
;; Author: David O'Toole <dto@gnu.org>
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
;; Keywords: hypermedia, outlines, wp
;; Version: 6.16
;; Version: 6.19a
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -1222,6 +1222,9 @@ With prefix ABOVE, insert above the current line."
(interactive "P")
(if (not (org-at-table-p))
(error "Not at a table"))
(when (eobp) (insert "\n") (backward-char 1))
(if (not (string-match "|[ \t]*$" (org-current-line-string)))
(org-table-align))
(let ((line (org-table-clean-line
(buffer-substring (point-at-bol) (point-at-eol))))
(col (current-column)))
@ -1729,7 +1732,7 @@ When NAMED is non-nil, look for a named equation."
ref)
(int-to-string (org-table-current-column))))
(dummy (and (or nameass refass) (not named)
(not (y-or-n-p "Replace field formula with column formula? " ))
(not (y-or-n-p "Replace existing field formula with column formula? " ))
(error "Abort")))
(name (or name ref))
(org-table-may-need-update nil)
@ -1906,6 +1909,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
(if (match-end 1) (push l hlines) (push l dlines))
(beginning-of-line 2)
(setq l (1+ l)))
(push 'hline types) ;; add an imaginary extra hline to the end
(setq org-table-current-line-types (apply 'vector (nreverse types))
last-dline (car dlines)
org-table-dlines (apply 'vector (cons nil (nreverse dlines)))
@ -1914,7 +1918,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
(let* ((l last-dline)
(fields (org-split-string
(buffer-substring (point-at-bol) (point-at-eol))
"|"))
"[ \t]*|[ \t]*"))
(nfields (length fields))
al al2)
(loop for i from 1 to nfields do
@ -2149,6 +2153,16 @@ not overwrite the stored one."
(if (and lispp literal) (setq lispp 'literal))
;; Check for old vertical references
(setq form (org-table-rewrite-old-row-references form))
;; Insert remote references
(while (string-match "\\<remote([ \t]*\\([-_a-zA-Z0-9]+\\)[ \t]*,[ \t]*\\([^\n)]+\\))" form)
(setq form
(replace-match
(save-match-data
(org-table-make-reference
(org-table-get-remote-range
(match-string 1 form) (match-string 2 form))
keep-empty numbers lispp))
t t form)))
;; Insert complex ranges
(while (and (string-match org-table-range-regexp form)
(> (length (match-string 0 form)) 1))
@ -2525,12 +2539,14 @@ known that the table will be realigned a little later anyway."
(setq f (replace-match (concat "$" (cdr a)) t t f)))
;; Parameters and constants
(setq start 0)
(while (setq start (string-match "\\$\\([a-zA-Z][_a-zA-Z0-9]*\\)" f start))
(setq start (1+ start))
(if (setq a (save-match-data
(org-table-get-constant (match-string 1 f))))
(setq f (replace-match
(concat (if pp "(") a (if pp ")")) t t f))))
(while (setq start (string-match "\\$\\([a-zA-Z][_a-zA-Z0-9]*\\)\\|\\(\\<remote([^)]*)\\)" f start))
(if (match-end 2)
(setq start (match-end 2))
(setq start (1+ start))
(if (setq a (save-match-data
(org-table-get-constant (match-string 1 f))))
(setq f (replace-match
(concat (if pp "(") a (if pp ")")) t t f)))))
(if org-table-formula-debug
(put-text-property 0 (length f) :orig-formula f1 f))
f))
@ -2673,7 +2689,7 @@ Parameters get priority."
Works for single references, but also for entire formulas and even the
full TBLFM line."
(let ((start 0))
(while (string-match "\\<\\([a-zA-Z]+\\)\\([0-9]+\\>\\|&\\)\\|\\(;[^\r\n:]+\\)" s start)
(while (string-match "\\<\\([a-zA-Z]+\\)\\([0-9]+\\>\\|&\\)\\|\\(;[^\r\n:]+\\|\\<remote([^)]*)\\)" s start)
(cond
((match-end 3)
;; format match, just advance
@ -4065,6 +4081,60 @@ provide ORGTBL directives for the generated table."
(params (org-combine-plists params2 params)))
(orgtbl-to-generic table params)))
(defun org-table-get-remote-range (name-or-id form)
"Get a field value or a list of values in a range from table at ID.
NAME-OR-ID may be the name of a table in the current file as set by
a \"#+TBLNAME:\" directive. The first table following this line
will then be used. Alternatively, it may be an ID referring to
any entry, also in a different file. In this case, the first table
in that netry will be referenced.
FORM is a field or range descriptor like \"@2$3\" or or \"B3\" or
\"@I$2..@II$2\". All the references must be absolute, not relative.
The return value is either a single string for a single field, or a
list of the fields in the rectangle ."
(save-match-data
(let ((id-loc nil)
org-table-column-names org-table-column-name-regexp
org-table-local-parameters org-table-named-field-locations
org-table-current-line-types org-table-current-begin-line
org-table-current-begin-pos org-table-dlines
org-table-hlines org-table-last-alignment
org-table-last-column-widths org-table-last-alignment
org-table-last-column-widths tbeg
buffer loc)
(save-excursion
(save-restriction
(widen)
(save-excursion
(goto-char (point-min))
(if (re-search-forward
(concat "^#\\+TBLNAME:[ \t]*" (regexp-quote name-or-id) "[ \t]*$")
nil t)
(setq buffer (current-buffer) loc (match-beginning 0))
(setq id-loc (org-id-find name-or-id 'marker)
buffer (marker-buffer id-loc)
loc (marker-position id-loc))
(move-marker id-loc nil)))
(switch-to-buffer buffer)
(save-excursion
(save-restriction
(widen)
(goto-char loc)
(forward-char 1)
(unless (and (re-search-forward "^\\(\\*+ \\)\\|[ \t]*|" nil t)
(not (match-beginning 1)))
(error "Cannot find a table at NAME or ID %s" name-or-id))
(setq tbeg (point-at-bol))
(org-table-get-specials)
(setq form (org-table-formula-substitute-names form))
(if (and (string-match org-table-range-regexp form)
(> (length (match-string 0 form)) 1))
(save-match-data
(org-table-get-range (match-string 0 form) tbeg 1))
form))))))))
(provide 'org-table)
;; arch-tag: 4d21cfdd-0268-440a-84b0-09237a0fe0ef

View File

@ -1,11 +1,11 @@
;;; org-clock.el --- The time clocking code for Org-mode
;;; org-timer.el --- The relative timer code for Org-mode
;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -32,6 +32,9 @@
(defvar org-timer-start-time nil
"t=0 for the running timer.")
(defvar org-timer-pause-time nil
"Time when the timer was paused.")
(defconst org-timer-re "\\([-+]?[0-9]+\\):\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)"
"Regular expression used to match timer stamps.")
@ -75,10 +78,41 @@ the region 0:00:00."
(-
(time-to-seconds (current-time))
(org-timer-hms-to-secs s)))))
(org-timer-set-mode-line 'on)
(message "Timer start time set to %s, current value is %s"
(format-time-string "%T" org-timer-start-time)
(org-timer-secs-to-hms (or delta 0))))))
(defun org-timer-pause-or-continue (&optional stop)
"Pause or continue the relative timer. With prefix arg, stop it entirely."
(interactive "P")
(cond
(stop (org-timer-stop))
((not org-timer-start-time) (error "No timer is running"))
(org-timer-pause-time
;; timer is paused, continue
(setq org-timer-start-time
(seconds-to-time
(-
(time-to-seconds (current-time))
(- (time-to-seconds org-timer-pause-time)
(time-to-seconds org-timer-start-time))))
org-timer-pause-time nil)
(org-timer-set-mode-line 'on)
(message "Timer continues at %s" (org-timer-value-string)))
(t
;; pause timer
(setq org-timer-pause-time (current-time))
(org-timer-set-mode-line 'pause)
(message "Timer paused at %s" (org-timer-value-string)))))
(defun org-timer-stop ()
"Stop the relative timer."
(interactive)
(setq org-timer-start-time nil
org-timer-pause-time nil)
(org-timer-set-mode-line 'off))
;;;###autoload
(defun org-timer (&optional restart)
"Insert a H:MM:SS string from the timer into the buffer.
@ -90,12 +124,14 @@ that was not started at the correct moment."
(interactive "P")
(if (equal restart '(4)) (org-timer-start))
(or org-timer-start-time (org-timer-start))
(insert (format
org-timer-format
(org-timer-secs-to-hms
(floor
(- (time-to-seconds (current-time))
(time-to-seconds org-timer-start-time)))))))
(insert (org-timer-value-string)))
(defun org-timer-value-string ()
(format org-timer-format (org-timer-secs-to-hms (floor (org-timer-seconds)))))
(defun org-timer-seconds ()
(- (time-to-seconds (or org-timer-pause-time (current-time)))
(time-to-seconds org-timer-start-time)))
;;;###autoload
(defun org-timer-change-times-in-region (beg end delta)
@ -176,6 +212,47 @@ If the integer is negative, the string will start with \"-\"."
h (/ m 60) m (- m (* 60 h)))
(format "%s%d:%02d:%02d" sign h m s)))
(defvar org-timer-mode-line-timer nil)
(defvar org-timer-mode-line-string nil)
(defun org-timer-set-mode-line (value)
"Set the mode-line dispay of the relative timer.
VALUE can be `on', `off', or `pause'."
(or global-mode-string (setq global-mode-string '("")))
(or (memq 'org-timer-mode-line-string global-mode-string)
(setq global-mode-string
(append global-mode-string '(org-timer-mode-line-string))))
(cond
((equal value 'off)
(when org-timer-mode-line-timer
(cancel-timer org-timer-mode-line-timer)
(setq org-timer-mode-line-timer nil))
(setq global-mode-string
(delq 'org-timer-mode-line-string global-mode-string))
(force-mode-line-update))
((equal value 'pause)
(when org-timer-mode-line-timer
(cancel-timer org-timer-mode-line-timer)
(setq org-timer-mode-line-timer nil)))
((equal value 'on)
(or global-mode-string (setq global-mode-string '("")))
(or (memq 'org-timer-mode-line-string global-mode-string)
(setq global-mode-string
(append global-mode-string '(org-timer-mode-line-string))))
(org-timer-update-mode-line)
(when org-timer-mode-line-timer
(cancel-timer org-timer-mode-line-timer))
(setq org-timer-mode-line-timer
(run-with-timer 1 1 'org-timer-update-mode-line)))))
(defun org-timer-update-mode-line ()
"Update the timer time in the mode line."
(if org-timer-pause-time
nil
(setq org-timer-mode-line-string
(concat " <" (substring (org-timer-value-string) 0 -1) ">"))
(force-mode-line-update)))
;; arch-tag: 97538f8c-3871-4509-8f23-1e7b3ff3d107
;;; org-timer.el ends here

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Andy Stewart <lazycat dot manatee at gmail dot com>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -49,93 +49,97 @@ This will encode `link-title' and `link-location' with
`org-make-link-string', and insert the transformed test into the kill ring,
so that it can be yanked into an Org-mode buffer with links working correctly."
(interactive)
(let ((regionp (org-region-active-p))
transform-start transform-end
return-content
link-location link-title
temp-position out-bound)
(setq transform-start (if regionp (region-beginning) (point-min))
transform-end (if regionp (region-end) (point-max)))
(let* ((regionp (org-region-active-p))
(transform-start (point-min))
(transform-end (point-max))
return-content
link-location link-title
temp-position out-bound)
(when regionp
(setq transform-start (region-beginning))
(setq transform-end (region-end))
;; Deactivate mark if current mark is activate.
(if (fboundp 'deactivate-mark) (deactivate-mark)))
(message "Transforming links...")
(save-excursion
(goto-char transform-start)
(while (and (not out-bound) ; still inside region to copy
(not (org-w3m-no-next-link-p))) ; no next link current buffer
;; store current point before jump next anchor
(setq temp-position (point))
;; move to next anchor when current point is not at anchor
(or (w3m-anchor (point)) (org-w3m-get-next-link-start))
(if (<= (point) transform-end) ; if point is inside transform bound
(progn
;; get content between two links.
(if (> (point) temp-position)
(setq return-content (concat return-content
(buffer-substring
temp-position (point)))))
;; get link location at current point.
(setq link-location (w3m-anchor (point)))
;; get link title at current point.
(setq link-title (buffer-substring (point)
(org-w3m-get-anchor-end)))
;; concat `org-mode' style url to `return-content'.
(setq return-content (concat return-content
(org-make-link-string
link-location link-title))))
(goto-char temp-position) ; reset point before jump next anchor
(setq out-bound t) ; for break out `while' loop
))
(while (and (not out-bound) ; still inside region to copy
(not (org-w3m-no-next-link-p))) ; no next link current buffer
;; store current point before jump next anchor
(setq temp-position (point))
;; move to next anchor when current point is not at anchor
(or (w3m-anchor (point)) (org-w3m-get-next-link-start))
(if (<= (point) transform-end) ; if point is inside transform bound
(progn
;; get content between two links.
(if (> (point) temp-position)
(setq return-content (concat return-content
(buffer-substring
temp-position (point)))))
;; get link location at current point.
(setq link-location (w3m-anchor (point)))
;; get link title at current point.
(setq link-title (buffer-substring (point)
(org-w3m-get-anchor-end)))
;; concat `org-mode' style url to `return-content'.
(setq return-content (concat return-content
(org-make-link-string
link-location link-title))))
(goto-char temp-position) ; reset point before jump next anchor
(setq out-bound t) ; for break out `while' loop
))
;; add the rest until end of the region to be copied
(if (< (point) transform-end)
(setq return-content
(concat return-content
(buffer-substring (point) transform-end))))
(setq return-content
(concat return-content
(buffer-substring (point) transform-end))))
(kill-new return-content)
(message "Transforming links...done, use C-y to insert text into Org-mode file")
(message "Copy with link transformation complete."))))
(defun org-w3m-get-anchor-start ()
"Move to and return `point' for the start of the current anchor."
"Move cursor to the start of current anchor. Return point."
;; get start position of anchor or current point
(goto-char (or (previous-single-property-change (point) 'w3m-anchor-sequence)
(point))))
(point))))
(defun org-w3m-get-anchor-end ()
"Move and return `point' after the end of current anchor."
"Move cursor to the end of current anchor. Return point."
;; get end position of anchor or point
(goto-char (or (next-single-property-change (point) 'w3m-anchor-sequence)
(point))))
(defun org-w3m-get-next-link-start ()
"Move and return `point' for that start of the current link."
"Move cursor to the start of next link. Return point."
(catch 'reach
(while (next-single-property-change (point) 'w3m-anchor-sequence)
;; jump to next anchor
(goto-char (next-single-property-change (point) 'w3m-anchor-sequence))
(when (w3m-anchor (point))
;; return point when current is valid link
(throw 'reach nil))))
;; return point when current is valid link
(throw 'reach nil))))
(point))
(defun org-w3m-get-prev-link-start ()
"Move and return `point' for that end of the current link."
"Move cursor to the start of prevoius link. Return point."
(catch 'reach
(while (previous-single-property-change (point) 'w3m-anchor-sequence)
;; jump to previous anchor
(goto-char (previous-single-property-change (point) 'w3m-anchor-sequence))
(when (w3m-anchor (point))
;; return point when current is valid link
(throw 'reach nil))))
;; return point when current is valid link
(throw 'reach nil))))
(point))
(defun org-w3m-no-next-link-p ()
"Return t if no next link after cursor.
Otherwise, return nil."
"Whether there is no next link after the cursor.
Return t if there is no next link; otherwise, return nil."
(save-excursion
(equal (point) (org-w3m-get-next-link-start))))
(defun org-w3m-no-prev-link-p ()
"Return t if no previous link after cursor.
Otherwise, return nil."
"Whether there is no previous link after the cursor.
Return t if there is no previous link; otherwise, return nil."
(save-excursion
(equal (point) (org-w3m-get-prev-link-start))))
@ -143,11 +147,11 @@ Otherwise, return nil."
(defvar w3m-mode-map)
(defvar w3m-minor-mode-map)
(when (and (boundp 'w3m-mode-map)
(keymapp w3m-mode-map))
(keymapp w3m-mode-map))
(define-key w3m-mode-map "\C-c\C-x\M-w" 'org-w3m-copy-for-org-mode)
(define-key w3m-mode-map "\C-c\C-x\C-w" 'org-w3m-copy-for-org-mode))
(when (and (boundp 'w3m-minor-mode-map)
(keymapp w3m-minor-mode-map))
(keymapp w3m-minor-mode-map))
(define-key w3m-minor-mode-map "\C-c\C-x\M-w" 'org-w3m-copy-for-org-mode)
(define-key w3m-minor-mode-map "\C-c\C-x\C-w" 'org-w3m-copy-for-org-mode))
(add-hook

View File

@ -5,7 +5,7 @@
;; Author: Tokuya Kameshima <kames at fa2 dot so-net dot ne dot jp>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;

View File

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 6.16
;; Version: 6.19a
;;
;; This file is part of GNU Emacs.
;;
@ -87,12 +87,13 @@
(require 'org-compat)
(require 'org-faces)
(require 'org-list)
(require 'org-footnote)
;;;; Customization variables
;;; Version
(defconst org-version "6.16"
(defconst org-version "6.19a"
"The version number of the file org.el.")
(defun org-version (&optional here)
@ -688,15 +689,21 @@ for the duration of the command."
:group 'org-structure
:type 'boolean)
(defcustom org-blank-before-new-entry '((heading . nil)
(plain-list-item . nil))
(defcustom org-blank-before-new-entry '((heading . auto)
(plain-list-item . auto))
"Should `org-insert-heading' leave a blank line before new heading/item?
The value is an alist, with `heading' and `plain-list-item' as car,
and a boolean flag as cdr."
:group 'org-edit-structure
:type '(list
(cons (const heading) (boolean))
(cons (const plain-list-item) (boolean))))
(cons (const heading)
(choice (const :tag "Never" nil)
(const :tag "Always" t)
(const :tag "Auto" auto)))
(cons (const plain-list-item)
(choice (const :tag "Never" nil)
(const :tag "Always" t)
(const :tag "Auto" auto)))))
(defcustom org-insert-heading-hook nil
"Hook being run after inserting a new heading."
@ -728,6 +735,23 @@ there are kept outside the narrowed region."
(const :tag "from `lang' element")
(const :tag "from `style' element")))))
(defcustom org-coderef-label-format "(ref:%s)"
"The default coderef format.
This format string will be used to search for coderef labels in literal
examples (EXAMPLE and SRC blocks). The format can be overwritten
an individual literal example with the -f option, like
#+BEGIN_SRC pascal +n -r -l \"((%s))\"
...
#+END_SRC
If you want to use this for HTML export, make sure that the format does
not introduce special font-locking, and avoid the HTML special
characters `<', `>', and `&'. The reason for this restriction is that
the labels are searched for only after htmlize has done its job."
:group 'org-edit-structure ; FIXME this is not in the right group
:type 'string)
(defcustom org-edit-fixed-width-region-mode 'artist-mode
"The mode that should be used to edit fixed-width regions.
These are the regions where each line starts with a colon."
@ -887,7 +911,7 @@ adaptive Use relative path for files in the current directory and sub-
(const noabbrev)
(const adaptive)))
(defcustom org-activate-links '(bracket angle plain radio tag date)
(defcustom org-activate-links '(bracket angle plain radio tag date footnote)
"Types of links that should be activated in Org-mode files.
This is a list of symbols, each leading to the activation of a certain link
type. In principle, it does not hurt to turn on most link types - there may
@ -900,15 +924,18 @@ plain Plain links in normal text, no whitespace, like http://google.com.
radio Text that is matched by a radio target, see manual for details.
tag Tag settings in a headline (link to tag search).
date Time stamps (link to calendar).
footnote Footnote labels.
Changing this variable requires a restart of Emacs to become effective."
:group 'org-link
:type '(set (const :tag "Double bracket links (new style)" bracket)
:type '(set :greedy t
(const :tag "Double bracket links (new style)" bracket)
(const :tag "Angular bracket links (old style)" angular)
(const :tag "Plain text links" plain)
(const :tag "Radio target matches" radio)
(const :tag "Tags" tag)
(const :tag "Timestamps" date)))
(const :tag "Timestamps" date)
(const :tag "Footnotes" footnote)))
(defcustom org-make-link-description-function nil
"Function to use to generate link descriptions from links. If
@ -2208,7 +2235,7 @@ default is the character `k' because we use the same key in the agenda."
(defcustom org-format-latex-options
'(:foreground default :background default :scale 1.0
:html-foreground "Black" :html-background "Transparent" :html-scale 1.0
:matchers ("begin" "$" "$$" "\\(" "\\["))
:matchers ("begin" "$1" "$" "$$" "\\(" "\\["))
"Options for creating images from LaTeX fragments.
This is a property list with the following properties:
:foreground the foreground color for images embedded in Emacs, e.g. \"Black\".
@ -2221,6 +2248,7 @@ This is a property list with the following properties:
:matchers a list indicating which matchers should be used to
find LaTeX fragments. Valid members of this list are:
\"begin\" find environments
\"$1\" find single characters surrounded by $.$
\"$\" find math expressions surrounded by $...$
\"$$\" find math expressions surrounded by $$....$$
\"\\(\" find math expressions surrounded by \\(...\\)
@ -2418,7 +2446,10 @@ Use customize to modify this, or restart Emacs after changing it."
:group 'org)
(defcustom org-completion-use-ido nil
"Non-nil means, use ido completion wherever possible."
"Non-nil means, use ido completion wherever possible.
Note that `ido-mode' must be active for this variable to be relevant.
If you decide to turn this variable on, you might well want to turn off
`org-outline-path-complete-in-steps'."
:group 'org-completion
:type 'boolean)
@ -2455,6 +2486,7 @@ Normal means, no org-mode-specific context."
(declare-function iswitchb-read-buffer (prompt &optional default require-match start matches-set))
(defvar iswitchb-temp-buflist)
(declare-function org-gnus-follow-link "org-gnus" (&optional group article))
(defvar org-agenda-tags-todo-honor-ignore-options)
(declare-function org-agenda-skip "org-agenda" ())
(declare-function org-format-agenda-item "org-agenda"
(extra txt &optional category tags dotime noprefix remove-re))
@ -2466,6 +2498,9 @@ Normal means, no org-mode-specific context."
(declare-function org-agenda-save-markers-for-cut-and-paste "org-agenda"
(beg end))
(declare-function org-agenda-copy-local-variable "org-agenda" (var))
(declare-function org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item
"org-agenda" (&optional end))
(declare-function parse-time-string "parse-time" (string))
(declare-function remember "remember" (&optional initial))
(declare-function remember-buffer-desc "remember" ())
@ -2620,7 +2655,8 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables."
(org-autoload "org-agenda"
'(org-agenda org-agenda-list org-search-view
org-todo-list org-tags-view org-agenda-list-stuck-projects
org-diary org-agenda-to-appt)))
org-diary org-agenda-to-appt
org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item)))
;; Autoload org-remember
@ -2634,7 +2670,7 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables."
(declare-function org-clock-save-markers-for-cut-and-paste "org-clock"
(beg end))
(declare-function org-update-mode-line "org-clock" ())
(declare-function org-clock-update-mode-line "org-clock" ())
(defvar org-clock-start-time)
(defvar org-clock-marker (make-marker)
"Marker recording the last clock-in.")
@ -2644,7 +2680,7 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables."
"org-clock"
'(org-clock-in org-clock-out org-clock-cancel
org-clock-goto org-clock-sum org-clock-display
org-remove-clock-overlays org-clock-report
org-clock-remove-overlays org-clock-report
org-clocktable-shift org-dblock-write:clocktable
org-get-clocktable)))
@ -2671,7 +2707,7 @@ Otherwise, return nil."
(setq org-clock-start-time
(apply 'encode-time
(org-parse-time-string (match-string 1))))
(org-update-mode-line)))
(org-clock-update-mode-line)))
(t
(and (match-end 4) (delete-region (match-beginning 4) (match-end 4)))
(end-of-line 1)
@ -2739,7 +2775,9 @@ Org-mode Agenda.
The archived entries will be filed as subtrees of the specified
headline. When the headline is omitted, the subtrees are simply
filed away at the end of the file, as top-level entries.
filed away at the end of the file, as top-level entries. Also in
the heading you can use %s to represent the file name, this can be
useful when using the same archive for a number of different files.
Here are a few examples:
\"%s_archive::\"
@ -2753,6 +2791,10 @@ Here are a few examples:
\"~/org/archive.org::\"
Archive in file ~/org/archive.org (absolute path), as top-level trees.
\"~/org/archive.org::From %s\"
Archive in file ~/org/archive.org (absolute path), und headlines
\"From FILENAME\" where file name is the current file name.
\"basement::** Finished Tasks\"
Archive in file ./basement (relative path), as level 3 trees
below the level 2 heading \"** Finished Tasks\".
@ -2989,6 +3031,13 @@ After a match, the following groups carry important information:
("logrepeat" org-log-repeat state)
("lognoterepeat" org-log-repeat note)
("nologrepeat" org-log-repeat nil)
("fninline" org-footnote-define-inline t)
("nofninline" org-footnote-define-inline nil)
("fnlocal" org-footnote-section nil)
("fnauto" org-footnote-auto-label t)
("fnprompt" org-footnote-auto-label nil)
("fnconfirm" org-footnote-auto-label confirm)
("fnplain" org-footnote-auto-label plain)
("constcgs" constants-unit-system cgs)
("constSI" constants-unit-system SI))
"Variable associated with STARTUP options for org-mode.
@ -3202,7 +3251,7 @@ means to push this value onto the list in the variable.")
(mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
"\\)\\>\\)?[ \t]*\\(.*\\)")
org-complex-heading-regexp
(concat "^\\(\\*+\\)\\(?:[ \t]+\\("
(concat "^\\(\\*+\\)[ \t]+\\(?:\\("
(mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
"\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)"
"\\(?:[ \t]+\\(:[[:alnum:]_@:]+:\\)\\)?[ \t]*$")
@ -3358,7 +3407,8 @@ This variable is set by `org-before-change-function'.
"Every change indicates that a table might need an update."
(setq org-table-may-need-update t))
(defvar org-mode-map)
(defvar org-mode-hook nil)
(defvar org-mode-hook nil
"Mode hook for Org-mode, run after the mode was turned on.")
(defvar org-inhibit-startup nil) ; Dynamically-scoped param.
(defvar org-agenda-keep-modes nil) ; Dynamically-scoped param.
(defvar org-table-buffer-is-an nil)
@ -3534,6 +3584,8 @@ Here is what the match groups contain after a match:
3: path
4: [desc]
5: desc")
(defvar org-bracket-link-analytic-regexp++ nil
"Like org-bracket-link-analytic-regexp, but include coderef internal type.")
(defvar org-any-link-re nil
"Regular expression matching any link.")
@ -3580,6 +3632,14 @@ This should be called after the variable `org-link-types' has changed."
"\\]"
"\\(\\[" "\\([^]]+\\)" "\\]\\)?"
"\\]")
org-bracket-link-analytic-regexp++
(concat
"\\[\\["
"\\(\\(" (mapconcat 'identity (cons "coderef" org-link-types) "\\|") "\\):\\)?"
"\\([^]]+\\)"
"\\]"
"\\(\\[" "\\([^]]+\\)" "\\]\\)?"
"\\]")
org-any-link-re
(concat "\\(" org-bracket-link-regexp "\\)\\|\\("
org-angle-link-re "\\)\\|\\("
@ -3728,6 +3788,22 @@ will be prompted for."
))
t)))
(defun org-activate-footnote-links (limit)
"Run through the buffer and add overlays to links."
(if (re-search-forward "\\(^\\|[^][]\\)\\(\\[\\([0-9]+\\]\\|fn:[^ \t\r\n:]+?[]:]\\)\\)"
limit t)
(progn
(add-text-properties (match-beginning 2) (match-end 2)
(list 'mouse-face 'highlight
'rear-nonsticky org-nonsticky-props
'keymap org-mouse-map
'help-echo
(if (= (point-at-bol) (match-beginning 2))
"Footnote definition"
"Footnote reference")
))
t)))
(defun org-activate-bracket-links (limit)
"Run through the buffer and add overlays to bracketed links."
(if (re-search-forward org-bracket-link-regexp limit t)
@ -3982,6 +4058,8 @@ between words."
(if (memq 'bracket lk) '(org-activate-bracket-links (0 'org-link t)))
(if (memq 'radio lk) '(org-activate-target-links (0 'org-link t)))
(if (memq 'date lk) '(org-activate-dates (0 'org-date t)))
(if (memq 'footnote lk) '(org-activate-footnote-links
(2 'org-footnote t)))
'("^&?%%(.*\\|<%%([^>\n]*?>" (0 'org-sexp-date t))
'(org-hide-wide-columns (0 nil append))
;; TODO lines
@ -4771,6 +4849,13 @@ frame is not changed."
;;; Inserting headlines
(defun org-previous-line-empty-p ()
(save-excursion
(and (not (bobp))
(or (beginning-of-line 0) t)
(save-match-data
(looking-at "[ \t]*$")))))
(defun org-insert-heading (&optional force-heading)
"Insert a new heading or item with same depth at point.
If point is in a plain list and FORCE-HEADING is nil, create a new list item.
@ -4781,13 +4866,16 @@ but create the new headline after the current line."
(if (= (buffer-size) 0)
(insert "\n* ")
(when (or force-heading (not (org-insert-item)))
(let* ((head (save-excursion
(let* ((empty-line-p nil)
(head (save-excursion
(condition-case nil
(progn
(org-back-to-heading)
(setq empty-line-p (org-previous-line-empty-p))
(match-string 0))
(error "*"))))
(blank (cdr (assq 'heading org-blank-before-new-entry)))
(blank-a (cdr (assq 'heading org-blank-before-new-entry)))
(blank (if (eq blank-a 'auto) empty-line-p blank-a))
pos hide-previous previous-pos)
(cond
((and (org-on-heading-p) (bolp)
@ -4820,6 +4908,8 @@ but create the new headline after the current line."
(org-insert-heading-respect-content
(org-end-of-subtree nil t)
(or (bolp) (newline))
(or (org-previous-line-empty-p)
(and blank (newline)))
(open-line 1))
((org-on-heading-p)
(when hide-previous
@ -4862,6 +4952,25 @@ but create the new headline after the current line."
"\\*+[ \t]+\\([^\r\n]*\\)"))
(match-string 1) "")))
(defun org-heading-components ()
"Return the components of the current heading.
This is a list with the following elements:
- the level as an integer
- the reduced level, different if `org-odd-levels-only' is set.
- the TODO keyword, or nil
- the priority character, like ?A, or nil if no priority is given
- the headline text itself, or the tags string if no headline text
- the tags string, or nil."
(save-excursion
(org-back-to-heading t)
(if (looking-at org-complex-heading-regexp)
(list (length (match-string 1))
(org-reduced-level (length (match-string 1)))
(org-match-string-no-properties 2)
(and (match-end 3) (aref (match-string 3) 2))
(org-match-string-no-properties 4)
(org-match-string-no-properties 5)))))
(defun org-insert-heading-after-current ()
"Insert a new heading with same level as current, after current subtree."
(interactive)
@ -4970,6 +5079,8 @@ in the region."
((equal (char-after) ?\ ) (forward-char 1))))))
(defun org-reduced-level (l)
"Compute the effective level of a heading.
This takes into account the setting of `org-odd-levels-only'."
(if org-odd-levels-only (1+ (floor (/ l 2))) l))
(defun org-get-valid-level (level &optional change)
@ -5686,13 +5797,14 @@ exit by killing the buffer with \\[org-edit-src-exit]."
"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)
beg end lang lang-f single lfmt)
(if (not info)
nil
(setq beg (nth 0 info)
end (nth 1 info)
lang (nth 2 info)
single (nth 3 info)
lfmt (nth 4 info)
lang-f (intern (concat lang "-mode")))
(unless (functionp lang-f)
(error "No such language mode: %s" lang-f))
@ -5708,6 +5820,8 @@ exit by killing the buffer with \\[org-edit-src-exit]."
(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 lfmt
(set (make-local-variable 'org-coderef-label-format) lfmt))
(when org-mode-p
(goto-char (point-min))
(while (re-search-forward "^," nil t)
@ -5798,7 +5912,7 @@ the language, a switch telling of the content should be in a single line."
("^#\\+ascii:" "\n" "ascii" single-line)
)))
(pos (point))
re re1 re2 single beg end lang)
re re1 re2 single beg end lang lfmt match-re1)
(catch 'exit
(while (setq entry (pop re-list))
(setq re1 (car entry) re2 (nth 1 entry) lang (nth 2 entry)
@ -5807,19 +5921,27 @@ the language, a switch telling of the content should be in a single line."
(if (or (looking-at re1)
(re-search-backward re1 nil t))
(progn
(setq beg (match-end 0) lang (org-edit-src-get-lang lang))
(setq match-re1 (match-string 0))
(setq beg (match-end 0)
lang (org-edit-src-get-lang lang)
lfmt (org-edit-src-get-label-format match-re1))
(if (and (re-search-forward re2 nil t)
(>= (match-end 0) pos))
(throw 'exit (list beg (match-beginning 0) lang single))))
(throw 'exit (list beg (match-beginning 0)
lang single lfmt))))
(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)))))))))))
(progn
(setq lfmt (org-edit-src-get-label-format
(match-string 0)))
(throw 'exit
(list (match-end 0) end
(org-edit-src-get-lang lang)
single lfmt))))))))))))
(defun org-edit-src-get-lang (lang)
"Extract the src language."
@ -5835,6 +5957,12 @@ the language, a switch telling of the content should be in a single line."
(match-string 1 m))
(t "fundamental"))))
(defun org-edit-src-get-label-format (s)
"Extract the label format."
(save-match-data
(if (string-match "-l[ \t]+\\\\?\"\\([^\t\r\n\"]+\\)\\\\?\"" s)
(match-string 1 s))))
(defun org-edit-src-exit ()
"Exit special edit and protect problematic lines."
(interactive)
@ -6215,6 +6343,25 @@ For file links, arg negates `org-context-in-file-links'."
(setq link (plist-get org-store-link-plist :link)
desc (or (plist-get org-store-link-plist :description) link)))
((equal (buffer-name) "*Org Edit Src Example*")
(let (label gc)
(while (or (not label)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(re-search-forward
(regexp-quote (format org-coderef-label-format label))
nil t))))
(when label (message "Label exists already") (sit-for 2))
(setq label (read-string "Code line label: " label)))
(end-of-line 1)
(setq link (format org-coderef-label-format label))
(setq gc (- 79 (length link)))
(if (< (current-column) gc) (org-move-to-column gc t) (insert " "))
(insert link)
(setq link (concat "(" label ")") desc nil)))
((eq major-mode 'calendar-mode)
(let ((cd (calendar-cursor-to-date)))
(setq link
@ -6494,30 +6641,6 @@ This is the list that is used before handing over to the browser.")
"Exclusive or."
(if a (not b) b))
(defun org-get-header (header)
"Find a header field in the current buffer."
(save-excursion
(goto-char (point-min))
(let ((case-fold-search t) s)
(cond
((eq header 'from)
(if (re-search-forward "^From:\\s-+\\(.*\\)" nil t)
(setq s (match-string 1)))
(while (string-match "\"" s)
(setq s (replace-match "" t t s)))
(if (string-match "[<(].*" s)
(setq s (replace-match "" t t s))))
((eq header 'message-id)
(if (re-search-forward "^message-id:\\s-+\\(.*\\)" nil t)
(setq s (match-string 1))))
((eq header 'subject)
(if (re-search-forward "^subject:\\s-+\\(.*\\)" nil t)
(setq s (match-string 1)))))
(if (string-match "\\`[ \t\]+" s) (setq s (replace-match "" t t s)))
(if (string-match "[ \t\]+\\'" s) (setq s (replace-match "" t t s)))
s)))
(defun org-fixup-message-id-for-http (s)
"Replace special characters in a message id, so it can be used in an http query."
(while (string-match "<" s)
@ -6627,23 +6750,25 @@ used as the link location instead of reading one interactively."
(reverse org-stored-links) "\n"))))
(let ((cw (selected-window)))
(select-window (get-buffer-window "*Org Links*"))
(org-fit-window-to-buffer)
(setq truncate-lines t)
(org-fit-window-to-buffer)
(select-window cw))
;; Fake a link history, containing the stored links.
(setq tmphist (append (mapcar 'car org-stored-links)
org-insert-link-history))
(unwind-protect
(setq link (org-completing-read
"Link: "
(append
(mapcar (lambda (x) (list (concat (car x) ":")))
(append org-link-abbrev-alist-local org-link-abbrev-alist))
(mapcar (lambda (x) (list (concat x ":")))
org-link-types))
nil nil nil
'tmphist
(or (car (car org-stored-links)))))
(setq link
(let ((org-completion-use-ido nil))
(org-completing-read
"Link: "
(append
(mapcar (lambda (x) (list (concat (car x) ":")))
(append org-link-abbrev-alist-local org-link-abbrev-alist))
(mapcar (lambda (x) (list (concat x ":")))
org-link-types))
nil nil nil
'tmphist
(or (car (car org-stored-links))))))
(set-window-configuration wcf)
(kill-buffer "*Org Links*"))
(setq entry (assoc link org-stored-links))
@ -6710,6 +6835,7 @@ used as the link location instead of reading one interactively."
(let ((minibuffer-local-completion-map
(copy-keymap minibuffer-local-completion-map)))
(org-defkey minibuffer-local-completion-map " " 'self-insert-command)
(org-defkey minibuffer-local-completion-map "?" 'self-insert-command)
(apply 'org-ido-completing-read args)))
(defun org-ido-completing-read (&rest args)
@ -6873,8 +6999,11 @@ application the system uses for this file type."
(move-marker org-open-link-marker (point))
(setq org-window-config-before-follow-link (current-window-configuration))
(org-remove-occur-highlights nil nil t)
(if (org-at-timestamp-p t)
(org-follow-timestamp-link)
(cond
((org-at-timestamp-p t) (org-follow-timestamp-link))
((or (org-footnote-at-reference-p) (org-footnote-at-definition-p))
(org-footnote-action))
(t
(let (type path link line search (pos (point)))
(catch 'match
(save-excursion
@ -7020,7 +7149,7 @@ application the system uses for this file type."
(error "Abort"))))
(t
(browse-url-at-point)))))
(browse-url-at-point))))))
(move-marker org-open-link-marker nil)
(run-hook-with-args 'org-follow-link-hook))
@ -7105,6 +7234,19 @@ in all files. If AVOID-POS is given, ignore matches near that position."
pos (match-beginning 0))))
;; There is an exact target for this
(goto-char pos))
((and (string-match "^(\\(.*\\))$" s0)
(save-excursion
(goto-char (point-min))
(and
(re-search-forward
(concat "[^[]" (regexp-quote
(format org-coderef-label-format
(match-string 1 s0))))
nil t)
(setq type 'dedicated
pos (1+ (match-beginning 0))))))
;; There is a coderef target for this
(goto-char pos))
((string-match "^/\\(.*\\)/$" s)
;; A regular expression
(cond
@ -9128,6 +9270,7 @@ this case the return value is a list of all return values from these calls.
MATCHER is a Lisp form to be evaluated, testing if a given set of tags
qualifies a headline for inclusion. When TODO-ONLY is non-nil,
only lines with a TODO keyword are included in the output."
(require 'org-agenda)
(let* ((re (concat "[\n\r]" outline-regexp " *\\(\\<\\("
(mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
(org-re
@ -9190,7 +9333,10 @@ only lines with a TODO keyword are included in the output."
;; selective inheritance, remove uninherited ones
(setcdr (car tags-alist)
(org-remove-uniherited-tags (cdar tags-alist))))
(when (and (or (not todo-only) (member todo org-not-done-keywords))
(when (and (or (not todo-only)
(and (member todo org-not-done-keywords)
(or (not org-agenda-tags-todo-honor-ignore-options)
(not (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item)))))
(let ((case-fold-search t)) (eval matcher))
(or
(not (member org-archive-tag tags-list))
@ -9309,7 +9455,7 @@ also TODO lines."
;; Get a new match request, with completion
(let ((org-last-tags-completion-table
(org-global-tags-completion-table)))
(setq match (org-ido-completing-read
(setq match (org-completing-read
"Match: " 'org-tags-completion-function nil nil nil
'org-tags-history))))
@ -9439,16 +9585,16 @@ also TODO lines."
(defun org-string>= (a b) (not (string< a b)))
(defun org-string> (a b) (and (not (string= a b)) (not (string< a b))))
(defun org-string<> (a b) (not (string= a b)))
(defun org-time= (a b) (= (org-2ft a) (org-2ft b)))
(defun org-time< (a b) (< (org-2ft a) (org-2ft b)))
(defun org-time<= (a b) (<= (org-2ft a) (org-2ft b)))
(defun org-time> (a b) (> (org-2ft a) (org-2ft b)))
(defun org-time>= (a b) (>= (org-2ft a) (org-2ft b)))
(defun org-time<> (a b) (org<> (org-2ft a) (org-2ft b)))
(defun org-time= (a b) (setq a (org-2ft a) b (org-2ft b)) (and (> a 0) (> b 0) (= a b)))
(defun org-time< (a b) (setq a (org-2ft a) b (org-2ft b)) (and (> a 0) (> b 0) (< a b)))
(defun org-time<= (a b) (setq a (org-2ft a) b (org-2ft b)) (and (> a 0) (> b 0) (<= a b)))
(defun org-time> (a b) (setq a (org-2ft a) b (org-2ft b)) (and (> a 0) (> b 0) (> a b)))
(defun org-time>= (a b) (setq a (org-2ft a) b (org-2ft b)) (and (> a 0) (> b 0) (>= a b)))
(defun org-time<> (a b) (setq a (org-2ft a) b (org-2ft b)) (and (> a 0) (> b 0) (org<> a b)))
(defun org-2ft (s)
"Convert S to a floating point time.
If S is already a number, just return it. If it is a string, parse
it as a time string and apply `float-time' to it. f S is nil, just return 0."
it as a time string and apply `float-time' to it. If S is nil, just return 0."
(cond
((numberp s) s)
((stringp s)
@ -10030,39 +10176,41 @@ the scanner. The following items can be given here:
((eq match nil) (setq matcher t))
(t (setq matcher (if match (cdr (org-make-tags-matcher match)) t))))
(when (eq scope 'tree)
(org-back-to-heading t)
(org-narrow-to-subtree)
(setq scope nil))
(save-excursion
(save-restriction
(when (eq scope 'tree)
(org-back-to-heading t)
(org-narrow-to-subtree)
(setq scope nil))
(if (not scope)
(progn
(org-prepare-agenda-buffers
(list (buffer-file-name (current-buffer))))
(org-scan-tags func matcher))
;; Get the right scope
(setq pos (point))
(cond
((and scope (listp scope) (symbolp (car scope)))
(setq scope (eval scope)))
((eq scope 'agenda)
(setq scope (org-agenda-files t)))
((eq scope 'agenda-with-archives)
(setq scope (org-agenda-files t))
(setq scope (org-add-archive-files scope)))
((eq scope 'file)
(setq scope (list (buffer-file-name))))
((eq scope 'file-with-archives)
(setq scope (org-add-archive-files (list (buffer-file-name))))))
(org-prepare-agenda-buffers scope)
(while (setq file (pop scope))
(with-current-buffer (org-find-base-buffer-visiting file)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(setq res (append res (org-scan-tags func matcher)))))))
res)))
(if (not scope)
(progn
(org-prepare-agenda-buffers
(list (buffer-file-name (current-buffer))))
(setq res (org-scan-tags func matcher)))
;; Get the right scope
(setq pos (point))
(cond
((and scope (listp scope) (symbolp (car scope)))
(setq scope (eval scope)))
((eq scope 'agenda)
(setq scope (org-agenda-files t)))
((eq scope 'agenda-with-archives)
(setq scope (org-agenda-files t))
(setq scope (org-add-archive-files scope)))
((eq scope 'file)
(setq scope (list (buffer-file-name))))
((eq scope 'file-with-archives)
(setq scope (org-add-archive-files (list (buffer-file-name))))))
(org-prepare-agenda-buffers scope)
(while (setq file (pop scope))
(with-current-buffer (org-find-base-buffer-visiting file)
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(setq res (append res (org-scan-tags func matcher))))))))))
res))
;;;; Properties
@ -10177,7 +10325,9 @@ If WHICH is nil or `all', get all properties. If WHICH is
(excluded '("TODO" "TAGS" "ALLTAGS" "PRIORITY"))
beg end range props sum-props key value string clocksum)
(save-excursion
(when (condition-case nil (org-back-to-heading t) (error nil))
(when (condition-case nil
(and (org-mode-p) (org-back-to-heading t))
(error nil))
(setq beg (point))
(setq sum-props (get-text-property (point) 'org-summaries))
(setq clocksum (get-text-property (point) :org-clock-minutes))
@ -11517,7 +11667,7 @@ When SHOW-ALL is nil, only return the current occurrence of a time stamp."
;; Make the proper lists from the dates
(catch 'exit
(let ((a1 '(("d" . day) ("w" . week) ("m" . month) ("y" . year)))
dn dw sday cday n1 n2
dn dw sday cday n1 n2 n0
d m y y1 y2 date1 date2 nmonths nm ny m2)
(setq start (org-date-to-gregorian start)
@ -11566,6 +11716,8 @@ When SHOW-ALL is nil, only return the current occurrence of a time stamp."
(setq m2 (+ m dn) y2 y)
(if (> m2 12) (setq y2 (1+ y2) m2 (- m2 12)))
(setq n2 (calendar-absolute-from-gregorian (list m2 d y2))))))
;; Make sure n1 is the earlier date
(setq n0 n1 n1 (min n1 n2) n2 (max n0 n2))
(if show-all
(cond
((eq prefer 'past) n1)
@ -12330,7 +12482,8 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
'(("begin" "^[ \t]*\\(\\\\begin{\\([a-zA-Z0-9\\*]+\\)[^\000]+?\\\\end{\\2}\\)" 1 t)
;; ("$" "\\([ (]\\|^\\)\\(\\(\\([$]\\)\\([^ \r\n,.$].*?\\(\n.*?\\)\\{0,5\\}[^ \r\n,.$]\\)\\4\\)\\)\\([ .,?;:'\")]\\|$\\)" 2 nil)
;; \000 in the following regex is needed for org-inside-LaTeX-fragment-p
("$" "\\([^$]\\)\\(\\(\\$\\([^ \r\n,;.$][^$\n\r]*?\\(\n[^$\n\r]*?\\)\\{0,2\\}[^ \r\n,.$]\\)\\$\\)\\)\\([ .,?;:'\")\000]\\|$\\)" 2 nil)
("$1" "\\([^$]\\)\\(\\$[^ \r\n,;.$]\\$\\)\\([- .,?;:'\")\000]\\|$\\)" 2 nil)
("$" "\\([^$]\\)\\(\\(\\$\\([^ \r\n,;.$][^$\n\r]*?\\(\n[^$\n\r]*?\\)\\{0,2\\}[^ \r\n,.$]\\)\\$\\)\\)\\([- .,?;:'\")\000]\\|$\\)" 2 nil)
("\\(" "\\\\([^\000]*?\\\\)" 0 nil)
("\\[" "\\\\\\[[^\000]*?\\\\\\]" 0 t)
("$$" "\\$\\$[^\000]*?\\$\\$" 0 t))
@ -12451,7 +12604,6 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
"Return string to be used as color value for an RGB component."
(format "%g" (/ value 65535.0)))
;;;; Key bindings
;; Make `C-c C-x' a prefix key
@ -12592,6 +12744,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(org-defkey org-mode-map "\C-c\C-e" 'org-export)
(org-defkey org-mode-map "\C-c:" 'org-toggle-fixed-width-section)
(org-defkey org-mode-map "\C-c\C-x\C-f" 'org-emphasize)
(org-defkey org-mode-map "\C-c\C-xf" 'org-footnote-action)
(org-defkey org-mode-map "\C-c\C-x\C-k" 'org-mark-entry-for-agenda-action)
(org-defkey org-mode-map "\C-c\C-x\C-w" 'org-cut-special)
@ -12614,6 +12767,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(org-defkey org-mode-map "\C-c\C-x." 'org-timer)
(org-defkey org-mode-map "\C-c\C-x-" 'org-timer-item)
(org-defkey org-mode-map "\C-c\C-x0" 'org-timer-start)
(org-defkey org-mode-map "\C-c\C-x," 'org-timer-pause-or-continue)
(define-key org-mode-map "\C-c\C-x\C-c" 'org-columns)
@ -13004,6 +13158,9 @@ This command does many different things, depending on context:
- If the cursor is on a #+TBLFM line, re-apply the formulas to
the entire table.
- If the cursor is at a footnote reference or definition, jump to
the corresponding definition or references, respectively.
- If the cursor is a the beginning of a dynamic block, update it.
- If the cursor is inside a table created by the table.el package,
@ -13027,7 +13184,7 @@ This command does many different things, depending on context:
((or (and (boundp 'org-clock-overlays) org-clock-overlays)
org-occur-highlights
org-latex-fragment-image-overlays)
(and (boundp 'org-clock-overlays) (org-remove-clock-overlays))
(and (boundp 'org-clock-overlays) (org-clock-remove-overlays))
(org-remove-occur-highlights)
(org-remove-latex-fragment-image-overlays)
(message "Temporary highlights/overlays removed from current buffer"))
@ -13049,6 +13206,9 @@ This command does many different things, depending on context:
(call-interactively 'org-table-recalculate)
(org-table-maybe-recalculate-line))
(call-interactively 'org-table-align))
((or (org-footnote-at-reference-p)
(org-footnote-at-definition-p))
(call-interactively 'org-footnote-action))
((org-at-item-checkbox-p)
(call-interactively 'org-toggle-checkbox))
((org-at-item-p)
@ -13115,62 +13275,47 @@ context. See the individual commands for more information."
(defun org-ctrl-c-star ()
"Compute table, or change heading status of lines.
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."
Calls `org-table-recalculate' or `org-toggle-heading',
depending on context."
(interactive)
(cond
((org-at-table-p)
(call-interactively 'org-table-recalculate))
((org-region-active-p)
(t
;; Convert all lines in region to list items
(call-interactively 'org-toggle-region-headings))
((org-on-heading-p)
(org-toggle-region-headings (point-at-bol)
(min (1+ (point-at-eol)) (point-max))))
((org-at-item-p)
;; Convert to heading
(let ((level (save-match-data
(save-excursion
(condition-case nil
(progn
(org-back-to-heading t)
(funcall outline-level))
(error 0))))))
(replace-match
(concat (make-string (org-get-valid-level level 1) ?*) " ") t t)))
(t (org-toggle-region-headings (point-at-bol)
(min (1+ (point-at-eol)) (point-max))))))
(call-interactively 'org-toggle-heading))))
(defun org-ctrl-c-minus ()
"Insert separator line in table or modify bullet status of line.
Also turns a plain line or a region of lines into list items.
Calls `org-table-insert-hline', `org-toggle-region-items', or
Calls `org-table-insert-hline', `org-toggle-item', or
`org-cycle-list-bullet', depending on context."
(interactive)
(cond
((org-at-table-p)
(call-interactively 'org-table-insert-hline))
((org-on-heading-p)
;; Convert to item
(save-excursion
(beginning-of-line 1)
(if (looking-at "\\*+ ")
(replace-match (concat (make-string (- (match-end 0) (point) 1) ?\ ) "- ")))))
((org-region-active-p)
;; Convert all lines in region to list items
(call-interactively 'org-toggle-region-items))
(call-interactively 'org-toggle-item))
((org-in-item-p)
(call-interactively 'org-cycle-list-bullet))
(t (org-toggle-region-items (point-at-bol)
(min (1+ (point-at-eol)) (point-max))))))
(t
(call-interactively 'org-toggle-item))))
(defun org-toggle-region-items (beg end)
"Convert all lines in region to list items.
If the first line is already an item, convert all list items in the region
to normal lines."
(interactive "r")
(let (l2 l)
(defun org-toggle-item ()
"Convert headings or normal lines to items, items to normal lines.
If there is no active region, only the current line is considered.
If the first line in the region is a headline, convert all headlines to items.
If the first line in the region is an item, convert all items to normal lines.
If the first line is normal text, add an item bullet to each line."
(interactive)
(let (l2 l beg end)
(if (org-region-active-p)
(setq beg (region-beginning) end (region-end))
(setq beg (point-at-bol)
end (min (1+ (point-at-eol)) (point-max))))
(save-excursion
(goto-char end)
(setq l2 (org-current-line))
@ -13185,18 +13330,41 @@ to normal lines."
(delete-region (match-beginning 2) (match-end 2))
(and (looking-at "[ \t]+") (replace-match "")))
(beginning-of-line 2))
(while (< (setq l (1+ l)) l2)
(unless (org-at-item-p)
(if (looking-at "\\([ \t]*\\)\\(\\S-\\)")
(replace-match "\\1- \\2")))
(beginning-of-line 2))))))
(if (org-on-heading-p)
;; Headings, convert to items
(while (< (setq l (1+ l)) l2)
(if (looking-at org-outline-regexp)
(replace-match "- " t t))
(beginning-of-line 2))
;; normal lines, turn them into items
(while (< (setq l (1+ l)) l2)
(unless (org-at-item-p)
(if (looking-at "\\([ \t]*\\)\\(\\S-\\)")
(replace-match "\\1- \\2")))
(beginning-of-line 2)))))))
(defun org-toggle-region-headings (beg end)
"Convert all lines in region to list items.
If the first line is already an item, convert all list items in the region
to normal lines."
(interactive "r")
(let (l2 l)
(defun org-toggle-heading (&optional nstars)
"Convert headings to normal text, or items or text to headings.
If there is no active region, only the current line is considered.
If the first line is a heading, remove the stars from all headlines
in the region.
If the first line is a plain list item, turn all plain list items into
headings.
If the first line is a normal line, turn each and every line in the region
into a heading.
When converting a line into a heading, the number of stars is chosen
such that the lines become children of the current entry. However, when
a prefix argument is given, its value determines the number of stars to add."
(interactive "P")
(let (l2 l itemp beg end)
(if (org-region-active-p)
(setq beg (region-beginning) end (region-end))
(setq beg (point-at-bol)
end (min (1+ (point-at-eol)) (point-max))))
(save-excursion
(goto-char end)
(setq l2 (org-current-line))
@ -13209,15 +13377,22 @@ to normal lines."
(when (org-on-heading-p t)
(and (looking-at outline-regexp) (replace-match "")))
(beginning-of-line 2))
(let* ((stars (save-excursion
(re-search-backward org-complex-heading-regexp nil t)
(or (match-string 1) "*")))
(add-stars (if org-odd-levels-only "**" "*"))
(rpl (concat stars add-stars " \\2")))
(setq itemp (org-at-item-p))
(let* ((stars
(if nstars
(make-string (prefix-numeric-value current-prefix-arg)
?*)
(save-excursion
(re-search-backward org-complex-heading-regexp nil t)
(or (match-string 1) "*"))))
(add-stars (if nstars "" (if org-odd-levels-only "**" "*")))
(rpl (concat stars add-stars " ")))
(while (< (setq l (1+ l)) l2)
(unless (org-on-heading-p)
(if (looking-at "\\([ \t]*\\)\\(\\S-\\)")
(replace-match rpl)))
(if itemp
(and (org-at-item-p) (replace-match rpl t t))
(unless (org-on-heading-p)
(if (looking-at "\\([ \t]*\\)\\(\\S-\\)")
(replace-match (concat rpl (match-string 2))))))
(beginning-of-line 2)))))))
(defun org-meta-return (&optional arg)
@ -13332,7 +13507,10 @@ See the individual commands for more information."
["Convert to odd/even levels" org-convert-to-oddeven-levels t])
("Editing"
["Emphasis..." org-emphasize t]
["Edit Source Example" org-edit-special t])
["Edit Source Example" org-edit-special t]
"--"
["Footnote new/jump" org-footnote-action t]
["Footnote extra" (org-footnote-action t) :active t :keys "C-u C-c C-x f"])
("Archive"
["Toggle ARCHIVE tag" org-toggle-archive-tag t]
; ["Check and Tag Children" (org-toggle-archive-tag (4))
@ -13390,9 +13568,11 @@ See the individual commands for more information."
["Goto Calendar" org-goto-calendar t]
["Date from Calendar" org-date-from-calendar t]
"--"
["Start/restart timer" org-timer-start t]
["Insert timer string" org-timer t]
["Insert timer item" org-timer-item t])
["Start/Restart Timer" org-timer-start t]
["Pause/Continue Timer" org-timer-pause-or-continue t]
["Stop Timer" org-timer-pause-or-continue :active t :keys "C-u C-c C-x ,"]
["Insert Timer String" org-timer t]
["Insert Timer Item" org-timer-item t])
("Logging work"
["Clock in" org-clock-in t]
["Clock out" org-clock-out t]
@ -13560,7 +13740,8 @@ With optional NODE, go directly to that node."
(switch-to-buffer (marker-buffer marker))
(if (or (> marker (point-max)) (< marker (point-min)))
(widen))
(goto-char marker))
(goto-char marker)
(org-show-context 'org-goto))
(if bookmark
(bookmark-jump bookmark)
(error "Cannot find location"))))
@ -14006,13 +14187,15 @@ not an indirect buffer."
(or (buffer-base-buffer buf) buf)
nil)))
(defun org-image-file-name-regexp ()
"Return regexp matching the file names of images."
(if (fboundp 'image-file-name-regexp)
(defun org-image-file-name-regexp (&optional extensions)
"Return regexp matching the file names of images.
If EXTENSIONS is given, only match these."
(if (and (not extensions) (fboundp 'image-file-name-regexp))
(image-file-name-regexp)
(let ((image-file-name-extensions
'("png" "jpeg" "jpg" "gif" "tiff" "tif"
"xbm" "xpm" "pbm" "pgm" "ppm")))
(or extensions
'("png" "jpeg" "jpg" "gif" "tiff" "tif"
"xbm" "xpm" "pbm" "pgm" "ppm"))))
(concat "\\."
(regexp-opt (nconc (mapcar 'upcase
image-file-name-extensions)
@ -14020,10 +14203,10 @@ not an indirect buffer."
t)
"\\'"))))
(defun org-file-image-p (file)
(defun org-file-image-p (file &optional extensions)
"Return non-nil if FILE is an image."
(save-match-data
(string-match (org-image-file-name-regexp) file)))
(string-match (org-image-file-name-regexp extensions) file)))
(defun org-get-cursor-date ()
"Return the date at cursor in as a time.