* lisp/org-colview.el (org-columns-remove-overlays): Fix
"wrong-type-argument markerp nil".
When calling `org-agenda-columns', `org-columns-top-level-marker' is
not set. Handle this situation.
Reported-by: Benjamin Beckwith <bnbeckwith@gmail.com>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-09/msg00566.html>
* lisp/org-agenda.el (org-search-view): Specify the keymap for the
substitute-command-keys call because, as of b6c5a174d, this call is
made outside of the agenda buffer.
* lisp/org-irc.el (org-irc-export): Add a new function,
org-irc-export, which properly exports irc links to html and markdown
* lisp/ox-md.el (org-md-link): Remove workaround to get irc links
working properly in ox-md, and use org-irc's export functions instead
* lisp/ox-publish.el (org-publish-get-base-files): Ensure MATCH regexp
is always a string since `directory-files-recursively' requires it.
* testing/lisp/test-ox-publish.el (test-org-publish/get-project-from-filename):
Add test.
Suggested-by: Jens Lechtenboerger <lechten@wi.uni-muenster.de>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-09/msg00528.html>
* lisp/ox-html.el (org-html-src-block): Unless klipse is used, export
source code blocks as content of `pre' elements, and not as content of
`code' children of `pre' elements. Restores the previous way of
exporting source code blocks, and fixes the display of language
indicators while hovering over the blocks in the exported HTML file,
when klipse is not used.
(org-html-keep-old-src): Remove it. Not needed because it is now the
default, unless klipse is used.
Emacs's bc511a64f6d made tree-wide changes to prefer https to http.
For Org, this resulted in the header of every lisp/*.el file being
changed. Make the same changes in lisp/*.el files that were added
since Org version 9.0.10 (the last version that was synced with
Emacs).
* lisp/ob-tangle.el (org-babel-tangle-publish): Port to new copy-file
behavior.
Adjust ob-tangle to new copy-file behavior
74b8615fcceba7b92c4938e1bcc92015f10ae899
Paul Eggert
Sun Sep 10 22:31:23 2017 -0700
* lisp/org.el (org-buffer-property-keys): Remove optional argument
IGNORE-MALFORMED.
* lisp/org-pcomplete.el (pcomplete/org-mode/prop): Update call to
previous function.
* testing/lisp/test-org.el (test-org/buffer-property-keys): Remove
a test.
More often than not, the question just gets in the way. Use `M-x
org-lint' instead.
* lisp/ob-scheme.el (org-babel-scheme-execute-with-geiser): Return
"#<void>" or "#<unspecified>" when the REPL says so.
* testing/lisp/test-ob-scheme.el (test-ob-scheme/unspecified): New
test.
(test-ob-scheme/prologue): Fix tests.
Reported-by: Lawrence Bottorff <borgauf@gmail.com>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-09/msg00346.html>
* lisp/org-colview.el (org-columns-summary-types): Allow new format.
(org-columns--summarize): Update to new summary type format.
(org-columns--collect): New function.
(org-columns--compute-spec): Apply changes.
* testing/lisp/test-org-colview.el (test-org-colview/columns-summary):
Add test.
In addition to (LABEL . SUMMARIZE), org-columns-summary-types now
accepts (LABEL SUMMARIZE COLLECT) entries. The new COLLECT function is
called with one argument, the property being summarized.
TINYCHANGE
* lisp/org-capture.el: (org-capture-place-entry) Ensure that level is
set to 1 (i.e., the top level) if there is no headline target
defined. Otherwise, captured items are improperly nested by context.
* lisp/org.el (org-insert-link): Simplify so that description is only
prompted for once, if auto-desc is not set, and takes as its default
value, in order, default-description, the return value of
org-make-link-description-function (if the variable is non-nil), and
the current desc. Update the docstring to reflect that
default-description takes precedence over
org-make-link-description-function.
(org-make-link-description-function): Remove from docstring the
statement that if the variable is nil, then the link will be used as
the default description. This is undesirable, and was not in any case
implemented.
* lisp/ob-scheme.el (org-babel-scheme-execute-with-geiser): Use
Geiser's explicit 'retort' object, instead of catching and parsing
an expected Emacs message (which for me is in any case overwritten
by a following "Mark set" message); this also means we don't need
the with-output-to-string approach for getting 'output' results.
Also 'let' Geiser variables so as to avoid popping up the REPL
and *Geiser dbg* buffers.
* lisp/org.el (customize-package-emacs-version-alist): Add entries for
all existing ":package-version" values, and remove entries for
versions that aren't used as ":package-version" values.
Note that this alist has a limited effect because we specify
":version" in almost all of our defcustoms. Two functions make use of
this alist: describe-variable-custom-version-info and
customize-changed-options. The former only looks at the alist if
:version isn't specified, and the latter only looks at :version if an
entry for :package-version isn't found in the alist.
We should consider removing the defcustom :version specifications so
that the package-version->version mapping only needs to be maintained
in one place.
* lisp/org-duration.el (org-duration-to-minutes): Accept the empty
string.
* testing/lisp/test-org-duration.el (test-org-duration/to-minutes):
Add test.
For backward compatibility with `org-duration-string-to-minutes'
accept the empty string as a duration.
* lisp/org-table.el (org-table--align-field): New function.
(org-table-align): Use new function. Refactor code.
(org-table-justify-field-maybe): Use new function.
(org-table-get-remote-range): Remove duplicate bindings.
* doc/org.texi (Column width and alignment): Remove footnote.
* testing/lisp/test-org-table.el (test-org-table/align): New test.
* lisp/org-table.el (org-table-shrink): New function.
* lisp/org.el (org-startup-align-all-tables): Update docstring.
(org-startup-shrink-all-tables): New variable.
(org-mode): Use new function and new variable.
* lisp/org-archive.el (org-archive-subtree): Update todo statistics
when calling `org-archive-subtree'.
(org-archive-to-archive-sibling): Update cookie statistics when
calling `org-archive-to-archive-sibling'.
* testing/lisp/test-org-archive.el: New file.
This can be disabled by setting `org-provide-todo-statistics' to nil.
* lisp/ob-sqlite.el (org-babel-sqlite-expand-vars): Stop interfering
with the 'orgtbl-to-csv' default formatting.
* testing/lisp/test-ob-sqlite.el: New file.
The problem here was that ob-sqlite was providing a format to the
`orgtbl-to-csv' that actually overwrote the default format in that
function, and in the case where there were commas in the content of
the table, broke the table as argument mechanism.
TINYCHANGE
* lisp/org-agenda.el (org-agenda--insert-overriding-header): Use
propertize instead of org-add-props.
(org-agenda-list): Replace nested if with cond.
(org-todo-list): Replace mapc-lambda with dolist.
(org-todo-list): Fix bug by using window-width instead of frame-width.
* lisp/org-agenda.el (org-agenda--insert-overriding-header): Add macro.
(org-agenda-list)
(org-search-view)
(org-todo-list)
(org-tags-view): Use macro.
(org-agenda-overriding-header): Update docstring.
* etc/ORG-NEWS: Explain that header can be disabled with empty string.
Replace org-agenda-overriding-header tests in these four functions with
calls to a macro, eliminating the duplicate code. Also, disable the
header when the variable is set to the empty string.
* lisp/org.el (org-copy-visible): Rewrite function. Do not use
dubious `org-find-visible' and `org-find-invisible'.
* testing/lisp/test-org.el (test-org/copy-visible): New test.
Reported-by: Gary Cheng <garycheng12@gmail.com>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00568.html>
* lisp/org-lint.el (org-lint-undefined-footnote-reference): Do not
warn when definition is inline.
* testing/lisp/test-org-lint.el (test-org-lint/undefined-footnote-reference):
Add tests.
Reported-by: Eric S Fraga <esflists@gmail.com>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00577.html>
* lisp/org-table.el (org-table-sort-lines): Fix regexp. Also test
durations.
* testing/lisp/test-org-table.el (test-org-table/sort-lines): Update
tests. Add a new one.
* lisp/ox-icalendar.el (org-icalendar-entry): Both properties now
optionally inherit, depending on value of
`org-use-property-inheritance'.
* doc/org.texi: Mention change.
* lisp/ox-icalendar.el (org-icalendar-entry): Look for a "TIMEZONE"
property.
(org-icalendar--vevent, org-icalendar--vtodo): Accept additional
timezone argument.
(org-icalendar-convert-timestamp): Change parameter name to "tz", and
accept a wider variety of values.
* doc/org.texi: Mention in manual.
* lisp/ox-org.el (org-org-publish-to-org):
* lisp/ox-html.el (org-html-htmlize-generate-css):
(org-html-fontify-code):
* lisp/org-agenda.el (org-agenda-write): Throw an error
requesting the user to install htmlize.el.
* doc/org.texi (Exporting agenda views, Literal examples):
Don’t assume htmlize.el is available.
You need to install it from https://github.com/hniksic/emacs-htmlize
See https://github.com/hniksic/emacs-htmlize/issues/7 for this issue.
* lisp/org.el (org-display-inline-images): Fix thinko in previous
commit. Also remove code related to nested links as this is no
longer possible in Org syntax.
* lisp/org-agenda.el (org-agenda-bulk-action): Fix the prefix argument
checks introduced by 4f578a3f7 to avoid inadvertently setting
org-agenda-schedule or org-agenda-deadline's time argument to ARG's
value when ARG is non-nil.
Reported-by: Julien Cubizolles <j.cubizolles@free.fr>
<https://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00263.html>
* lisp/ox-html.el (org-html--build-meta-info): Use an invisible
character "‎" (left-to-right mark) in the HTML title tags
instead of removing the title altogether (invalid HTML) or setting
the content of title tag to nothing (invalid HTML).
Discussion:
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00021.html>
* lisp/org-compat.el (org-decode-time): New function.
* lisp/org-clock.el (org-clock-get-sum-start): Use new function.
Emacs 24's `decode-time' doesn't accept two arguments.
* lisp/org-clock.el (org-clock-select-task): Remove `interactive'.
This function is not meant to be called interactively. Use
`org-clock-goto' with a prefix argument instead.
* lisp/org-compat.el (org-decode-time): New function.
* lisp/org-clock.el (org-clock-get-sum-start): Use new function.
Emacs 24's `decode-time' doesn't accept two arguments.
* lisp/ob-vala.el: Add support for the Vala language to Babel.
* testing/lisp/test-ob-vala.el: Add tests for ob-vala.el.
* doc/org.texi (Working with source code): Add Vala to the list of
supported languages.
* lisp/org-agenda.el (org-agenda--mark-blocked-entry): Always return
the entry passed to `org-agenda--mark-blocked-entry' (previously
returned nil if entry did not have todo-state text property).
* lisp/org.el (org-clone-local-variables): Prevent errors that could
happen when trying to set local variables that cannot be set,
e.g. `enable-multibyte-characters'.
* lisp/org-capture.el (org-capture-templates): Make explicit that the time
stamp aware %-escapes are influenced by `org-capture-use-agenda-date'.
TINYCHANGE
* lisp/org.el (org-emphasis-regexp-components): Allow emphasis markers
after an hyphen.
(org-do-emphasis-faces): Do not strike-through table hlines.
Hypen is already allowed after emphasis markers. This allows one to
write, e.g., 2017-*09*-27.
* lisp/ob-C.el (org-babel-C-expand-C): Add a :namespaces export option
to C++ org babel blocks. Namespaces specified here will be added to
the file in the format 'using namespace %s;'. Multiple namespaces
can be specified, separated by spaces.
TINYCHANGE
* lisp/org.el (org-split-string): Move the function...
* lisp/org-macs.el (org-split-string): ... here. Also clarify
docstring with regards to `split-string'.
* lisp/org-colview.el (org-columns-overlays):
(org-columns-begin-marker):
(org-columns-top-level-marker): Make variables buffer local.
(org-columns-remove-overlays): Assume columns view are to be removed
in current buffer.
(org-columns-edit-allowed): Small refactoring. Raise an error when
called although no columns view is active in current buffer.
(org-columns-goto-top-level):
(org-columns):
(org-agenda-columns): Do not assume `org-columns-begin-marker' and
`org-columns-top-level-marker' are markers.
(org-columns-store-format):
(org-columns-redo): Skip if no columns view is current active.
(org-agenda-colview-compute): Do not let-bind
`org-columns-begin-marker' and `org-columns-top-level-marker'.
* lisp/org-mobile.el (org-mobile-encrypt-file):
(org-mobile-decrypt-file): Fix the message digest as MD5 for
compatibility across OpenSSL versions.
OpenSSL switched to using SHA256 by default for symmetric encryption
in version 1.1. Unfortunately that means that newer versions of the
openssl command line tool can not decrypt encrypted org-mobile files
without the '-md md5' option. This commit changes the shell commands
in org-mobile-encrypt-file and org-mobile-decrypt-file to explicitly
specify MD5 as the hash digest.
TINYCHANGE
* lisp/ob-scheme.el (org-babel-scheme-null-to): New variable.
(org-babel-scheme--table-or-string): New function.
(org-babel-execute-src-block): Changed to allow the return of a table
for the output.
(org-babel-expand-body:scheme) Add :prologue param support.
TINYCHANGE
* lisp/org.el (org-cycle-hide-drawers): Don't check whether STATE is
`contents' within the `when' body because the `when' condition will
not pass in this case.
* org-agenda.el (org-agenda-filter-by-tag): Pass t for the
require-match argument of completing-read because the collection
includes all valid tags.
In addition to preventing a user from filtering on a value that
doesn't match any entries, this makes the default Emacs completion
more convenient because a tag can be selected by entering its unique
prefix.
Composite agenda views could not separately specify whether to dim
blocked tasks.
* lisp/org-agenda.el (org-agenda--mark-blocked-entry): New function.
(org-agenda-dim-blocked-tasks): Modified to work with text properties
set by org-agenda--marked-blocked-entry.
* lisp/org-capture.el (org-capture-fill-template): Fix link returned
by %K. Also, both %k and %K should be expanded as strings even when
there is no clocking data.
Reported-by: Michal Politowski <mpol@meep.pl>
* lisp/org-agenda.el (org-agenda-time-grid): Users may now customize
the string to display after the time in the agenda. The order of
items was updated to reflect the order that they are displayed in the
agenda.
TINYCHANGE
* lisp/org-clock (org-clocktable-steps): Fix :tstart :tend parsing
with time zones.
The regression was introduced in 112c5ba479.
Reported-by: Dale Sedivec <dale@codefu.org>
* lisp/ox-md.el (org-md-link): Add mailto and irc to links that pass
their types through to markdown export
See: https://github.com/larstvei/ox-gfm/issues/17 for an external
bug report
TINYCHANGE
* lisp/org.el (org-create-formula-image): Use back-quote + single
quote to get the correct rendering of curved quotes.
Message displayed before this fix: "Please adjust ’imagemagick’ .."
Message displayed after this fix: "Please adjust ‘imagemagick’ .."
The effect of this fix is visible on emacs 25.1 and newer (See Emacs
NEWS).
* lisp/org.el (org-time-string-to-time): Remove optional POS and
BUFFER arguments. Accept new optional ZONE argument.
(org-time-string-to-seconds): Accept optional ZONE argument.
(org-check-before-date):
(org-check-after-date):
(org-check-dates-range):
(org-goto-calendar):
* lisp/ob-gnuplot.el (org-time-string-to-time):
* lisp/org-agenda.el (org-agenda-get-blocks):
* lisp/org-clock.el (org-clock-timestamps-change):
* lisp/org-list.el (org-time-string-to-seconds): Use UTC for time
difference and time comparison.
* testing/lisp/test-org-clock.el (org-test-clock-create-clock): Use
UTC for time differences.
* org.el (org-activate-dates): Change `org-activate-dates' to activate
custom timestamps for both dates in date ranges. Formerly, only the
second date would be activated. The reason was a misplaced
`if'. Replaced it with `when'. Also added doc comments.
TINYCHANGE
* lisp/org.el (org-check-before-invisible-edit): Fix "Before first
heading" error.
Invisible characters can come from overlays and text properties. The
current implementation tries to remove outline overlays, even though
it may be something else.
Reported-by: John Kitchin <jkitchin@andrew.cmu.edu>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-06/msg00365.html>
lisp/org-protocol.el (org-protocol-project-alist): Date-URL is added
as example.
(org-protocol-open-source): First match is processed in rewrite.
testing/lisp/test-org-protocol.el (test-org-protocol/org-protocol-open-source):
Configuration displaying a date-style URL is added.
TINYCHANGE
* lisp/org-element.el (org-element-latex-fragment-parser): Also check
border character right after opening "$" sign.
* testing/lisp/test-org-element.el (test-org-element/latex-fragment-parser):
Add tests.
Reported-by: thomas <thomas@friendlyvillagers.com>
<http://permalink.gmane.org/gmane.emacs.orgmode/114285>
* lisp/org.el (org-todo): Display state change message when headline
is not visible, reversing unintentional modification from dd17e9d29.
Prior to dd17e9d29 (2014-05-31), a message was displayed when changing
the state of a headline that was *not* visible, helping the user know
what the new state was even though the headline was off the screen.
While extending this code, dd17e9d29 unintentionally reversed the
visibility check, resulting in the message only being shown when the
headline is visible.
Reported-by: Russell Adams <RLAdams@AdamsInfoServ.Com>
<https://lists.gnu.org/archive/html/emacs-orgmode/2017-06/msg00442.html>
* lisp/ox-texinfo.el (org-texinfo-classes): Change default value and
structure.
(org-texinfo--structuring-command): New function.
(org-texinfo-headline): Use new function.
The new structure handles properly appendices at sub-levels.
* lisp/org.el (org-open-at-point): Also open links in example blocks
and diary-sexps.
* testing/lisp/test-org.el (test-org/open-at-point/keyword):
(test-org/open-at-point/property):
(test-org/open-at-point/comment): Add tests.
Reported-by: Dieter Faulbaum <Dieter.Faulbaum@helmholtz-berlin.de>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-06/msg00277.html>
* lisp/org-clock.el (org-clock-out):
(org-clock-sum):
(org-clocktable-steps):
(org-clock-update-time-maybe): Use UTC to compute time differences.
* testing/lisp/test-org-clock.el (test-org-clock/clocktable/scope):
Update test.
* doc/org.texi (Info directory file): Fix node name.
(Headings and sectioning structure): Document location of text before
first headline.
(A Texinfo example): Update example.
* lisp/ox-texinfo.el (org-texinfo-template): Handle contents of very
first section.
(org-texinfo-section): Ignore very first section.
According to Texinfo specifications, Top node contents should not
appear in printed output. Move it near "@top" command, within
"@ifnottex".
* lisp/org-indent.el (org-indent--text-line-prefixes):
(org-indent--heading-line-prefixes):
(org-indent--inlinetask-line-prefixes): New variables.
(org-indent--compute-prefixes): New function.
(org-indent-mode): Use new function.
(org-indent-set-line-properties): Use new variables. Also prevent
regular lines from being prefixed with stars.
Reported-by: Forrest Sedgwick <fgsedgwick@gmail.com>
<http://lists.gnu.org/archive/html/emacs-orgmode/2017-06/msg00341.html>
* lisp/ox-texinfo.el (org-texinfo-keyword): Index keywords are
specific to Texinfo back-end, so they expect regular Texinfo code.
* doc/org.texi (Indices): Update documentation.
* lisp/org-macro.el (org-macro--counter-increment): Rename the
optional arg RESET to ACTION, as now that action can mean setting,
resetting or even holding the specified counter. ACTION set to
"-" will hold the previous value of the counter. White-space is
now trimmed from the NAME arg too.
* doc/org.texi (Macro replacement): Document the new hold action.
* testing/lisp/test-org-macro.el (test-org-macro/n): Add new tests for
the hold action.
* lisp/ox-texinfo.el (org-texinfo-table-default-markup): Rename from
`org-texinfo-def-table-markup'. Set default value to the neutral
"@asis".
(org-texinfo-plain-list): Use new name.
* lisp/org-compat.el (org-texinfo-def-table-markup): Mark as obsolete.
* doc/org.texi (Publishing options): Document change.
* lisp/org-table.el (org-table-duration-custom-format): Add new
HH:MM format.
(org-table-duration-hour-zero-padding): New option.
(org-table-eval-formula): Select second-less format if
requested.
(org-table-time-seconds-to-string): Implement formats without
seconds and without zero-padding for hours.
* testing/lisp/test-org-table.el (test-org-table/duration):
New test for second-less durations.
* doc/org.texi (Formula syntax for Calc)
(Durations and time values): Document the U mode switch.
* lisp/org.el (org--file-cache): New variable.
(org-reset-file-cache):
(org-file-url-p): New function.
(org-mode-restart): Use new function.
* lisp/org.el (org-file-contents): Allow the FILE argument to be a
URL. If the URL contents are already cached, return the cache
contents, else download the file and return contents of that. The
file is automatically cached each time it is downloaded. Add a new
optional argument NOCACHE. If this is non-nil, the URL is always
downloaded afresh. Use `org--file-cache' and `org-file-url-p'.
* lisp/org.el (org-edit-special): Do not allow editing the "file" if a
URL is specified for the "#+SETUPFILE".
* lisp/ox.el (org-export--list-bound-variables)
(org-export--prepare-file-contents):
* lisp/org-macro.el (org-macro--collect-macros) : Adapt to the
possibility that the input to `org-file-contents' can be a URL too.
* doc/org.texi (Export settings, In-buffer settings)
(The very busy C-c C-c key): Mention that #+SETUPFILE keyword can now
take a URL as a value, and that C-c C-c on the #+SETUPFILE line will
clear the org file cache.
* testing/lisp/test-org.el (test-org/org-file-contents-url)
(test-org/org-file-contents-file): Add tests for org-file-contents.
* testing/lisp/test-ox.el (test-org-export/get-inbuffer-options): Add
test for reading setupfile specified via a URL.
* lisp/ob-shell.el (org-babel--variable-assignments:bash): Do not
error when value is a list.
* testing/lisp/test-ob-shell.el (ob-shell/simple-list): New test.
Reported-by: Keith Amidon <camalot@picnicpark.org>
<http://permalink.gmane.org/gmane.emacs.orgmode/113920>
* lisp/ox.el (org-export--install-footnote-definitions):
Provide :raw-value property when building a virtual footnote
section, as `org-export-search-cells' expects it.
* lisp/org-src.el (org-edit-footnote-reference): Do not collapse
footnote definitions after editing remotely one of them.
* testing/lisp/test-org-src.el (test-org-src/footnote-references): New
test.
* lisp/ox-texinfo.el (org-texinfo-text-markup-alist): Change default
value.
(org-texinfo--text-markup): Handle protected @samp{...} command.
@samp{} is more versatile than @verb{} as it can belong to more
commands. So, it makes more sense as a default value.
* lisp/ox-texinfo.el (org-texinfo--sanitize-title): New function.
(org-texinfo--get-node): Use new function. Tiny improvement over
aesthetics of duplicate node names.
(org-texinfo--sanitize-node): Fix docstring.
(org-texinfo-headline): Use new function
(org-texinfo--@ref): Remove colons and protect commas in description.
(org-texinfo-link): Use new function. Better handling of targets
within headings.
(org-texinfo--format-entries): Use new function. Remove colons from
menu entries.
* lisp/ox-texinfo.el (org-texinfo--@ref): New function.
(org-texinfo-link): Use new function.
When node name doesn't correspond to actual title, use the third @ref
argument to ensure the node name is not printed nor displayed.
* lisp/org-macro.el (org-macro-replace-all): Expand macros only within
narrowed part of buffer.
* testing/lisp/test-org-macro.el (test-org/macro-replace-all): Update
test.
Expanding macros outside in the whole buffer could make sense, e.g.,
if a macro expands to some Babel code, which, in turn, is evaluated
prior to export. However, by principle of least surprise, it is
better to limit expansion to current accessible part of the buffer.
* lisp/org-gnus.el (org-gnus-nnimap-query-article-no-from-file):
Remove variable.
* lisp/org-gnus.el (org-gnus-nnimap-cached-article-number): Remove
function.
(org-gnus-follow-link): Apply changes. Small refactoring.
`org-gnus-nnimap-cached-article-number' has been removed from Gnus
since 2010 and is not present in Emacs versions supported by Org.
* lisp/org-capture.el (org-capture-place-entry): Make sure planning
line is visible when added in a narrowed capture buffer. Refactor
code.
Reported-by: Detlef Steuer <steuer@unibw-hamburg.de>
<http://permalink.gmane.org/gmane.emacs.orgmode/113756>