org: Context-sensitive commands

 
 A.5 Context-sensitive commands
 ==============================
 
 Org has several commands that act differently depending on context.  The
 most important example is the ‘C-c C-c’ (SeeThe 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 (1).  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.
 
    ---------- Footnotes ----------
 
    (1) ‘org-R.el’ has been replaced by the Org mode functionality
 described in SeeWorking With Source Code and is now obsolete.