diff --git a/org b/org index 7e9fa791b..12ff26f49 100644 --- a/org +++ b/org @@ -5,7 +5,7 @@ START-INFO-DIR-ENTRY * Org Mode: (org). outline-based notes management and organizer 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 @@ -27,7 +27,7 @@ File: org, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) 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 @@ -2610,16 +2610,22 @@ special command for inserting tags: default this list is constructed dynamically, containing all tags 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 -allowed tags for a given file with lines like +default tags for a given file with lines like #+TAGS: @WORK @HOME @TENNISCLUB #+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))) @@ -2641,21 +2647,35 @@ to activate any changes. If at least one tag has a selection key, pressing `C-c C-c' will automatically present you with a special interface, listing inherited 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. 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 h l p '. -Switching from `@HOME' to `@WORK' would be done with `C-c C-c w '. +with corresponding keys(2). In this interface, you can use the +following keys: - 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: +`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. - #+TAGS: +`' + 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. + +`' + Clear all tags for this line. + +`' + 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 h l +p '. Switching from `@HOME' to `@WORK' would be done with `C-c +C-c w '. Adding the non-predefined tag `Sarah' could be done with +`C-c C-c S a r a h '. ---------- Footnotes ---------- @@ -2690,12 +2710,38 @@ information into special lists. for OR. `&' binds more strongly than `|'. Parenthesis are currently not implemented. A tag may also be preceded by `-', to select against 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 @@ -2904,6 +2950,8 @@ collected into a single place. keyword, for example `3 r'. If you often need a search for a specific keyword, define a custom command for it (*note Agenda 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 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' Like `C-c a m', but only select headlines that are also TODO items 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 Agenda commands::. @@ -5035,6 +5085,7 @@ Index * BBDB links: External links. (line 6) * block agenda: Block agenda. (line 6) * bold text: Enhancing text. (line 15) +* Boolean logic, for tag searches: Tag searches. (line 21) * bug reports: Feedback. (line 6) * bugs: Bugs. (line 6) * 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 of document: Document structure. (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. (line 6) * subtree cycling: Visibility cycling. (line 10) @@ -5342,6 +5393,8 @@ Index * timestamp: Time stamps. (line 13) * timestamps, creating: Creating timestamps. (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 list, global: Global TODO list. (line 6) * TODO types: TODO types. (line 6) @@ -5389,17 +5442,20 @@ Key Index (line 28) * : Agenda commands. (line 91) * <1>: Agenda commands. (line 41) -* <2>: The date/time prompt. +* <2>: Setting tags. (line 76) +* <3>: The date/time prompt. (line 53) * : Built-in table editor. (line 64) * : Agenda commands. (line 86) -* : Agenda commands. (line 28) +* <1>: Agenda commands. (line 28) +* : Setting tags. (line 73) * <1>: CDLaTeX mode. (line 23) * <2>: Agenda commands. (line 35) -* <3>: Built-in table editor. +* <3>: Setting tags. (line 68) +* <4>: Built-in table editor. (line 57) -* <4>: Plain lists. (line 37) +* <5>: Plain lists. (line 37) * : Visibility cycling. (line 10) * > <1>: Agenda commands. (line 154) * >: The date/time prompt. @@ -5726,77 +5782,77 @@ Ref: Clocking work time-Footnote-1103930 Node: Tags104056 Node: Tag inheritance104818 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 diff --git a/org.el b/org.el index bff450119..d8eaa0ccb 100644 --- a/org.el +++ b/org.el @@ -5,7 +5,7 @@ ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar, wp ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ -;; Version: 4.51 +;; Version: 4.52 ;; ;; This file is part of GNU Emacs. ;; @@ -61,6 +61,12 @@ ;; ;; 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 ;; - Link abbreviations (manual section 4.5). ;; - More control over how agenda is displayed. See the new variables @@ -143,7 +149,7 @@ ;;; Customization variables -(defvar org-version "4.51" +(defvar org-version "4.52" "The version number of the file org.el.") (defun org-version () (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 window and the agenda. Also, if the option `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'." :group 'org-agenda-setup :type '(choice @@ -9237,7 +9243,8 @@ MATCH can contain positive and negative selection of tags, like (org-show-hierarchy-above nil)) (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." (unless match ;; 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 (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 (defun org-tags-view (&optional todo-only match) "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 (save-excursion (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)) (if just-align (setq tags current) @@ -9437,6 +9515,8 @@ Returns the new tags string, or nil to not change the current settings." (lambda (x) (if (stringp (car x)) (string-width (car x)) 0)) table))) + (buf (current-buffer)) + (buffer-tags nil) (fwidth (+ maxlen 3 1 3)) (ncol (/ (- (window-width) 4) fwidth)) (i-face 'org-done) @@ -9496,8 +9576,8 @@ Returns the new tags string, or nil to not change the current settings." (setq rtn (catch 'exit (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)) (cond ((= 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)))) (setq quit-flag t)) ((= 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)) (if (member 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) (setq current (delete x current))) g))) - (setq current (cons tg current))))) + (push tg current)))) ;; Create a sorted list (setq current (sort current @@ -9821,7 +9914,6 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file." (t (browse-url-at-point)))))) - (defun org-link-expand-abbrev (link) "Apply replacements as defined in `org-link-abbrev-alist." (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) (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 (goto-char (point-min)) (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) "]]") t t)) (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 (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) (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))) (kill-buffer " org-mode-tmp") rtn)) diff --git a/org.pdf b/org.pdf index f32ae3ff5..9ae580ba6 100644 Binary files a/org.pdf and b/org.pdf differ diff --git a/org.texi b/org.texi index 7f59d3454..6139979cb 100644 --- a/org.texi +++ b/org.texi @@ -3,8 +3,8 @@ @setfilename ../info/org @settitle Org Mode Manual -@set VERSION 4.51 -@set DATE September 2006 +@set VERSION 4.52 +@set DATE October 2006 @dircategory Emacs @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 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 -the allowed tags for a given file with lines like +the default tags for a given file with lines like @example #+TAGS: @@WORK @@HOME @@TENNISCLUB #+TAGS: Laptop Car PC Sailboat @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 (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 tags, the tags of the current headline, and a list of all legal tags 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}}. +tags which have no configured keys.}. In this interface, you can use +the following keys: -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: - -@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 @@ -2972,17 +2990,45 @@ only TODO items and force checking subitems (see variable @code{org-tags-match-list-sublevels}). @end table +@cindex Boolean logic, for tag searches A @i{tags} search string can use Boolean operators @samp{&} for AND and @samp{|} for OR. @samp{&} binds more strongly than @samp{|}. Parenthesis are currently not implemented. A tag may also be preceded by @samp{-}, to select against it, and @samp{+} is syntactic sugar for 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 @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}). @kindex 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 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 @@ -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 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 -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 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 Like @kbd{C-c a m}, but only select headlines that are also TODO items 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 The commands available in the tags list are described in @ref{Agenda diff --git a/orgcard.pdf b/orgcard.pdf index 9c41a27fd..f9b72fbb2 100644 Binary files a/orgcard.pdf and b/orgcard.pdf differ diff --git a/orgcard.tex b/orgcard.tex index f72d6553c..013ec8dc5 100644 --- a/orgcard.tex +++ b/orgcard.tex @@ -1,5 +1,5 @@ % Reference Card for Org Mode -\def\orgversionnumber{4.51} +\def\orgversionnumber{4.52} \def\year{2006} % %**start of header diff --git a/xemacs/README b/xemacs/README index e2992bb26..00c332c77 100644 --- a/xemacs/README +++ b/xemacs/README @@ -1,5 +1,5 @@ This directory contains files that are necessary or at least useful -companions for Org-mode: +companions for Org-mode under XEmacs: noutline.el diff --git a/xemacs/noutline.el b/xemacs/noutline.el index 2e11ee505..609af07c2 100644 --- a/xemacs/noutline.el +++ b/xemacs/noutline.el @@ -44,6 +44,7 @@ ;;; Code: +(require 'xemacs) (require 'easymenu) ;; XEmacs and compatibility