Release 4.52

This commit is contained in:
Carsten Dominik 2008-01-31 11:32:48 +01:00
parent fdf165e556
commit d790f20ba9
8 changed files with 365 additions and 159 deletions

266
org
View File

@ -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, If you have globally defined your preferred set of tags using the
Org-mode also implements a much better method: _fast tag selection_. variable `org-tag-alist', but would like to use a dynamic tag list in a
This method allows to select and deselect tags with a single key per specific file: Just add an empty TAGS option line to that file:
tag. To function efficiently, you should assign unique keys to all
tags. This can be done globally with #+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 with corresponding keys(2). In this interface, you can use the
remove them from the list of tags in the current line. Selecting a tag following keys:
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 `a-z...'
the variable `org-tag-alist', but would like to use a dynamic tag list Pressing keys assigned to tags will add or remove them from the
in a specific file? Just add an empty TAGS option line to that file: 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: `<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, operator `&' is optional when `+' or `-' is present. Examples:
`+WORK-BOSS' would select all headlines that are tagged `:WORK:', but
discard those also tagged `:BOSS:'. The search string `WORK|LAPTOP' `+WORK-BOSS'
selects all lines tagged `:WORK:' or `:LAPTOP:'. The string Select all headlines that are tagged `:WORK:', but discard those
`WORK|LAPTOP&NIGHT' requires that the `:LAPTOP:' lines are also tagged also tagged `:BOSS:'.
`NIGHT'.
`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-1109271
Ref: Setting tags-Footnote-2108999 Ref: Setting tags-Footnote-2109383
Node: Tag searches109079 Node: Tag searches109463
Node: Agenda views110288 Node: Agenda views111474
Node: Agenda files112381 Node: Agenda files113567
Ref: Agenda files-Footnote-1113341 Ref: Agenda files-Footnote-1114527
Ref: Agenda files-Footnote-2113490 Ref: Agenda files-Footnote-2114676
Node: Agenda dispatcher113683 Node: Agenda dispatcher114869
Node: Weekly/Daily agenda115300 Node: Weekly/Daily agenda116486
Node: Calendar/Diary integration116265 Node: Calendar/Diary integration117451
Node: Global TODO list117603 Node: Global TODO list118789
Node: Matching headline tags119655 Node: Matching headline tags120949
Node: Timeline120599 Node: Timeline122007
Node: Presentation and sorting121262 Node: Presentation and sorting122670
Node: Categories122040 Node: Categories123448
Node: Time-of-day specifications122704 Node: Time-of-day specifications124112
Node: Sorting of agenda items124682 Node: Sorting of agenda items126090
Node: Agenda commands125964 Node: Agenda commands127372
Node: Custom agenda views131852 Node: Custom agenda views133260
Node: Storing searches132527 Node: Storing searches133935
Node: Block agenda134439 Node: Block agenda135847
Node: Setting Options135669 Node: Setting Options137077
Node: Batch processing138381 Node: Batch processing139789
Node: Embedded LaTeX139511 Node: Embedded LaTeX140919
Ref: Embedded LaTeX-Footnote-1140603 Ref: Embedded LaTeX-Footnote-1142011
Node: Math symbols140793 Node: Math symbols142201
Node: Subscripts and Superscripts141558 Node: Subscripts and Superscripts142966
Node: LaTeX fragments142402 Node: LaTeX fragments143810
Ref: LaTeX fragments-Footnote-1144510 Ref: LaTeX fragments-Footnote-1145918
Node: Processing LaTeX fragments144772 Node: Processing LaTeX fragments146180
Node: CDLaTeX mode145718 Node: CDLaTeX mode147126
Ref: CDLaTeX mode-Footnote-1148202 Ref: CDLaTeX mode-Footnote-1149610
Node: Exporting148350 Node: Exporting149758
Node: ASCII export149664 Node: ASCII export151072
Node: HTML export150954 Node: HTML export152362
Node: XOXO export153790 Node: XOXO export155198
Node: iCalendar export154229 Node: iCalendar export155637
Node: Text interpretation156052 Node: Text interpretation157460
Node: Comment lines156531 Node: Comment lines157939
Node: Enhancing text157002 Node: Enhancing text158410
Node: Export options158694 Node: Export options160102
Node: Publishing160361 Node: Publishing161769
Ref: Publishing-Footnote-1161157 Ref: Publishing-Footnote-1162565
Node: Configuration161353 Node: Configuration162761
Node: Project alist162071 Node: Project alist163479
Node: Sources and destinations163137 Node: Sources and destinations164545
Node: Selecting files163867 Node: Selecting files165275
Node: Publishing action164615 Node: Publishing action166023
Node: Publishing options165848 Node: Publishing options167256
Node: Publishing links168000 Node: Publishing links169408
Node: Project page index169513 Node: Project page index170921
Node: Sample configuration170291 Node: Sample configuration171699
Node: Simple example170783 Node: Simple example172191
Node: Complex example171456 Node: Complex example172864
Node: Triggering publication173532 Node: Triggering publication174940
Node: Miscellaneous174217 Node: Miscellaneous175625
Node: Completion174851 Node: Completion176259
Node: Customization176322 Node: Customization177730
Node: In-buffer settings176907 Node: In-buffer settings178315
Node: The very busy C-c C-c key180328 Node: The very busy C-c C-c key181736
Node: Clean view181972 Node: Clean view183380
Node: TTY keys184549 Node: TTY keys185957
Node: Interaction186158 Node: Interaction187566
Node: Cooperation186555 Node: Cooperation187963
Node: Conflicts188422 Node: Conflicts189830
Node: Bugs190014 Node: Bugs191422
Node: Extensions and Hacking191637 Node: Extensions and Hacking193045
Node: Extensions192123 Node: Extensions193531
Node: Dynamic blocks193693 Node: Dynamic blocks195101
Node: History and Acknowledgments195620 Node: History and Acknowledgments197028
Node: Index200628 Node: Index202036
Node: Key Index227059 Node: Key Index228686
 
End Tag Table End Tag Table

135
org.el
View File

@ -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) (let (buffer-invisibility-spec) ; Emacs 21 compatibility
(org-set-tags nil t)) (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" (message "[a-z..]:Toggle [SPC] clear [RET] accept [TAB] free tag%s"
(if groups " [!] ignore goups" "")) (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) (while (re-search-forward org-bracket-link-regexp nil t)
(replace-match (concat "[[" (save-match-data (replace-match
(org-link-expand-abbrev (match-string 1))) (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

Binary file not shown.

118
org.texi
View File

@ -3,8 +3,8 @@
@setfilename ../info/org @setfilename ../info/org
@settitle Org Mode Manual @settitle Org Mode Manual
@set VERSION 4.51 @set VERSION 4.52
@set DATE September 2006 @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 If you have globally defined your preferred set of tags using the
also implements a much better method: @emph{fast tag selection}. This variable @code{org-tag-alist}, but would like to use a dynamic tag list
method allows to select and deselect tags with a single key per tag. To in a specific file: Just add an empty TAGS option line to that file:
function efficiently, you should assign unique keys to all tags. This
can be done globally with @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 tags which have no configured keys.}. In this interface, you can use
add or remove them from the list of tags in the current line. Selecting the following keys:
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 @table @kbd
variable @code{org-tag-alist}, but would like to use a dynamic tag list @item a-z...
in a specific file? Just add an empty TAGS option line to that file: 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
@example exclusive tags will turn off any other tags from that group.
#+TAGS: @kindex @key{TAB}
@end example @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 or @samp{-} is present. Examples:
headlines that are tagged @samp{:WORK:}, but discard those also tagged
@samp{:BOSS:}. The search string @samp{WORK|LAPTOP} selects all lines @table @samp
tagged @samp{:WORK:} or @samp{:LAPTOP:}. The string @item +WORK-BOSS
@samp{WORK|LAPTOP&NIGHT} requires that the @samp{:LAPTOP:} lines are Select all headlines that are tagged @samp{:WORK:}, but discard those also tagged
also tagged @samp{NIGHT}. @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

Binary file not shown.

View File

@ -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

View File

@ -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

View File

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