Next: Tables in arbitrary syntax, Previous: Adding export back-ends, Up: Hacking [Contents][Index]
Org has several commands that act differently depending on context. The most important example is the C-c C-c (see The very busy C-c C-c key). Also the M-cursor and M-S-cursor keys have this property.
Add-ons can tap into this functionality by providing a function that detects
special context for that add-on and executes functionality appropriate for
the context. Here is an example from Dan Davison’s org-R.el which
allows you to evaluate commands based on the R programming language
180. For this
package, special contexts are lines that start with #+R: or
#+RR:.
(defun org-R-apply-maybe ()
"Detect if this is context for org-R and execute R commands."
(if (save-excursion
(beginning-of-line 1)
(looking-at "#\\+RR?:"))
(progn (call-interactively 'org-R-apply)
t) ;; to signal that we took action
nil)) ;; to signal that we did not
(add-hook 'org-ctrl-c-ctrl-c-hook 'org-R-apply-maybe)
The function first checks if the cursor is in such a line. If that is the
case, org-R-apply is called and the function returns t to
signal that action was taken, and C-c C-c will stop looking for other
contexts. If the function finds it should do nothing locally, it returns
nil so that other, similar functions can have a try.
org-R.el has been replaced by the Org mode functionality described in Working With Source Code and is now obsolete.