Browse Source

Release 4.52

Carsten Dominik 17 years ago
parent
commit
d790f20ba9
8 changed files with 366 additions and 160 deletions
  1. 162 106
      org
  2. 117 18
      org.el
  3. BIN
      org.pdf
  4. 84 34
      org.texi
  5. BIN
      orgcard.pdf
  6. 1 1
      orgcard.tex
  7. 1 1
      xemacs/README
  8. 1 0
      xemacs/noutline.el

+ 162 - 106
org

@@ -5,7 +5,7 @@ START-INFO-DIR-ENTRY
 * Org Mode: (org).      outline-based notes management and organizer
 * Org Mode: (org).      outline-based notes management and organizer
 END-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 
-   This manual is for Org-mode (version 4.51).
+   This manual is for Org-mode (version 4.52).
 
 
    Copyright (C) 2004, 2005, 2006 Free Software Foundation
    Copyright (C) 2004, 2005, 2006 Free Software Foundation
 
 
@@ -27,7 +27,7 @@ File: org,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)
 Org Mode Manual
 Org Mode Manual
 ***************
 ***************
 
 
-This manual is for Org-mode (version 4.51).
+This manual is for Org-mode (version 4.52).
 
 
    Copyright (C) 2004, 2005, 2006 Free Software Foundation
    Copyright (C) 2004, 2005, 2006 Free Software Foundation
 
 
@@ -2610,16 +2610,22 @@ special command for inserting tags:
 default this list is constructed dynamically, containing all tags
 default this list is constructed dynamically, containing all tags
 currently used in the buffer.  You may also globally specify a hard list
 currently used in the buffer.  You may also globally specify a hard list
 of tags with the variable `org-tag-alist'.  Finally you can set the
 of tags with the variable `org-tag-alist'.  Finally you can set the
-allowed tags for a given file with lines like
+default tags for a given file with lines like
 
 
      #+TAGS: @WORK @HOME @TENNISCLUB
      #+TAGS: @WORK @HOME @TENNISCLUB
      #+TAGS: Laptop Car PC Sailboat
      #+TAGS: Laptop Car PC Sailboat
 
 
-   The default support method is minibuffer completion.  However,
-Org-mode also implements a much better method: _fast tag selection_.
-This method allows to select and deselect tags with a single key per
-tag.  To function efficiently, you should assign unique keys to all
-tags.  This can be done globally with
+   If you have globally defined your preferred set of tags using the
+variable `org-tag-alist', but would like to use a dynamic tag list in a
+specific file: Just add an empty TAGS option line to that file:
+
+     #+TAGS:
+
+   The default support method for entering tags is minibuffer
+completion.  However, Org-mode also implements a much better method:
+_fast tag selection_.  This method allows to select and deselect tags
+with a single key per tag.  To function efficiently, you should assign
+unique keys to most tags.  This can be done globally with
 
 
      (setq org-tag-alist '(("@WORK" . ?w) ("@HOME" . ?h) ("Laptop" . ?l)))
      (setq org-tag-alist '(("@WORK" . ?w) ("@HOME" . ?h) ("Laptop" . ?l)))
 
 
@@ -2641,21 +2647,35 @@ to activate any changes.
    If at least one tag has a selection key, pressing `C-c C-c' will
    If at least one tag has a selection key, pressing `C-c C-c' will
 automatically present you with a special interface, listing inherited
 automatically present you with a special interface, listing inherited
 tags, the tags of the current headline, and a list of all legal tags
 tags, the tags of the current headline, and a list of all legal tags
-with corresponding keys(2).  Pressing keys for the tags will add or
-remove them from the list of tags in the current line.  Selecting a tag
-in a group of mutually exclusive tags will turn off any other tags from
-that group.  <SPC> clears all tags for this line, `RET' accepts the
-modified set, and `C-g' aborts without installing changes.  This method
-lets you assign tags to a headline with very few keys.  With the above
-setup, you could clear the current tags and set `@HOME', `Laptop' and
-`PC' tags with just the following keys: `C-c C-c <SPC> h l p <RET>'.
-Switching from `@HOME' to `@WORK' would be done with `C-c C-c w <RET>'.
-
-   What if you have globally defined your preferred set of tags using
-the variable `org-tag-alist', but would like to use a dynamic tag list
-in a specific file?  Just add an empty TAGS option line to that file:
+with corresponding keys(2).  In this interface, you can use the
+following keys:
 
 
-     #+TAGS:
+`a-z...'
+     Pressing keys assigned to tags will add or remove them from the
+     list of tags in the current line.  Selecting a tag in a group of
+     mutually exclusive tags will turn off any other tags from that
+     group.  
+
+`<TAB>'
+     Enter a tag in the minibuffer, even if the tag is not in the
+     predefined list.  You will be able to complete on all tags present
+     in the buffer.  
+
+`<SPC>'
+     Clear all tags for this line.  
+
+`<RET>'
+     Accept the modified set.
+
+`C-g'
+     Abort without installing changes.
+
+This method lets you assign tags to a headline with very few keys.  With
+the above setup, you could clear the current tags and set `@HOME',
+`Laptop' and `PC' tags with just the following keys: `C-c C-c <SPC> h l
+p <RET>'.  Switching from `@HOME' to `@WORK' would be done with `C-c
+C-c w <RET>'.  Adding the non-predefined tag `Sarah' could be done with
+`C-c C-c <TAB> S a r a h <RET> <RET>'.
 
 
    ---------- Footnotes ----------
    ---------- Footnotes ----------
 
 
@@ -2690,12 +2710,38 @@ information into special lists.
 for OR.  `&' binds more strongly than `|'.  Parenthesis are currently
 for OR.  `&' binds more strongly than `|'.  Parenthesis are currently
 not implemented.  A tag may also be preceded by `-', to select against
 not implemented.  A tag may also be preceded by `-', to select against
 it, and `+' is syntactic sugar for positive selection.  The AND
 it, and `+' is syntactic sugar for positive selection.  The AND
-operator `&' is optional when `+' or `-' is present.  For example,
-`+WORK-BOSS' would select all headlines that are tagged `:WORK:', but
-discard those also tagged `:BOSS:'.  The search string `WORK|LAPTOP'
-selects all lines tagged `:WORK:' or `:LAPTOP:'.  The string
-`WORK|LAPTOP&NIGHT' requires that the `:LAPTOP:' lines are also tagged
-`NIGHT'.
+operator `&' is optional when `+' or `-' is present.  Examples:
+
+`+WORK-BOSS'
+     Select all headlines that are tagged `:WORK:', but discard those
+     also tagged `:BOSS:'.
+
+`WORK|LAPTOP'
+     Selects lines tagged `:WORK:' or `:LAPTOP:'.
+
+`WORK|LAPTOP&NIGHT'
+     Like the previous example, but require  the `:LAPTOP:' lines to be
+     tagged also `NIGHT'.
+
+   If you are using multi-state TODO keywords (*note TODO
+extensions::), it can be useful to also match on the TODO keyword.
+This can be done by adding a condition after a double slash to a tags
+match.  The syntax is similar to the tag matches, but should be applied
+with consideration: For example, a positive selection on several TODO
+keywords can not meaningfully be combined with boolean AND.  However,
+_negative selection_ combined with AND can be meaningful.  Examples:
+
+`WORK//WAITING'
+     Select `:WORK:'-tagged TODO lines with the specific TODO keyword
+     `WAITING'.
+
+`WORK//-WAITING-NEXT'
+     Select `:WORK:'-tagged TODO lines that are neither `WAITING' nor
+     `NEXT'
+
+`WORK//+WAITING|+NEXT'
+     Select `:WORK:'-tagged TODO lines that are either `WAITING' or
+     `NEXT'.
 
 
 
 
 File: org,  Node: Agenda views,  Next: Embedded LaTeX,  Prev: Tags,  Up: Top
 File: org,  Node: Agenda views,  Next: Embedded LaTeX,  Prev: Tags,  Up: Top
@@ -2904,6 +2950,8 @@ collected into a single place.
      keyword, for example `3 r'.  If you often need a search for a
      keyword, for example `3 r'.  If you often need a search for a
      specific keyword, define a custom command for it (*note Agenda
      specific keyword, define a custom command for it (*note Agenda
      dispatcher::).
      dispatcher::).
+     Matching specific TODO keywords can also be done as part of a tags
+     search (*note Tag searches::).
 
 
    Remote editing of TODO items means that you can change the state of a
    Remote editing of TODO items means that you can change the state of a
 TODO entry with a single key press.  The commands available in the TODO
 TODO entry with a single key press.  The commands available in the TODO
@@ -2942,7 +2990,9 @@ collect them into an agenda buffer.
 `C-c a M'
 `C-c a M'
      Like `C-c a m', but only select headlines that are also TODO items
      Like `C-c a m', but only select headlines that are also TODO items
      and force checking subitems (see variable
      and force checking subitems (see variable
-     `org-tags-match-list-sublevels').
+     `org-tags-match-list-sublevels').  Matching specific todo keywords
+     together with a tags match is also possible, see *Note Tag
+     searches::.
 
 
    The commands available in the tags list are described in *Note
    The commands available in the tags list are described in *Note
 Agenda commands::.
 Agenda commands::.
@@ -5035,6 +5085,7 @@ Index
 * BBDB links:                            External links.      (line   6)
 * BBDB links:                            External links.      (line   6)
 * block agenda:                          Block agenda.        (line   6)
 * block agenda:                          Block agenda.        (line   6)
 * bold text:                             Enhancing text.      (line  15)
 * bold text:                             Enhancing text.      (line  15)
+* Boolean logic, for tag searches:       Tag searches.        (line  21)
 * bug reports:                           Feedback.            (line   6)
 * bug reports:                           Feedback.            (line   6)
 * bugs:                                  Bugs.                (line   6)
 * bugs:                                  Bugs.                (line   6)
 * C-c C-c, overview:                     The very busy C-c C-c key.
 * C-c C-c, overview:                     The very busy C-c C-c key.
@@ -5289,7 +5340,7 @@ Index
 * structure editing:                     Structure editing.   (line   6)
 * structure editing:                     Structure editing.   (line   6)
 * structure of document:                 Document structure.  (line   6)
 * structure of document:                 Document structure.  (line   6)
 * sublevels, inclusion into tags match:  Tag inheritance.     (line   6)
 * sublevels, inclusion into tags match:  Tag inheritance.     (line   6)
-* sublevels, inclusion into todo list:   Global TODO list.    (line  31)
+* sublevels, inclusion into todo list:   Global TODO list.    (line  33)
 * subscript:                             Subscripts and Superscripts.
 * subscript:                             Subscripts and Superscripts.
                                                               (line   6)
                                                               (line   6)
 * subtree cycling:                       Visibility cycling.  (line  10)
 * subtree cycling:                       Visibility cycling.  (line  10)
@@ -5342,6 +5393,8 @@ Index
 * timestamp:                             Time stamps.         (line  13)
 * timestamp:                             Time stamps.         (line  13)
 * timestamps, creating:                  Creating timestamps. (line   6)
 * timestamps, creating:                  Creating timestamps. (line   6)
 * TODO items:                            TODO items.          (line   6)
 * TODO items:                            TODO items.          (line   6)
+* TODO keyword matching:                 Global TODO list.    (line  17)
+* TODO keyword matching, with tags search: Tag searches.      (line  38)
 * TODO keywords completion:              Completion.          (line   6)
 * TODO keywords completion:              Completion.          (line   6)
 * TODO list, global:                     Global TODO list.    (line   6)
 * TODO list, global:                     Global TODO list.    (line   6)
 * TODO types:                            TODO types.          (line   6)
 * TODO types:                            TODO types.          (line   6)
@@ -5389,17 +5442,20 @@ Key Index
                                                               (line  28)
                                                               (line  28)
 * <left>:                                Agenda commands.     (line  91)
 * <left>:                                Agenda commands.     (line  91)
 * <RET> <1>:                             Agenda commands.     (line  41)
 * <RET> <1>:                             Agenda commands.     (line  41)
-* <RET> <2>:                             The date/time prompt.
+* <RET> <2>:                             Setting tags.        (line  76)
+* <RET> <3>:                             The date/time prompt.
                                                               (line  53)
                                                               (line  53)
 * <RET>:                                 Built-in table editor.
 * <RET>:                                 Built-in table editor.
                                                               (line  64)
                                                               (line  64)
 * <right>:                               Agenda commands.     (line  86)
 * <right>:                               Agenda commands.     (line  86)
-* <SPC>:                                 Agenda commands.     (line  28)
+* <SPC> <1>:                             Agenda commands.     (line  28)
+* <SPC>:                                 Setting tags.        (line  73)
 * <TAB> <1>:                             CDLaTeX mode.        (line  23)
 * <TAB> <1>:                             CDLaTeX mode.        (line  23)
 * <TAB> <2>:                             Agenda commands.     (line  35)
 * <TAB> <2>:                             Agenda commands.     (line  35)
-* <TAB> <3>:                             Built-in table editor.
+* <TAB> <3>:                             Setting tags.        (line  68)
+* <TAB> <4>:                             Built-in table editor.
                                                               (line  57)
                                                               (line  57)
-* <TAB> <4>:                             Plain lists.         (line  37)
+* <TAB> <5>:                             Plain lists.         (line  37)
 * <TAB>:                                 Visibility cycling.  (line  10)
 * <TAB>:                                 Visibility cycling.  (line  10)
 * > <1>:                                 Agenda commands.     (line 154)
 * > <1>:                                 Agenda commands.     (line 154)
 * >:                                     The date/time prompt.
 * >:                                     The date/time prompt.
@@ -5726,77 +5782,77 @@ Ref: Clocking work time-Footnote-1103930
 Node: Tags104056
 Node: Tags104056
 Node: Tag inheritance104818
 Node: Tag inheritance104818
 Node: Setting tags105755
 Node: Setting tags105755
-Ref: Setting tags-Footnote-1108887
-Ref: Setting tags-Footnote-2108999
-Node: Tag searches109079
-Node: Agenda views110288
-Node: Agenda files112381
-Ref: Agenda files-Footnote-1113341
-Ref: Agenda files-Footnote-2113490
-Node: Agenda dispatcher113683
-Node: Weekly/Daily agenda115300
-Node: Calendar/Diary integration116265
-Node: Global TODO list117603
-Node: Matching headline tags119655
-Node: Timeline120599
-Node: Presentation and sorting121262
-Node: Categories122040
-Node: Time-of-day specifications122704
-Node: Sorting of agenda items124682
-Node: Agenda commands125964
-Node: Custom agenda views131852
-Node: Storing searches132527
-Node: Block agenda134439
-Node: Setting Options135669
-Node: Batch processing138381
-Node: Embedded LaTeX139511
-Ref: Embedded LaTeX-Footnote-1140603
-Node: Math symbols140793
-Node: Subscripts and Superscripts141558
-Node: LaTeX fragments142402
-Ref: LaTeX fragments-Footnote-1144510
-Node: Processing LaTeX fragments144772
-Node: CDLaTeX mode145718
-Ref: CDLaTeX mode-Footnote-1148202
-Node: Exporting148350
-Node: ASCII export149664
-Node: HTML export150954
-Node: XOXO export153790
-Node: iCalendar export154229
-Node: Text interpretation156052
-Node: Comment lines156531
-Node: Enhancing text157002
-Node: Export options158694
-Node: Publishing160361
-Ref: Publishing-Footnote-1161157
-Node: Configuration161353
-Node: Project alist162071
-Node: Sources and destinations163137
-Node: Selecting files163867
-Node: Publishing action164615
-Node: Publishing options165848
-Node: Publishing links168000
-Node: Project page index169513
-Node: Sample configuration170291
-Node: Simple example170783
-Node: Complex example171456
-Node: Triggering publication173532
-Node: Miscellaneous174217
-Node: Completion174851
-Node: Customization176322
-Node: In-buffer settings176907
-Node: The very busy C-c C-c key180328
-Node: Clean view181972
-Node: TTY keys184549
-Node: Interaction186158
-Node: Cooperation186555
-Node: Conflicts188422
-Node: Bugs190014
-Node: Extensions and Hacking191637
-Node: Extensions192123
-Node: Dynamic blocks193693
-Node: History and Acknowledgments195620
-Node: Index200628
-Node: Key Index227059
+Ref: Setting tags-Footnote-1109271
+Ref: Setting tags-Footnote-2109383
+Node: Tag searches109463
+Node: Agenda views111474
+Node: Agenda files113567
+Ref: Agenda files-Footnote-1114527
+Ref: Agenda files-Footnote-2114676
+Node: Agenda dispatcher114869
+Node: Weekly/Daily agenda116486
+Node: Calendar/Diary integration117451
+Node: Global TODO list118789
+Node: Matching headline tags120949
+Node: Timeline122007
+Node: Presentation and sorting122670
+Node: Categories123448
+Node: Time-of-day specifications124112
+Node: Sorting of agenda items126090
+Node: Agenda commands127372
+Node: Custom agenda views133260
+Node: Storing searches133935
+Node: Block agenda135847
+Node: Setting Options137077
+Node: Batch processing139789
+Node: Embedded LaTeX140919
+Ref: Embedded LaTeX-Footnote-1142011
+Node: Math symbols142201
+Node: Subscripts and Superscripts142966
+Node: LaTeX fragments143810
+Ref: LaTeX fragments-Footnote-1145918
+Node: Processing LaTeX fragments146180
+Node: CDLaTeX mode147126
+Ref: CDLaTeX mode-Footnote-1149610
+Node: Exporting149758
+Node: ASCII export151072
+Node: HTML export152362
+Node: XOXO export155198
+Node: iCalendar export155637
+Node: Text interpretation157460
+Node: Comment lines157939
+Node: Enhancing text158410
+Node: Export options160102
+Node: Publishing161769
+Ref: Publishing-Footnote-1162565
+Node: Configuration162761
+Node: Project alist163479
+Node: Sources and destinations164545
+Node: Selecting files165275
+Node: Publishing action166023
+Node: Publishing options167256
+Node: Publishing links169408
+Node: Project page index170921
+Node: Sample configuration171699
+Node: Simple example172191
+Node: Complex example172864
+Node: Triggering publication174940
+Node: Miscellaneous175625
+Node: Completion176259
+Node: Customization177730
+Node: In-buffer settings178315
+Node: The very busy C-c C-c key181736
+Node: Clean view183380
+Node: TTY keys185957
+Node: Interaction187566
+Node: Cooperation187963
+Node: Conflicts189830
+Node: Bugs191422
+Node: Extensions and Hacking193045
+Node: Extensions193531
+Node: Dynamic blocks195101
+Node: History and Acknowledgments197028
+Node: Index202036
+Node: Key Index228686
 
 
 End Tag Table
 End Tag Table

+ 117 - 18
org.el

@@ -5,7 +5,7 @@
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Author: Carsten Dominik <dominik at science dot uva dot nl>
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Keywords: outlines, hypermedia, calendar, wp
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
 ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 4.51
+;; Version: 4.52
 ;;
 ;;
 ;; This file is part of GNU Emacs.
 ;; This file is part of GNU Emacs.
 ;;
 ;;
@@ -61,6 +61,12 @@
 ;;
 ;;
 ;; Recent changes
 ;; Recent changes
 ;; --------------
 ;; --------------
+;; Version 4.52
+;;    - TAG matches can also specify conditions on TODO keywords.
+;;    - The fast tag interface allows setting tags that are not in the
+;;      predefined list.
+;;    - Bug fixes.
+;;
 ;; Version 4.51
 ;; Version 4.51
 ;;    - Link abbreviations (manual section 4.5).
 ;;    - Link abbreviations (manual section 4.5).
 ;;    - More control over how agenda is displayed.  See the new variables
 ;;    - More control over how agenda is displayed.  See the new variables
@@ -143,7 +149,7 @@
 
 
 ;;; Customization variables
 ;;; Customization variables
 
 
-(defvar org-version "4.51"
+(defvar org-version "4.52"
   "The version number of the file org.el.")
   "The version number of the file org.el.")
 (defun org-version ()
 (defun org-version ()
   (interactive)
   (interactive)
@@ -1676,7 +1682,7 @@ other-window      Use `switch-to-buffer-other-window' to display agenda.
 reorganize-frame  Show only two windows on the current frame, the current
 reorganize-frame  Show only two windows on the current frame, the current
                   window and the agenda.  Also, if the option
                   window and the agenda.  Also, if the option
                   `org-fit-agenda-window' is set, resize the agenda window to
                   `org-fit-agenda-window' is set, resize the agenda window to
-                  try to as much as possible of the buffer content.
+                  try to show as much as possible of the buffer content.
 See also the variable `org-agenda-restore-windows-after-quit'."
 See also the variable `org-agenda-restore-windows-after-quit'."
   :group 'org-agenda-setup
   :group 'org-agenda-setup
   :type '(choice
   :type '(choice
@@ -9237,7 +9243,8 @@ MATCH can contain positive and negative selection of tags, like
 	(org-show-hierarchy-above nil))
 	(org-show-hierarchy-above nil))
     (org-scan-tags 'sparse-tree (cdr (org-make-tags-matcher match)))))
     (org-scan-tags 'sparse-tree (cdr (org-make-tags-matcher match)))))
 
 
-(defun org-make-tags-matcher (match)
+;; FIXME: remove this function.
+(defun org-make-tags-matcher-old (match)
   "Create the TAGS matcher form for the tags-selecting string MATCH."
   "Create the TAGS matcher form for the tags-selecting string MATCH."
   (unless match
   (unless match
     ;; Get a new match request, with completion
     ;; Get a new match request, with completion
@@ -9266,6 +9273,76 @@ MATCH can contain positive and negative selection of tags, like
     ;; Return the string and lisp forms of the matcher
     ;; Return the string and lisp forms of the matcher
     (cons match0 matcher)))
     (cons match0 matcher)))
 
 
+
+(defun org-make-tags-matcher (match)
+  "Create the TAGS//TODO matcher form for the selection string MATCH."
+  (unless match
+    ;; Get a new match request, with completion
+    (setq org-last-tags-completion-table
+	  (or org-tag-alist
+	      org-last-tags-completion-table))
+    (setq match (completing-read
+		 "Match: " 'org-tags-completion-function nil nil nil
+		 'org-tags-history)))  ; FIXME: SHould we have a separate history for this?
+
+  ;; Parse the string and create a lisp form
+  (let ((match0 match) minus tag mm
+	tagsmatch todomatch tagsmatcher todomatcher kwd matcher
+	orterms term orlist)
+    (if (string-match "//" match)
+	;; match contains also a todo-matching request
+	(setq tagsmatch (substring match 0 (match-beginning 0))
+	      todomatch (substring match (match-end 0)))
+      ;; only matching tags
+      (setq tagsmatch match todomatch nil))
+
+    ;; Make the tags matcher
+    (if (or (not tagsmatch) (not (string-match "\\S-" tagsmatch)))
+	(setq tagsmatcher t)
+      (setq orterms (org-split-string tagsmatch "|") orlist nil)
+      (while (setq term (pop orterms))
+	(while (string-match "^&?\\([-+:]\\)?\\([A-Za-z_@0-9]+\\)" term)
+	  (setq minus (and (match-end 1)
+			   (equal (match-string 1 term) "-"))
+		tag (match-string 2 term)
+		term (substring term (match-end 0))
+		mm (list 'member (downcase tag) 'tags-list)
+		mm (if minus (list 'not mm) mm))
+	  (push mm tagsmatcher))
+	(push (if (> (length tagsmatcher) 1)
+		  (cons 'and tagsmatcher)
+		(car tagsmatcher))
+	      orlist)
+	(setq tagsmatcher nil))
+      (setq tagsmatcher (if (> (length orlist) 1) (cons 'or orlist) (car orlist))))
+
+    ;; Make the todo matcher ;; FIXME: reduce syntax richness?
+    (if (or (not todomatch) (not (string-match "\\S-" todomatch)))
+	(setq todomatcher t)
+      (setq orterms (org-split-string todomatch "|") orlist nil)
+      (while (setq term (pop orterms))
+	(while (string-match "^&?\\([-+:]\\)?\\([A-Za-z_@0-9]+\\)" term)
+	  (setq minus (and (match-end 1)
+			   (equal (match-string 1 term) "-"))
+		kwd (match-string 2 term)
+		term (substring term (match-end 0))
+		mm (list 'equal 'todo kwd)
+		mm (if minus (list 'not mm) mm))
+	  (push mm todomatcher))
+	(push (if (> (length todomatcher) 1)
+		  (cons 'and todomatcher)
+		(car todomatcher))
+	      orlist)
+	(setq todomatcher nil))
+      (setq todomatcher (if (> (length orlist) 1)
+			    (cons 'or orlist) (car orlist))))
+    
+    ;; Return the string and lisp forms of the matcher
+    (setq matcher (if todomatcher
+		      (list 'and tagsmatcher todomatcher)
+		    tagsmatcher))
+    (cons match0 matcher)))
+
 ;;;###autoload
 ;;;###autoload
 (defun org-tags-view (&optional todo-only match)
 (defun org-tags-view (&optional todo-only match)
   "Show all headlines for all `org-agenda-files' matching a TAGS criterion.
   "Show all headlines for all `org-agenda-files' matching a TAGS criterion.
@@ -9342,8 +9419,9 @@ With prefix ARG, realign all tags in headings in the current buffer."
     (if arg
     (if arg
 	(save-excursion
 	(save-excursion
 	  (goto-char (point-min))
 	  (goto-char (point-min))
-	  (while (re-search-forward re nil t)
-	    (org-set-tags nil t))
+	  (let (buffer-invisibility-spec)  ; Emacs 21 compatibility
+	    (while (re-search-forward re nil t)
+	      (org-set-tags nil t)))
 	  (message "All tags realigned to column %d" org-tags-column))
 	  (message "All tags realigned to column %d" org-tags-column))
       (if just-align
       (if just-align
 	  (setq tags current)
 	  (setq tags current)
@@ -9437,6 +9515,8 @@ Returns the new tags string, or nil to not change the current settings."
 			      (lambda (x)
 			      (lambda (x)
 				(if (stringp (car x)) (string-width (car x)) 0))
 				(if (stringp (car x)) (string-width (car x)) 0))
 			      table)))
 			      table)))
+	 (buf (current-buffer))
+	 (buffer-tags nil)
 	 (fwidth (+ maxlen 3 1 3))
 	 (fwidth (+ maxlen 3 1 3))
 	 (ncol (/ (- (window-width) 4) fwidth))
 	 (ncol (/ (- (window-width) 4) fwidth))
 	 (i-face 'org-done)
 	 (i-face 'org-done)
@@ -9496,8 +9576,8 @@ Returns the new tags string, or nil to not change the current settings."
       (setq rtn
       (setq rtn
 	    (catch 'exit
 	    (catch 'exit
 	      (while t
 	      (while t
-		(message "[key]:Toggle  SPC: clear current  RET accept%s"
-			 (if groups "  [!] ignore goups" ""))
+		(message "[a-z..]:Toggle   [SPC] clear   [RET] accept   [TAB] free tag%s"
+			 (if groups "  [!] no goups" ""))
 		(setq c (read-char-exclusive))
 		(setq c (read-char-exclusive))
 		(cond
 		(cond
 		 ((= c ?\r) (throw 'exit t))
 		 ((= c ?\r) (throw 'exit t))
@@ -9509,6 +9589,19 @@ Returns the new tags string, or nil to not change the current settings."
 		      (and (= c ?q) (not (rassoc c ntable))))
 		      (and (= c ?q) (not (rassoc c ntable))))
 		  (setq quit-flag t))
 		  (setq quit-flag t))
 		 ((= c ?\ ) (setq current nil))
 		 ((= c ?\ ) (setq current nil))
+		 ((= c ?\t)
+		  (condition-case nil
+		      (setq tg (completing-read 
+				"Tag: "
+				(or buffer-tags
+				    (with-current-buffer buf
+				      (org-get-buffer-tags)))))
+		    (quit (setq tg "")))
+		  (when (string-match "\\S-" tg)
+		    (add-to-list 'buffer-tags (list tg))
+		    (if (member tg current)
+			(setq current (delete tg current))
+		      (push tg current))))
 		 ((setq e (rassoc c ntable) tg (car e))
 		 ((setq e (rassoc c ntable) tg (car e))
 		  (if (member tg current)
 		  (if (member tg current)
 		      (setq current (delete tg current))
 		      (setq current (delete tg current))
@@ -9517,7 +9610,7 @@ Returns the new tags string, or nil to not change the current settings."
 			      (mapcar (lambda (x)
 			      (mapcar (lambda (x)
 					(setq current (delete x current)))
 					(setq current (delete x current)))
 				      g)))
 				      g)))
-		    (setq current (cons tg current)))))
+		    (push tg current))))
 		;; Create a sorted list
 		;; Create a sorted list
 		(setq current
 		(setq current
 		      (sort current
 		      (sort current
@@ -9821,7 +9914,6 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
        (t
        (t
 	(browse-url-at-point))))))
 	(browse-url-at-point))))))
 
 
-
 (defun org-link-expand-abbrev (link)
 (defun org-link-expand-abbrev (link)
   "Apply replacements as defined in `org-link-abbrev-alist."
   "Apply replacements as defined in `org-link-abbrev-alist."
   (if (string-match "^\\([a-zA-Z]+\\)\\(::\\(.*\\)\\)?$" link)
   (if (string-match "^\\([a-zA-Z]+\\)\\(::\\(.*\\)\\)?$" link)
@@ -13967,6 +14059,11 @@ translations.  There is currently no way for users to extend this.")
       (while (re-search-forward "^#.*?\\(<<<?[^>\r\n]+>>>?\\).*" nil t)
       (while (re-search-forward "^#.*?\\(<<<?[^>\r\n]+>>>?\\).*" nil t)
 	(replace-match "\\1(INVISIBLE)"))
 	(replace-match "\\1(INVISIBLE)"))
 
 
+      ;; Remove comments
+      (goto-char (point-min))
+      (while (re-search-forward "^#.*\n?" nil t)
+	(replace-match ""))
+
       ;; Find matches for radio targets and turn them into internal links
       ;; Find matches for radio targets and turn them into internal links
       (goto-char (point-min))
       (goto-char (point-min))
       (when re-radio
       (when re-radio
@@ -14003,10 +14100,16 @@ translations.  There is currently no way for users to extend this.")
 	  (match-string 1) "[[" (match-string 2) ":" (match-string 3) "]]")
 	  (match-string 1) "[[" (match-string 2) ":" (match-string 3) "]]")
 	 t t))
 	 t t))
       (goto-char (point-min))
       (goto-char (point-min))
-      (while (re-search-forward "\\[\\[\\([^]]+\\)\\]" nil t)
-	(replace-match (concat "[[" (save-match-data
-				      (org-link-expand-abbrev (match-string 1)))
-			       "]")))
+      (while (re-search-forward org-bracket-link-regexp nil t)
+	(replace-match 
+	 (concat "[[" (save-match-data
+			(org-link-expand-abbrev (match-string 1)))
+		 "]"
+		 (if (match-end 3)
+		     (match-string 2)
+		   (concat "[" (match-string 1) "]"))
+		 "]")
+	 t t))
 
 
       ;; Find multiline emphasis and put them into single line
       ;; Find multiline emphasis and put them into single line
       (when (memq :emph-multiline parameters)
       (when (memq :emph-multiline parameters)
@@ -14015,10 +14118,6 @@ translations.  There is currently no way for users to extend this.")
 	  (subst-char-in-region (match-beginning 0) (match-end 0) ?\n ?\  t)
 	  (subst-char-in-region (match-beginning 0) (match-end 0) ?\n ?\  t)
 	  (goto-char (1- (match-end 0)))))
 	  (goto-char (1- (match-end 0)))))
 
 
-      ;; Remove comments
-      (goto-char (point-min))
-      (while (re-search-forward "^#.*\n?" nil t)
-	(replace-match ""))
       (setq rtn (buffer-string)))
       (setq rtn (buffer-string)))
     (kill-buffer " org-mode-tmp")
     (kill-buffer " org-mode-tmp")
     rtn))
     rtn))

BIN
org.pdf


+ 84 - 34
org.texi

@@ -3,8 +3,8 @@
 @setfilename ../info/org
 @setfilename ../info/org
 @settitle Org Mode Manual
 @settitle Org Mode Manual
 
 
-@set VERSION 4.51
-@set DATE September 2006
+@set VERSION 4.52
+@set DATE October 2006
 
 
 @dircategory Emacs
 @dircategory Emacs
 @direntry
 @direntry
@@ -2884,18 +2884,26 @@ Org will support tag insertion based on a @emph{list of tags}.  By
 default this list is constructed dynamically, containing all tags
 default this list is constructed dynamically, containing all tags
 currently used in the buffer.  You may also globally specify a hard list
 currently used in the buffer.  You may also globally specify a hard list
 of tags with the variable @code{org-tag-alist}.  Finally you can set
 of tags with the variable @code{org-tag-alist}.  Finally you can set
-the allowed tags for a given file with lines like
+the default tags for a given file with lines like
 
 
 @example
 @example
 #+TAGS: @@WORK @@HOME @@TENNISCLUB
 #+TAGS: @@WORK @@HOME @@TENNISCLUB
 #+TAGS: Laptop Car PC Sailboat
 #+TAGS: Laptop Car PC Sailboat
 @end example
 @end example
 
 
-The default support method is minibuffer completion.  However, Org-mode
-also implements a much better method: @emph{fast tag selection}.  This
-method allows to select and deselect tags with a single key per tag.  To
-function efficiently, you should assign unique keys to all tags.  This
-can be done globally with
+If you have globally defined your preferred set of tags using the
+variable @code{org-tag-alist}, but would like to use a dynamic tag list
+in a specific file: Just add an empty TAGS option line to that file:
+
+@example
+#+TAGS:
+@end example
+
+The default support method for entering tags is minibuffer completion.
+However, Org-mode also implements a much better method: @emph{fast tag
+selection}.  This method allows to select and deselect tags with a
+single key per tag.  To function efficiently, you should assign unique
+keys to most tags.  This can be done globally with
 
 
 @lisp
 @lisp
 (setq org-tag-alist '(("@@WORK" . ?w) ("@@HOME" . ?h) ("Laptop" . ?l)))
 (setq org-tag-alist '(("@@WORK" . ?w) ("@@HOME" . ?h) ("Laptop" . ?l)))
@@ -2927,26 +2935,36 @@ If at least one tag has a selection key, pressing @kbd{C-c C-c} will
 automatically present you with a special interface, listing inherited
 automatically present you with a special interface, listing inherited
 tags, the tags of the current headline, and a list of all legal tags
 tags, the tags of the current headline, and a list of all legal tags
 with corresponding keys@footnote{Keys will automatically assigned to
 with corresponding keys@footnote{Keys will automatically assigned to
-tags which have no configured keys.}.  Pressing keys for the tags will
-add or remove them from the list of tags in the current line.  Selecting
-a tag in a group of mutually exclusive tags will turn off any other tags
-from that group.  @key{SPC} clears all tags for this line, @kbd{RET}
-accepts the modified set, and @kbd{C-g} aborts without installing
-changes.  This method lets you assign tags to a headline with very few
-keys.  With the above setup, you could clear the current tags and set
-@samp{@@HOME}, @samp{Laptop} and @samp{PC} tags with just the following
-keys: @kbd{C-c C-c @key{SPC} h l p @key{RET}}.  Switching from
-@samp{@@HOME} to @samp{@@WORK} would be done with @kbd{C-c C-c w
-@key{RET}}.
-
-What if you have globally defined your preferred set of tags using the
-variable @code{org-tag-alist}, but would like to use a dynamic tag list
-in a specific file?  Just add an empty TAGS option line to that file:
+tags which have no configured keys.}.  In this interface, you can use
+the following keys:
 
 
-@example
-#+TAGS:
-@end example
+@table @kbd
+@item a-z...
+Pressing keys assigned to tags will add or remove them from the list of
+tags in the current line.  Selecting a tag in a group of mutually
+exclusive tags will turn off any other tags from that group.
+@kindex @key{TAB}
+@item @key{TAB}
+Enter a tag in the minibuffer, even if the tag is not in the predefined
+list.  You will be able to complete on all tags present in the buffer.
+@kindex @key{SPC}
+@item @key{SPC}
+Clear all tags for this line.
+@kindex @key{RET}
+@item @key{RET}
+Accept the modified set.
+@item C-g
+Abort without installing changes.
+@end table
 
 
+@noindent
+This method lets you assign tags to a headline with very few keys.  With
+the above setup, you could clear the current tags and set @samp{@@HOME},
+@samp{Laptop} and @samp{PC} tags with just the following keys: @kbd{C-c
+C-c @key{SPC} h l p @key{RET}}.  Switching from @samp{@@HOME} to
+@samp{@@WORK} would be done with @kbd{C-c C-c w @key{RET}}.  Adding the
+non-predefined tag @samp{Sarah} could be done with @kbd{C-c C-c
+@key{TAB} S a r a h @key{RET} @key{RET}}.
 
 
 
 
 @node Tag searches,  , Setting tags, Tags
 @node Tag searches,  , Setting tags, Tags
@@ -2972,17 +2990,45 @@ only TODO items and force checking subitems (see variable
 @code{org-tags-match-list-sublevels}).
 @code{org-tags-match-list-sublevels}).
 @end table
 @end table
 
 
+@cindex Boolean logic, for tag searches
 A @i{tags} search string can use Boolean operators @samp{&} for AND and
 A @i{tags} search string can use Boolean operators @samp{&} for AND and
 @samp{|} for OR.  @samp{&} binds more strongly than @samp{|}.
 @samp{|} for OR.  @samp{&} binds more strongly than @samp{|}.
 Parenthesis are currently not implemented.  A tag may also be preceded
 Parenthesis are currently not implemented.  A tag may also be preceded
 by @samp{-}, to select against it, and @samp{+} is syntactic sugar for
 by @samp{-}, to select against it, and @samp{+} is syntactic sugar for
 positive selection.  The AND operator @samp{&} is optional when @samp{+}
 positive selection.  The AND operator @samp{&} is optional when @samp{+}
-or @samp{-} is present.  For example, @samp{+WORK-BOSS} would select all
-headlines that are tagged @samp{:WORK:}, but discard those also tagged
-@samp{:BOSS:}.  The search string @samp{WORK|LAPTOP} selects all lines
-tagged @samp{:WORK:} or @samp{:LAPTOP:}.  The string
-@samp{WORK|LAPTOP&NIGHT} requires that the @samp{:LAPTOP:} lines are
-also tagged @samp{NIGHT}.
+or @samp{-} is present.  Examples:
+
+@table @samp
+@item +WORK-BOSS
+Select all headlines that are tagged @samp{:WORK:}, but discard those also tagged
+@samp{:BOSS:}.
+@item WORK|LAPTOP
+Selects lines tagged @samp{:WORK:} or @samp{:LAPTOP:}.
+@item WORK|LAPTOP&NIGHT
+Like the previous example, but require  the @samp{:LAPTOP:} lines to be
+tagged also @samp{NIGHT}.
+@end table
+
+@cindex TODO keyword matching, with tags search
+If you are using multi-state TODO keywords (@pxref{TODO extensions}), it
+can be useful to also match on the TODO keyword.  This can be done by
+adding a condition after a double slash to a tags match.  The syntax is
+similar to the tag matches, but should be applied with consideration:
+For example, a positive selection on several TODO keywords can not
+meaningfully be combined with boolean AND.  However, @emph{negative
+selection} combined with AND can be meaningful.  Examples:
+
+@table @samp
+@item WORK//WAITING
+Select @samp{:WORK:}-tagged TODO lines with the specific TODO
+keyword @samp{WAITING}.
+@item WORK//-WAITING-NEXT
+Select @samp{:WORK:}-tagged TODO lines that are neither @samp{WAITING}
+nor @samp{NEXT}
+@item WORK//+WAITING|+NEXT
+Select @samp{:WORK:}-tagged TODO lines that are either @samp{WAITING} or
+@samp{NEXT}.
+@end table
 
 
 @node Agenda views, Embedded LaTeX, Tags, Top
 @node Agenda views, Embedded LaTeX, Tags, Top
 @chapter Agenda Views
 @chapter Agenda Views
@@ -3188,6 +3234,7 @@ agenda files (@pxref{Agenda views}) into a single buffer.  The buffer is in
 the TODO entries directly from that buffer (@pxref{Agenda commands}).
 the TODO entries directly from that buffer (@pxref{Agenda commands}).
 @kindex C-c a T
 @kindex C-c a T
 @item C-c a T
 @item C-c a T
+@cindex TODO keyword matching
 Like the above, but allows selection of a specific TODO keyword.  You can
 Like the above, but allows selection of a specific TODO keyword.  You can
 also do this by specifying a prefix argument to @kbd{C-c a t}.  With a
 also do this by specifying a prefix argument to @kbd{C-c a t}.  With a
 @kbd{C-u} prefix you are prompted for a keyword.  With a numeric
 @kbd{C-u} prefix you are prompted for a keyword.  With a numeric
@@ -3196,7 +3243,9 @@ prefix, the Nth keyword in @code{org-todo-keywords} is selected.
 The @kbd{r} key in the agenda buffer regenerates it, and you can give
 The @kbd{r} key in the agenda buffer regenerates it, and you can give
 a prefix argument to this command to change the selected TODO keyword,
 a prefix argument to this command to change the selected TODO keyword,
 for example @kbd{3 r}.  If you often need a search for a specific
 for example @kbd{3 r}.  If you often need a search for a specific
-keyword, define a custom command for it (@pxref{Agenda dispatcher}).
+keyword, define a custom command for it (@pxref{Agenda dispatcher}).@*
+Matching specific TODO keywords can also be done as part of a tags
+search (@pxref{Tag searches}).
 @end table
 @end table
 
 
 Remote editing of TODO items means that you can change the state of a
 Remote editing of TODO items means that you can change the state of a
@@ -3241,7 +3290,8 @@ define a custom command for it (@pxref{Agenda dispatcher}).
 @item C-c a M
 @item C-c a M
 Like @kbd{C-c a m}, but only select headlines that are also TODO items
 Like @kbd{C-c a m}, but only select headlines that are also TODO items
 and force checking subitems (see variable
 and force checking subitems (see variable
-@code{org-tags-match-list-sublevels}).
+@code{org-tags-match-list-sublevels}).  Matching specific todo keywords
+together with a tags match is also possible, see @ref{Tag searches}.
 @end table
 @end table
 
 
 The commands available in the tags list are described in @ref{Agenda
 The commands available in the tags list are described in @ref{Agenda

BIN
orgcard.pdf


+ 1 - 1
orgcard.tex

@@ -1,5 +1,5 @@
 % Reference Card for Org Mode
 % Reference Card for Org Mode
-\def\orgversionnumber{4.51}
+\def\orgversionnumber{4.52}
 \def\year{2006}
 \def\year{2006}
 %
 %
 %**start of header
 %**start of header

+ 1 - 1
xemacs/README

@@ -1,5 +1,5 @@
 This directory contains files that are necessary or at least useful
 This directory contains files that are necessary or at least useful
-companions for Org-mode:
+companions for Org-mode under XEmacs:
 
 
 noutline.el
 noutline.el
 
 

+ 1 - 0
xemacs/noutline.el

@@ -44,6 +44,7 @@
 
 
 ;;; Code:
 ;;; Code:
 
 
+(require 'xemacs)
 (require 'easymenu)
 (require 'easymenu)
 
 
 ;; XEmacs and compatibility
 ;; XEmacs and compatibility