Allow temporary agenda display with inactive timestamps included.

You get this by pressing `[' in the agenda or timeline buffer.
This commit is contained in:
Carsten Dominik 2008-04-10 14:45:18 +02:00
parent 618f384864
commit cdccc089fa
4 changed files with 76 additions and 38 deletions

View File

@ -7,16 +7,19 @@
* Version 6.00
This is a new major release, mostly because of structural changes
in Org. However, there are also monay bug fixes and new features.
** Details
*** The Org distribution has a new structure
In the distribution files, the lisp files are now located in
a subdirectory "lisp", and the documentation files are
located in a subdirectory "doc". If you are running Org
directly from the unpacked distribtuion archive (zip or tar
file), you need to modify your settings for load-path
accordingly.
In the distribution files as well as in the git repository,
the lisp files are now located in a subdirectory "lisp", and
the documentation files are located in a subdirectory "doc".
If you are running Org directly from the unpacked
distribtuion archive (zip or tar file, or git repository),
you need to modify your settings for load-path accordingly.
*** Loading modules
@ -27,45 +30,61 @@
way part of Emacs), as well as contributed packages that will
only be available when you have installed them properly (most
likely by downloading the distribution and adding
/path/to/orgdir/contrib/lisp to your load path.
/path/to/orgdir/contrib/lisp to your load path).
*** New archiving mechanism: The Archive Sibling
There is a new method to archive entries in the current file:
By moving it to a sibling called the /Archive Sibling/. That
sibling has the heading "Archive" and also carries the ARCHIVE
tag. It seems to me that this is a great way to do archiving
inside a project, to get parts of the project out of the way
and to wait with true archiving (moving to another file)
until the entire project done. The key binding for the is
"C-c C-x A", and from the agenda buffer you can simply use
"A".
sibling has the heading "Archive" and also carries the
ARCHIVE tag. It seems to me that this is a great way to do
archiving inside a project, to get parts of the project out
of the way and to wait with true archiving (moving to another
file) until the entire project done. Archiving to a sibling
keep much of the context like inherited tags and approximate
tree position in tact, so Org is adding only a single
property, the ARCHIVE_TIME.
The key binding for the is "C-c C-x A", and from the agenda
buffer you can simply use "A".
Thanks to Ilya Shlyakhter for this rather clever idea.
*** Support for Sebastian Rose's Javasript org-info.js.
This fascinating program allows an Org file (exported to
HTML) to be viewed different ways. There is an Info-like
interface where you can jump through the sections of the
document with the `n' and `p' keys (and others). And there
is a folding interface where you can fold the document much
like you can fold it in org-mode in Emacs.
This fascinating program allows a completely new viewing
experience for web pages created from Org files, valuable in
particular for longish documents. The same document can be
viewed in differnet ways, and switching between the views as
well as navigation uses single-key commands.
To set this up, make sure the script is available in the same
location as your HTML file. Make sure that `org-infojs' is
loaded in `org-modules'. Then add a line
There is an Info-like interface where you can jump through
the sections of the document with the `n' and `p' keys (and
others). And there is a folding interface where you can fold
the document much like you can fold it in org-mode in Emacs,
and cycle throught the visibility both locally and globally.
To set this up, all you need to do is to make sure that
org-infojs.el gets loaded (customize the variable org-modules
to check). Then add this line to the buffer:
: #+INFOJS_OPT: view:info
to the buffer, that is all. The available views are:
In that line, you can configure the initial view and other
settings. Available views are =info= for the info-lke
interface, and =overview=, =content=, and =showall= for the
folding interface. See the manual for more details. The
JavaScript program is currently being served from
orgmode.org, and your exported HTML files will automatically
get it from there. However, you may want to be independent
of the existence and stability of orgmode.org and install a
copy locally. Then you need to change the path from which
the script is loaded, either by using something like
: #+INFOJS_OPT: view:info path:../scripts/org-info.js
or by configuring the variable =org-infojs-options=.
- =info=: like the Info program
- =overview=: Folding interface, only top-level headings seen
at startup.
- =content=: Folding interface, all headlines but no text
visible at startup.
- =showall=: Entire file visible at startup.
For details see the documentation provided by Sebastian Rose
together with org-info.js.

View File

@ -486,6 +486,9 @@ Needs to be set before org.el is loaded."
:group 'org-agenda-startup
:type 'boolean)
(defconst org-agenda-include-inactive-timestamps nil
"Non-nil means, include inactive time stamps in agenda and timeline.")
(defgroup org-agenda-windows nil
"Options concerning the windows used by the Agenda in Org Mode."
:tag "Org Agenda Windows"
@ -3082,17 +3085,18 @@ the documentation of `org-diary'."
".*?>"))
(regexp
(concat
(if org-agenda-include-inactive-timestamps "[[<]" "<")
(regexp-quote
(substring
(format-time-string
(car org-time-stamp-formats)
(apply 'encode-time ; DATE bound by calendar
(list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
0 11))
1 11))
"\\|\\(<[0-9]+-[0-9]+-[0-9]+[^>\n]+?\\+[0-9]+[dwmy]>\\)"
"\\|\\(<%%\\(([^>\n]+)\\)>\\)"))
marker hdmarker deadlinep scheduledp donep tmp priority category
ee txt timestr tags b0 b3 e3 head)
marker hdmarker deadlinep scheduledp clockp closedp inactivep
donep tmp priority category ee txt timestr tags b0 b3 e3 head)
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(setq b0 (match-beginning 0)
@ -3114,10 +3118,17 @@ the documentation of `org-diary'."
(- b0 org-ds-keyword-length))
b0)
timestr (if b3 "" (buffer-substring b0 (point-at-eol)))
inactivep (= (char-after b0) ?\[)
deadlinep (string-match org-deadline-regexp tmp)
scheduledp (string-match org-scheduled-regexp tmp)
closedp (and org-agenda-include-inactive-timestamps
(string-match org-closed-string tmp))
clockp (and org-agenda-include-inactive-timestamps
(or (string-match org-clock-string tmp)
(string-match "]-+\\'" tmp)))
donep (org-entry-is-done-p))
(if (or scheduledp deadlinep) (throw :skip t))
(if (or scheduledp deadlinep closedp clockp)
(throw :skip t))
(if (string-match ">" timestr)
;; substring should only run to end of time stamp
(setq timestr (substring timestr 0 (match-end 0))))
@ -3131,7 +3142,8 @@ the documentation of `org-diary'."
(setq head (match-string 1))
(and org-agenda-skip-timestamp-if-done donep (throw :skip t))
(setq txt (org-format-agenda-item
nil head category tags timestr nil
(if inactivep "[" nil)
head category tags timestr nil
remove-re)))
(setq txt org-agenda-no-heading-message))
(setq priority (org-get-priority txt))
@ -3914,6 +3926,11 @@ Negative selection means, regexp must not match for selection of an entry."
(org-agenda-manipulate-query ?\}))
(defun org-agenda-manipulate-query (char)
(cond
((memq org-agenda-type '(timeline agenda))
(if (y-or-n-p "Re-display with inactive time stamps included? ")
(let ((org-agenda-include-inactive-timestamps t))
(org-agenda-redo))
(error "Abort")))
((eq org-agenda-type 'search)
(org-add-to-string
'org-agenda-query-string
@ -3927,7 +3944,7 @@ Negative selection means, regexp must not match for selection of an entry."
(if (member char '(?\{ ?\})) 0 1))))
(set-register org-agenda-query-register org-agenda-query-string)
(org-agenda-redo))
(t (error "Canot manipulate query for %s-type agenda buffers"
(t (error "Cannot manipulate query for %s-type agenda buffers"
org-agenda-type))))
(defun org-add-to-string (var string)

View File

@ -207,7 +207,7 @@ we turn off invisibility temporarily. Use this in a `let' form."
(while (setq f (pop functions))
(or (fboundp f) (autoload f file d t)))))
(defmacro org-match-line (re)
(defun org-match-line (re)
"Looking-at at the beginning of the current line."
(save-excursion
(goto-char (point-at-bol))

View File

@ -2781,7 +2781,9 @@ means to push this value onto the list in the variable.")
(if (not org-done-keywords)
(setq org-done-keywords (list (org-last org-todo-keywords-1))))
(setq org-ds-keyword-length (+ 2 (max (length org-deadline-string)
(length org-scheduled-string)))
(length org-scheduled-string)
(length org-clock-string)
(length org-closed-string)))
org-drawer-regexp
(concat "^[ \t]*:\\("
(mapconcat 'regexp-quote org-drawers "\\|")