org: Setting Options

 
 10.6.3 Setting options for custom commands
 ------------------------------------------
 
 Org mode contains a number of variables regulating agenda construction
 and display.  The global variables define the behavior for all agenda
 commands, including the custom commands.  However, if you want to change
 some settings just for a single custom view, you can do so.  Setting
 options requires inserting a list of variable names and values at the
 right spot in ‘org-agenda-custom-commands’.  For example:
 
      (setq org-agenda-custom-commands
            '(("w" todo "WAITING"
               ((org-agenda-sorting-strategy '(priority-down))
                (org-agenda-prefix-format "  Mixed: ")))
              ("U" tags-tree "+boss-urgent"
               ((org-show-following-heading nil)
                (org-show-hierarchy-above nil)))
              ("N" search ""
               ((org-agenda-files '("~org/notes.org"))
                (org-agenda-text-search-extra-files nil)))))
 
 Now the ‘C-c a w’ command will sort the collected entries only by
 priority, and the prefix format is modified to just say ‘ Mixed: ’
 instead of giving the category of the entry.  The sparse tags tree of
 ‘C-c a U’ will now turn out ultra-compact, because neither the headline
 hierarchy above the match, nor the headline following the match will be
 shown.  The command ‘C-c a N’ will do a text search limited to only a
 single file.
 
    For command sets creating a block agenda,
 ‘org-agenda-custom-commands’ has two separate spots for setting options.
 You can add options that should be valid for just a single command in
 the set, and options that should be valid for all commands in the set.
 The former are just added to the command entry; the latter must come
 after the list of command entries.  Going back to the block agenda
 example (SeeBlock agenda), let’s change the sorting strategy for
 the ‘C-c a h’ commands to ‘priority-down’, but let’s sort the results
 for GARDEN tags query in the opposite order, ‘priority-up’.  This would
 look like this:
 
      (setq org-agenda-custom-commands
            '(("h" "Agenda and Home-related tasks"
               ((agenda)
                (tags-todo "home")
                (tags "garden"
                      ((org-agenda-sorting-strategy '(priority-up)))))
               ((org-agenda-sorting-strategy '(priority-down))))
              ("o" "Agenda and Office-related tasks"
               ((agenda)
                (tags-todo "work")
                (tags "office")))))
 
    As you see, the values and parentheses setting is a little complex.
 When in doubt, use the customize interface to set this variable—it fully
 supports its structure.  Just one caveat: when setting options in this
 interface, the _values_ are just Lisp expressions.  So if the value is a
 string, you need to add the double-quotes around the value yourself.
 
    To control whether an agenda command should be accessible from a
 specific context, you can customize
 ‘org-agenda-custom-commands-contexts’.  Let’s say for example that you
 have an agenda commands ‘"o"’ displaying a view that you only need when
 reading emails.  Then you would configure this option like this:
 
      (setq org-agenda-custom-commands-contexts
            '(("o" (in-mode . "message-mode"))))
 
    You can also tell that the command key ‘"o"’ should refer to another
 command key ‘"r"’.  In that case, add this command key like this:
 
      (setq org-agenda-custom-commands-contexts
            '(("o" "r" (in-mode . "message-mode"))))
 
    See the docstring of the variable for more information.