* lisp/ob.el (org-babel-map-src-blocks): Don't pollute symbol space.
(org-babel-map-inline-src-blocks): Don't pollute symbol space.
(org-babel-map-call-lines): Don't pollute symbol space.
(org-babel-map-executables): Map over *all* executable Org-mode
elements.
(org-babel-execute-buffer): Execute elements in buffer order instead
of arbitrarily.
* lisp/ob.el (org-babel-results-keyword): New user-configurable
results keyword.
(org-babel-where-is-src-block-result): Use new user-configurable
results keyword.
* lisp/ob-exp.el (org-babel-exp-src-block): Use `org-babel-noweb-p'.
(org-babel-exp-inline-src-blocks): Use `org-babel-noweb-p'.
* lisp/ob-tangle.el (org-babel-tangle-collect-blocks): Use
`org-babel-noweb-p'.
* lisp/ob.el (org-babel-execute-src-block): Use `org-babel-noweb-p'.
(org-babel-expand-src-block): Use `org-babel-noweb-p'.
(org-babel-load-in-session): Use `org-babel-noweb-p'.
(org-babel-merge-params): Use `org-babel-noweb-p'.
(org-babel-noweb-p): New function used to determine if noweb
expansion should be carried out in a given context.
* lisp/ob.el (org-babel-common-header-args-w-values): Add the new
header argument name.
(org-babel-insert-result): Respect the value of the :wrap header
argument when inserting results.
(org-babel-result-end): Find the end of arbitrarily named result
blocks.
Thanks to Martyn Jago for the test case
* lisp/ob.el (org-babel-balanced-split): Explicit checking if list
before calling member.
* testing/lisp/test-ob.el (test-ob/org-babel-balanced-split): Testing
the new Emacs22-proof behavior.
Thanks to Martyn Jago for the test case
* lisp/ob.el (org-babel-balanced-split): Explicit checking if list
before calling member.
* testing/lisp/test-ob.el (test-ob/org-babel-balanced-split): Testing
the new Emacs22-proof behavior.
* lisp/ob.el (org-babel-expand-noweb-references): Rather than using a
pure regexp solution to resolve noweb references, actually check the
information of every code block in the buffer. This will cause a
slowdown in noweb reference expansion, but is necessary for correct
behavior.
* lisp/ob.el (*org-babel-use-quick-and-dirty-noweb-expansion*):
Controls the method in which noweb references are expanded.
(org-babel-expand-noweb-references): Bring back the option for
regexp-based noweb expansion.
* lisp/ob.el (org-babel-expand-noweb-references): Rather than using a
pure regexp solution to resolve noweb references, actually check the
information of every code block in the buffer. This will cause a
slowdown in noweb reference expansion, but is necessary for correct
behavior.
* org.el (org-block-regexp)
(org-heading-keyword-regexp-format)
(org-heading-keyword-maybe-regexp-format): Move up to keep the
byte-compiler happy.
* org-special-blocks.el (org-html): Require 'org-html.
(org-open-par, org-close-par-maybe): Declare as functions.
* ob.el (org-reduce): Declare as a function.
(org-current-export-file): Declare.
* ob-ref.el (org-babel-update-intermediate): Make a defvar.
* lisp/ob.el (org-babel-expand-noweb-references): Fixed regexp.
* testing/lisp/test-ob.el (test-ob/noweb-expansion): Test both named
code block and noweb-ref header argument references.
Given that arbitrary regions may already be hidden using a drawer the
ability to hide any named entity is redundant. In addition the name
based hiding does not mix well with other keywords.
Thanks to Nicolas Goaziou for raising this issue and suggesting the
removal of #+name based hiding.
* lisp/ob.el (org-babel-expand-noweb-references): Rather than collect
the info from *every* block in the current buffer, simply regexp
search for those blocks which appear to match the continued source
name.
* lisp/ob.el (org-babel-insert-result): Do not examplize wrapped
scalar results, simply wrap them.
(org-babel-result-end): Find the end of results wrapped in a RESULTS
drawer.
* doc/org.texi (eval): Documenting the full range of :eval header
argument values.
* lisp/ob.el (org-babel-confirm-evaluate): Adding support for new
range of :eval header arguments.
* testing/lisp/test-ob.el (test-ob/eval-header-argument): Testing the
:eval header argument.
* doc/org.texi (eval): Documentation of the new :eval option.
* lisp/ob.el (org-babel-confirm-evaluate): Inhibit evaluation during
export when eval is set to "non-export".
* lisp/ob.el (org-babel-join-splits-near-ch): Rejoins a list of a
split string when a character appears on either side of the split.
(org-babel-parse-multiple-vars): Rejoin splits around "=" signs.
* lisp/ob.el (org-babel-named-src-block-regexp-for-name): Ensure that
partial names are not matched.
(org-babel-named-data-regexp-for-name): Ensure that partial names
are not matched.
* testing/lisp/test-ob.el (test-ob/do-not-resolve-to-partial-names-data):
Test to ensure that partial names are not matched.
* lisp/ob-ref.el (org-babel-ref-resolve): Search for named code blocks
before named data.
* lisp/ob.el (org-babel-named-data-regexp-for-name): New function for
finding named data.
* testing/lisp/test-ob.el (test-ob/resolve-code-blocks-before-data-blocks):
Test to ensure that named references are resolved in the correct
order.
* lisp/ob.el (org-babel-find-named-result): Downcase "name" before comparison.
* testing/lisp/test-ob.el (test-ob/does-not-replace-a-block-with-the-results):
Test that named code blocks are replaced with their results.
* lisp/ob-exp.el (org-babel-in-example-or-verbatim): Some valid
execution contexts (e.g., call lines) look like commented lines.
* lisp/ob.el (org-babel-get-src-block-info): Empty match string
doesn't count.
(org-babel-process-params): Always process parameters, even if you
don't to table splitting.
* testing/lisp/test-ob-C.el (ob-C/table): Ignore failures for this C
test.
* testing/lisp/test-ob-fortran.el (ob-fortran/input-var): Ignore
failures for this fortran test.
This results in the following behavior.
#+property: var foo=1
#+property: var+ bar=2
#+begin_src emacs-lisp
(+ foo bar)
#+end_src
#+results:
: 3
#+begin_src emacs-lisp
(org-entry-get (point) "var" t)
#+end_src
#+results:
: foo=1 bar=2
* overwriting a file-wide property
:PROPERTIES:
:var: foo=7
:END:
#+begin_src emacs-lisp
foo
#+end_src
#+results:
: 7
#+begin_src emacs-lisp
(org-entry-get (point) "var" t)
#+end_src
#+results:
: foo=7
* appending to a file-wide property
:PROPERTIES:
:var+: baz=3
:END:
#+begin_src emacs-lisp
(+ foo bar baz)
#+end_src
#+results:
: 6
#+begin_src emacs-lisp
(org-entry-get (point) "var" t)
#+end_src
#+results:
: foo=1 bar=2 baz=3
* lisp/org.el (org-update-property-plist): Updates a given property
list with a property name and a property value.
(org-set-regexps-and-options): Use org-update-property-plist.
(org-entry-get): Use org-update-property-plist.
* testing/examples/property-inheritance.org: Example file for testing
appending property behavior.
* testing/lisp/test-property-inheritance.el: Tests of appending
property behavior.
* lisp/ob.el (org-babel-balanced-split): Allow splitting on single
characters as well as groups of two characters.
(org-babel-parse-multiple-vars): Split variables on single spaces.
Nick Dokos <nicholas.dokos@hp.com> writes:
> Eric Schulte <schulte.eric@gmail.com> wrote:
>
>> The attached updated patch fixes a bug in the original.
>>
>
> Minor problem in applying:
>
> ,----
> | $ git apply ~/Mail/inbox/724
> | /home/nick/Mail/inbox/724:671: trailing whitespace.
> | #+name:
> | /home/nick/Mail/inbox/724:599: new blank line at EOF.
> | +
> | warning: 2 lines add whitespace errors.
> `----
The attached version fixes these issues, Thanks -- Eric
>From 0e43d59ee8d46a63f86780a502de726271bc39de Mon Sep 17 00:00:00 2001
From: Eric Schulte <schulte.eric@gmail.com>
Date: Fri, 28 Oct 2011 10:44:21 -0600
Subject: [PATCH] removing code block, results and call-line synonyms -- BREAKING CHANGE
Following a round of on-list discussion many code block synonyms have
been removed, moving forward the following syntax is valid.
- call lines are specified with #+call:
- code blocks are named with #+name:
- results are named with #+name:, however results generated by a code
block may still be labeled with #+results:, and tables named with
#+tblname: will be considered to be named results
The following function may be used to update an existing Org-mode
buffer to the new syntax.
(defun update-org-buffer ()
"Update an Org-mode buffer to the new data, code block and call line syntax."
(interactive)
(save-excursion
(flet ((to-re (lst) (concat "^[ \t]*#\\+" (regexp-opt lst t)
"\\(\\[\\([[:alnum:]]+\\)\\]\\)?\\:[ \t]*"))
(update (re new)
(goto-char (point-min))
(while (re-search-forward re nil t)
(replace-match new nil nil nil 1))))
(let ((old-re (to-re '("RESULTS" "DATA" "SRCNAME" "SOURCE")))
(lob-re (to-re '("LOB")))
(case-fold-search t))
(update old-re "name")
(update lob-re "call")))))
Note: If an old version of Org-mode (e.g., the one shipped with Emacs)
is installed on your system many of the important variables will
be pre-defined with a defvar and *will not* have their values
automatically updated, these include the following.
- org-babel-data-names
- org-babel-result-regexp
- org-babel-src-block-regexp
- org-babel-src-name-regexp
- org-babel-src-name-w-name-regexp
It may be necessary to either remove the source code of older
versions of Org-mode, or to explicitly evaluate the ob.el file.
* lisp/ob-exp.el (org-exp-res/src-name-cleanup): Updated
Documentation.
* lisp/ob-lob.el (org-babel-block-lob-one-liner-regexp): Updated
regular expression.
(org-babel-inline-lob-one-liner-regexp): Updated regular expression.
* lisp/ob-ref.el (org-babel-ref-resolve): Notice when something that
looks like a data results may actually be a code block.
* lisp/ob-table.el: Updated documentation.
* lisp/ob.el (org-babel-src-name-regexp): Simplified regexp.
(org-babel-get-src-block-info): Updated match strings.
(org-babel-data-names): Simplified acceptable names.
(org-babel-find-named-block): Indentation.
(org-babel-find-named-result): Updated to not return a code block as
a result.
* lisp/org.el (org-fontify-meta-lines-and-blocks-1): Removing
references to old syntactic elements.
(org-additional-option-like-keywords): Removing references to old
syntactic elements.
* contrib/babel/library-of-babel.org: Updated to make use of the new
syntax.
* testing/examples/babel-dangerous.org: Updated to make use of the new
syntax.
* testing/examples/babel.org: Updated to make use of the new syntax.
* testing/examples/ob-awk-test.org: Updated to make use of the new
syntax.
* testing/examples/ob-fortran-test.org: Updated to make use of the new
syntax.
* testing/lisp/test-ob.el: Removed two bad tests which tested the
literal values of old regular expressions rather than their
behavior.
* lisp/ob-lob.el (org-babel-map-call-lines): Allow mapping of code
over all call lines in a buffer.
* lisp/ob.el (org-babel-execute-buffer): Execute call lines when
executing an entire buffer.
* lisp/ob.el (org-babel-balanced-split): Balance both [] and ()
groupings.
(org-babel-parse-header-arguments): Be sure to replace removed ":"
characters.
* lisp/ob.el (org-babel-params-from-properties): Now splits multiple
var arguments behind a single ":var".
(org-babel-balanced-split): Separated balanced splitting of strings
out into a new function.
(org-babel-parse-multiple-vars): Splits multiple var arguments
behind a single ":var".
* lisp/ob.el (org-babel-params-from-buffer): Removing #+BABEL: lines
in favor of general #+PROPERTIES: lines.
* doc/org.texi (Buffer-wide header arguments): Removing documentation
of the defunct #+BABEL: structure.
Thanks to Nick Dokos for suggesting this fix
* lisp/ob.el (org-babel-disassemble-tables): Fix multi-table bug in
code block colname and rowname handling.
* lisp/ob.el (org-babel-common-header-args-w-values): New variable to
hold common header arguments and their default values.
(org-babel-header-arg-names): Redefined using the new common header
arg variable.
(org-babel-insert-header-arg): New function to help when inserting
header arguments.
* lisp/ob-exp.el (org-babel-exp-inline-src-blocks): Save match data
around `org-babel-exp-do-export' which now searches in this case.
(org-babel-exp-results): Position the point in the inline source
block during export evaluation.
* lisp/ob.el (org-babel-insert-result): More readable code.
Also remove blank lines before the ";;; org*el ends here" declarations.
Having a "Version" header forced us to update every file when releasing a
new version of Org; it also forced us to update every file when merging Org
with Emacs trunk, thus cluttering the diffs between the previously merged
version and the new one with useless information.
Glenn Morris suggested this in emacs-devel:
http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00322.html
* lisp/ob-keys.el (org-babel-key-bindings): Bound to C-c C-v k.
* lisp/ob.el (org-babel-map-regexp): New generic mapping macro.
(org-babel-map-inline-src-blocks): Rewritten to use new macro.
(org-babel-kill-results): Remove some or all results in the current
file.
* lisp/ob-lob.el (org-babel-map-call-lines): Map over all lob call
lines in the current file.
* doc/orgcard.tex: Document new keybinding.
* lisp/ob.el (org-babel-view-src-block-info): New function to inspect code blocks.
* lisp/ob-keys.el (org-babel-key-bindings): Key bindings for org-babel-view-src-block-info.
* doc/orgcard.tex: Documentation of new Babel function.
* lisp/ob-exp.el (org-babel-exp-results): Resolve hashes in the
current (not original) file buffer.
* lisp/ob.el (org-babel-current-result-hash): More informative name,
and remove useless optional argument.
* ob.el (org-babel-strip-protective-commas): Return `nil'
instead of an error if no argument is given.
(org-babel-parse-src-block-match): Make sure body is defined
in the let construct.
* lisp/ob-awk.el (org-babel-execute:awk): Use "verbatim" as synonym
for "scalar".
* lisp/ob-sh.el (org-babel-sh-evaluate): Use "verbatim" as synonym for
"scalar".
* lisp/ob-sqlite.el (org-babel-execute:sqlite): Use "verbatim" as
synonym for "scalar".
* lisp/ob.el (org-babel-merge-params): Use "verbatim" as synonym for
"scalar".
* lisp/ob.el (org-babel-sha1-hash): Adding optional argument KIND to
all org-called-interactively-p function invocations.
* lisp/org-agenda.el (org-agenda-redo): Adding optional argument KIND to
all org-called-interactively-p function invocations.
(org-agenda-show-1): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-agenda-set-tags): Adding optional argument KIND to all
org-called-interactively-p function invocations.
* lisp/org-ascii.el (org-export-as-latin1): Adding optional argument
KIND to all org-called-interactively-p function invocations.
(org-export-as-latin1-to-buffer): Adding optional argument KIND to
all org-called-interactively-p function invocations.
(org-export-as-utf8-to-buffer): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-export-region-as-ascii): Adding optional argument KIND to all
org-called-interactively-p function invocations.
* lisp/org-docbook.el (org-export-region-as-docbook): Adding optional
argument KIND to all org-called-interactively-p function
invocations.
* lisp/org-html.el (org-export-region-as-html): Adding optional
argument KIND to all org-called-interactively-p function
invocations.
* lisp/org-latex.el (org-export-region-as-latex): Adding optional
argument KIND to all org-called-interactively-p function
invocations.
* lisp/org-table.el (org-table-blank-field): Adding optional argument
KIND to all org-called-interactively-p function invocations.
(org-table-current-column): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-table-current-dline): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-table-sort-lines): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-table-sum): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-table-rotate-recalc-marks): Adding optional argument KIND to
all org-called-interactively-p function invocations.
(org-table-eval-formula): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(orgtbl-send-table): Adding optional argument KIND to all
org-called-interactively-p function invocations.
* lisp/org.el (org-mode): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-copy-subtree): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-paste-subtree): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-store-link): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-todo): Adding optional argument KIND to all
org-called-interactively-p function invocations.
(org-occur): Adding optional argument KIND to all
org-called-interactively-p function invocations.
Interactive-p is an obsolete function as of Emacs 23.2.
`org-called-interactively-p' takes care of the current (x)Emacs
version and use either `interactive-p' (for XEmacs and Emacs<23.2)
or `called-interactively-p'.
* lisp/ob-ref.el (org-babel-ref-goto-headline-id): Split out into its
own function.
(org-babel-ref-headline-body): Split out into its own function.
(org-babel-ref-resolve): Using new functions, and alignment.
* lisp/ob.el (org-babel-ref-goto-headline-id): Declare function.
(org-babel-ref-headline-body): Declare function.
(org-babel-expand-noweb-references): Now expands noweb references to
headlines during expansion.
* lisp/ob.el (org-babel-merge-params): Ensure variable parameters are
not reversed.
* lisp/ob-ref.el (org-babel-ref-split-args): Ensure variable
parameters are not reversed.
* lisp/ob-lob.el (org-babel-inline-lob-one-liner-regexp): Removing
this trailing space ensures that the insertion of the results looks
nice.
* lisp/ob.el (org-babel-insert-result): Insert inline lob line results
as inline results.
Now *all* code blocks which either are named `ref-name' or have the
:noweb-ref header argument value `ref-name' will have their bodies
concatenated when resolving the noweb reference <<ref-name>>.
* lisp/ob.el (org-babel-expand-noweb-references): Concatenating all
bodies with the appropriate name or :noweb-ref header argument.
* lisp/ob-R.el (ess-local-process-name): This variable wasn't known to
be defined.
* lisp/ob-lisp.el (org-babel-lisp-dir-fmt): This defcustom now has a
group specified.
* lisp/ob-tangle.el (org-bracket-link-regexp): This variable wasn't
known to be defined.
(org-babel-tangle-combine-named-blocks): Roll my own version of a
forbidden common lisp function.
* lisp/ob.el (org-babel-sha1-hash): Using a non-deprecated version of
called-interactively.
* lisp/ob.el (org-babel-sha1-hash): Don't modify info argument by
side-effect when sorting result-params list.
copy-sequence only does shallow copies, so if we're going to modify a
sub-list, we need to make sure we copy it first.
* lisp/ob.el (org-babel-result-regexp): Use non-shy group around
org-babel-data-names.
By default regexp-opt returns a shy group around its arguments. But
users of org-babel-result-regexp expect the third match-string to
contain the hash. With a shy group, the second match-string contains
the hash.
* doc/orgcard.tex: Adding line for org-babel-check-src-block.
* lisp/ob-keys.el (org-babel-key-bindings): Adding key sequence for
org-babel-check-src-block.
* lisp/ob.el (org-babel-expand-src-block): Fit within 80 cols.
(org-babel-edit-distance): Returns the edit distance of two strings.
(org-babel-check-src-block): Check a code block for errors.
* lisp/ob-ref.el (org-babel-ref-resolve): Using the new result regexp.
* lisp/ob.el (org-babel-data-names): Configurable list of names of data.
(org-babel-result-regexp): Using new results regexp.
* lisp/ob.el (org-babel-params-from-buffer): Now looking for header
arguments in #+Properties: as well as #+Babel:. Also, we're no
longer caching these results into a file local variable.
* lisp/ob-tangle.el (org-babel-spec-to-string): Check value of padline
on tangling, no longer use the now-removed variable
`org-babel-tangle-pad-newline'.
* lisp/ob.el (org-babel-header-arg-names): Add padline to the list of
header argument names.
(org-babel-default-header-args): Set the default value of padline to
"yes".
(org-babel-merge-params): Cleaned up the merge logic, added padline.
* doc/org.texi (padline): Documentation of the new padline header
argument.
* lisp/ob-exp.el (org-babel-exp-in-export-file): Now takes the
language as an argument.
(org-babel-exp-src-block): Explicitly pass language to
`org-babel-exp-in-export-file'.
(org-babel-exp-inline-src-blocks): Removed unused code.
(org-babel-exp-results): Explicitly pass language to
`org-babel-exp-in-export-file'.
* lisp/ob.el (org-babel-library-of-babel): declare variable
(org-babel-tangle-comment-links): declare function
* lisp/ob.el (org-babel-read-table): Inhibit lisp evaluation of values
when reading from tables.
(org-babel-read-list): Inhibit lisp evaluation of values when
reading from lists.
(org-babel-read): Add optional argument which can be used to inhibit
lisp evaluation of value.
* lisp/ob-ref.el (org-babel-ref-at-ref-p): Only try to read results as
a list if at the *beginning* of a list item.
* lisp/ob.el (org-babel-read-result): Only try to read results as a
list if at the *beginning* of a list item.
* lisp/ob.el (org-babel-read-list): Reading the value of a list has
been updated to reflect the new structure of org-mode lists in
elisp.
(org-babel-insert-result): Writing code block results to lists has
been updated to reflect the new list structure.
(org-babel-result-end): Remove a previous change to end-of-list
marker detection
* lisp/ob.el (org-babel-result-end): end position is end of current
sublist instead of bottom point, as results might be inserted in a
list themselves.
* lisp/org.el (org-skip-over-state-notes,org-store-log-note): use new
accessors.
* list/ob.el (org-babel-result-end): use new accessors.
* list/org-exp.el (org-export-mark-list-ending): use new accessors.
* lisp/ob.el (org-babel-src-block-names): Don't strip text properties from search hits
(org-babel-result-names): Don't strip text properties from search hits
* lisp/ob.el (org-babel-script-escape): Use `substring' comparison
instead of regexp matching
Workaround for regexp limitation, e.g.
(string-match
"^\\[.+\\]$"
(concat
"["
(mapconcat (lambda (i) "x") (number-sequence 1 33500) "")
"]"))
gives "Stack overflow in regexp matcher" in several current builds.
* lisp/org-src.el (org-edit-src-persistent-message): Change docstring.
(org-edit-src-code): Get rid of help message in echo area.
* lisp/ob.el (org-babel-do-in-edit-buffer): Do not pass 'quietly
argument to org-edit-src-code as this has been removed
* lisp/ob-exp.el (org-babel-exp-inline-src-blocks): Simplified
exportation of inline code blocks using normal code block execution
mechanism to insert results.
(org-babel-exp-results): Results exportation mechanism is unified
for both inline and regular code blocks.
* lisp/ob.el (org-babel-where-is-src-block-result): Returns the point
after an inline code block for inline code blocks.