mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2025-01-27 20:22:00 +00:00
Merge branch 'master-agenda'
This commit is contained in:
commit
a3ed698dbb
39
doc/org.texi
39
doc/org.texi
@ -8793,6 +8793,8 @@ buffer).
|
||||
@kindex C-c a C
|
||||
@vindex org-agenda-custom-commands
|
||||
@cindex agenda views, main example
|
||||
@cindex agenda, as an agenda views
|
||||
@cindex agenda*, as an agenda views
|
||||
@cindex tags, as an agenda view
|
||||
@cindex todo, as an agenda view
|
||||
@cindex tags-todo
|
||||
@ -8803,13 +8805,15 @@ buffer).
|
||||
Custom commands are configured in the variable
|
||||
@code{org-agenda-custom-commands}. You can customize this variable, for
|
||||
example by pressing @kbd{C-c a C}. You can also directly set it with Emacs
|
||||
Lisp in @file{.emacs}. The following example contains all valid search
|
||||
types:
|
||||
Lisp in @file{.emacs}. The following example contains all valid agenda
|
||||
views:
|
||||
|
||||
@lisp
|
||||
@group
|
||||
(setq org-agenda-custom-commands
|
||||
'(("w" todo "WAITING")
|
||||
'(("x" agenda)
|
||||
("y" agenda*)
|
||||
("w" todo "WAITING")
|
||||
("W" todo-tree "WAITING")
|
||||
("u" tags "+boss-urgent")
|
||||
("v" tags-todo "+boss-urgent")
|
||||
@ -8835,6 +8839,15 @@ expression to be used for the matching. The example above will
|
||||
therefore define:
|
||||
|
||||
@table @kbd
|
||||
@item C-c a x
|
||||
as a global search for agenda entries planned@footnote{@emph{Planned} means
|
||||
here that these entries have some planning information attached to them, like
|
||||
a time-stamp, a scheduled or a deadline string. See
|
||||
@var{org-agenda-entry-types} on how to set what planning information will be
|
||||
taken into account.} this week/day.
|
||||
@item C-c a y
|
||||
as a global search for agenda entries planned this week/day, but only those
|
||||
with an hour specification like @code{[h]h:mm}---think of them as appointments.
|
||||
@item C-c a w
|
||||
as a global search for TODO entries with @samp{WAITING} as the TODO
|
||||
keyword
|
||||
@ -15931,14 +15944,18 @@ other block) with @code{org-narrow-to-block}.
|
||||
@vindex org-agenda-skip-function
|
||||
@vindex org-agenda-skip-function-global
|
||||
Org provides a special hook that can be used to narrow down the selection
|
||||
made by these agenda views: @code{agenda}, @code{todo}, @code{alltodo},
|
||||
@code{tags}, @code{tags-todo}, @code{tags-tree}. You may specify a function
|
||||
that is used at each match to verify if the match should indeed be part of
|
||||
the agenda view, and if not, how much should be skipped. You can specify a
|
||||
global condition that will be applied to all agenda views, this condition
|
||||
would be stored in the variable @code{org-agenda-skip-function-global}. More
|
||||
commonly, such a definition is applied only to specific custom searches,
|
||||
using @code{org-agenda-skip-function}.
|
||||
made by these agenda views: @code{agenda}, @code{agenda*}@footnote{The
|
||||
@code{agenda*} view is the same than @code{agenda} except that it only
|
||||
considers @emph{appointments}, i.e., scheduled and deadline items that have a
|
||||
time specification @code{[h]h:mm} in their time-stamps.}, @code{todo},
|
||||
@code{alltodo}, @code{tags}, @code{tags-todo}, @code{tags-tree}. You may
|
||||
specify a function that is used at each match to verify if the match should
|
||||
indeed be part of the agenda view, and if not, how much should be skipped.
|
||||
You can specify a global condition that will be applied to all agenda views,
|
||||
this condition would be stored in the variable
|
||||
@code{org-agenda-skip-function-global}. More commonly, such a definition is
|
||||
applied only to specific custom searches, using
|
||||
@code{org-agenda-skip-function}.
|
||||
|
||||
Let's say you want to produce a list of projects that contain a WAITING
|
||||
tag anywhere in the project tree. Let's further assume that you have
|
||||
|
@ -329,6 +329,8 @@ you can \"misuse\" it to also add other text to the header."
|
||||
(set :greedy t :value (:deadline :scheduled :timestamp :sexp)
|
||||
(const :deadline)
|
||||
(const :scheduled)
|
||||
(const :deadline*)
|
||||
(const :scheduled*)
|
||||
(const :timestamp)
|
||||
(const :sexp))))
|
||||
(list :tag "Standard skipping condition"
|
||||
@ -2709,6 +2711,8 @@ Pressing `<' twice means to restrict to the current subtree or region
|
||||
(cond
|
||||
((eq type 'agenda)
|
||||
(org-let lprops '(org-agenda-list current-prefix-arg)))
|
||||
((eq type 'agenda*)
|
||||
(org-let lprops '(org-agenda-list current-prefix-arg nil nil t)))
|
||||
((eq type 'alltodo)
|
||||
(org-let lprops '(org-todo-list current-prefix-arg)))
|
||||
((eq type 'search)
|
||||
@ -2866,6 +2870,7 @@ L Timeline for current buffer # List stuck projects (!=configure)
|
||||
(cond
|
||||
((string-match "\\S-" desc) desc)
|
||||
((eq type 'agenda) "Agenda for current week or day")
|
||||
((eq type 'agenda*) "Appointments for current week or day")
|
||||
((eq type 'alltodo) "List of all TODO entries")
|
||||
((eq type 'search) "Word search")
|
||||
((eq type 'stuck) "List of stuck projects")
|
||||
@ -3028,6 +3033,9 @@ L Timeline for current buffer # List stuck projects (!=configure)
|
||||
((eq type 'agenda)
|
||||
(org-let2 gprops lprops
|
||||
'(call-interactively 'org-agenda-list)))
|
||||
((eq type 'agenda*)
|
||||
(org-let2 gprops lprops
|
||||
'(funcall 'org-agenda-list nil nil t)))
|
||||
((eq type 'alltodo)
|
||||
(org-let2 gprops lprops
|
||||
'(call-interactively 'org-todo-list)))
|
||||
@ -4059,24 +4067,33 @@ This variable is a list of symbols that controls the types of
|
||||
items that appear in the daily/weekly agenda. Allowed symbols in this
|
||||
list are are
|
||||
|
||||
:timestamp List items containing a date stamp or date range matching
|
||||
the selected date. This includes sexp entries in
|
||||
angular brackets.
|
||||
:timestamp List items containing a date stamp or date range matching
|
||||
the selected date. This includes sexp entries in angular
|
||||
brackets.
|
||||
|
||||
:sexp List entries resulting from plain diary-like sexps.
|
||||
:sexp List entries resulting from plain diary-like sexps.
|
||||
|
||||
:deadline List deadline due on that date. When the date is today,
|
||||
also list any deadlines past due, or due within
|
||||
`org-deadline-warning-days'. `:deadline' must appear before
|
||||
`:scheduled' if the setting of
|
||||
`org-agenda-skip-scheduled-if-deadline-is-shown' is to have
|
||||
any effect.
|
||||
:deadline List deadline due on that date. When the date is today,
|
||||
also list any deadlines past due, or due within
|
||||
`org-deadline-warning-days'. `:deadline' must appear before
|
||||
`:scheduled' if the setting of
|
||||
`org-agenda-skip-scheduled-if-deadline-is-shown' is to have
|
||||
any effect.
|
||||
|
||||
:scheduled List all items which are scheduled for the given date.
|
||||
The diary for *today* also contains items which were
|
||||
scheduled earlier and are not yet marked DONE.
|
||||
:deadline* Same as above, but only include the deadline if it has an
|
||||
hour specification as [h]h:mm.
|
||||
|
||||
By default, all four types are turned on.
|
||||
:scheduled List all items which are scheduled for the given date.
|
||||
The diary for *today* also contains items which were
|
||||
scheduled earlier and are not yet marked DONE.
|
||||
|
||||
:scheduled* Same as above, but only include the scheduled item if it
|
||||
has an hour specification as [h]h:mm.
|
||||
|
||||
By default, all four non-starred types are turned on.
|
||||
|
||||
When :scheduled* or :deadline* are included, :schedule or :deadline
|
||||
will be ignored.
|
||||
|
||||
Never set this variable globally using `setq', because then it
|
||||
will apply to all future agenda commands. Instead, bind it with
|
||||
@ -4088,7 +4105,7 @@ the daily/weekly agenda, see `org-agenda-skip-function'.")
|
||||
|
||||
(defvar org-agenda-buffer-tmp-name nil)
|
||||
;;;###autoload
|
||||
(defun org-agenda-list (&optional arg start-day span)
|
||||
(defun org-agenda-list (&optional arg start-day span with-hour)
|
||||
"Produce a daily/weekly view from all files in variable `org-agenda-files'.
|
||||
The view will be for the current day or week, but from the overview buffer
|
||||
you will be able to go to other days/weeks.
|
||||
@ -4098,7 +4115,10 @@ span ARG days. Lisp programs should instead specify SPAN to change
|
||||
the number of days. SPAN defaults to `org-agenda-span'.
|
||||
|
||||
START-DAY defaults to TODAY, or to the most recent match for the weekday
|
||||
given in `org-agenda-start-on-weekday'."
|
||||
given in `org-agenda-start-on-weekday'.
|
||||
|
||||
When WITH-HOUR is non-nil, only include scheduled and deadline
|
||||
items if they have an hour specification like [h]h:mm."
|
||||
(interactive "P")
|
||||
(if org-agenda-overriding-arguments
|
||||
(setq arg (car org-agenda-overriding-arguments)
|
||||
@ -4148,7 +4168,7 @@ given in `org-agenda-start-on-weekday'."
|
||||
s e rtn rtnall file date d start-pos end-pos todayp
|
||||
clocktable-start clocktable-end filter)
|
||||
(setq org-agenda-redo-command
|
||||
(list 'org-agenda-list (list 'quote arg) start-day (list 'quote span)))
|
||||
(list 'org-agenda-list (list 'quote arg) start-day (list 'quote span) with-hour))
|
||||
(dotimes (n (1- ndays))
|
||||
(push (1+ (car day-numbers)) day-numbers))
|
||||
(setq day-numbers (nreverse day-numbers))
|
||||
@ -4191,9 +4211,26 @@ given in `org-agenda-start-on-weekday'."
|
||||
(catch 'nextfile
|
||||
(org-check-agenda-file file)
|
||||
(let ((org-agenda-entry-types org-agenda-entry-types))
|
||||
(unless org-agenda-include-deadlines
|
||||
;; Starred types override non-starred equivalents
|
||||
(when (member :deadline* org-agenda-entry-types)
|
||||
(setq org-agenda-entry-types
|
||||
(delq :deadline org-agenda-entry-types)))
|
||||
(when (member :scheduled* org-agenda-entry-types)
|
||||
(setq org-agenda-entry-types
|
||||
(delq :scheduled org-agenda-entry-types)))
|
||||
;; Honor with-hour
|
||||
(when with-hour
|
||||
(when (member :deadline org-agenda-entry-types)
|
||||
(setq org-agenda-entry-types
|
||||
(delq :deadline org-agenda-entry-types))
|
||||
(push :deadline* org-agenda-entry-types))
|
||||
(when (member :scheduled org-agenda-entry-types)
|
||||
(setq org-agenda-entry-types
|
||||
(delq :scheduled org-agenda-entry-types))
|
||||
(push :scheduled* org-agenda-entry-types)))
|
||||
(unless org-agenda-include-deadlines
|
||||
(setq org-agenda-entry-types
|
||||
(delq :deadline* (delq :deadline org-agenda-entry-types))))
|
||||
(cond
|
||||
((memq org-agenda-show-log-scoped '(only clockcheck))
|
||||
(setq rtn (org-agenda-get-day-entries
|
||||
@ -5243,12 +5280,19 @@ the documentation of `org-diary'."
|
||||
((eq arg :scheduled)
|
||||
(setq rtn (org-agenda-get-scheduled deadline-results))
|
||||
(setq results (append results rtn)))
|
||||
((eq arg :scheduled*)
|
||||
(setq rtn (org-agenda-get-scheduled deadline-results t))
|
||||
(setq results (append results rtn)))
|
||||
((eq arg :closed)
|
||||
(setq rtn (org-agenda-get-progress))
|
||||
(setq results (append results rtn)))
|
||||
((eq arg :deadline)
|
||||
(setq rtn (org-agenda-get-deadlines))
|
||||
(setq deadline-results (copy-sequence rtn))
|
||||
(setq results (append results rtn)))
|
||||
((eq arg :deadline*)
|
||||
(setq rtn (org-agenda-get-deadlines t))
|
||||
(setq deadline-results (copy-sequence rtn))
|
||||
(setq results (append results rtn))))))))
|
||||
results))))
|
||||
|
||||
@ -5909,8 +5953,10 @@ See also the user option `org-agenda-clock-consistency-checks'."
|
||||
;; Nope, this gap is not OK
|
||||
nil)))
|
||||
|
||||
(defun org-agenda-get-deadlines ()
|
||||
"Return the deadline information for agenda display."
|
||||
(defun org-agenda-get-deadlines (&optional with-hour)
|
||||
"Return the deadline information for agenda display.
|
||||
When WITH-HOUR is non-nil, only return deadlines with an hour
|
||||
specification like [h]h:mm."
|
||||
(let* ((props (list 'mouse-face 'highlight
|
||||
'org-not-done-regexp org-not-done-regexp
|
||||
'org-todo-regexp org-todo-regexp
|
||||
@ -5918,7 +5964,9 @@ See also the user option `org-agenda-clock-consistency-checks'."
|
||||
'help-echo
|
||||
(format "mouse-2 or RET jump to org file %s"
|
||||
(abbreviate-file-name buffer-file-name))))
|
||||
(regexp org-deadline-time-regexp)
|
||||
(regexp (if with-hour
|
||||
org-deadline-time-hour-regexp
|
||||
org-deadline-time-regexp))
|
||||
(todayp (org-agenda-todayp date)) ; DATE bound by calendar
|
||||
(d1 (calendar-absolute-from-gregorian date)) ; DATE bound by calendar
|
||||
(dl0 (car org-agenda-deadline-leaders))
|
||||
@ -6048,8 +6096,10 @@ FRACTION is what fraction of the head-warning time has passed."
|
||||
(while (setq f (pop faces))
|
||||
(if (>= fraction (car f)) (throw 'exit (cdr f)))))))
|
||||
|
||||
(defun org-agenda-get-scheduled (&optional deadline-results)
|
||||
"Return the scheduled information for agenda display."
|
||||
(defun org-agenda-get-scheduled (&optional deadline-results with-hour)
|
||||
"Return the scheduled information for agenda display.
|
||||
When WITH-HOUR is non-nil, only return scheduled items with
|
||||
an hour specification like [h]h:mm."
|
||||
(let* ((props (list 'org-not-done-regexp org-not-done-regexp
|
||||
'org-todo-regexp org-todo-regexp
|
||||
'org-complex-heading-regexp org-complex-heading-regexp
|
||||
@ -6058,7 +6108,9 @@ FRACTION is what fraction of the head-warning time has passed."
|
||||
'help-echo
|
||||
(format "mouse-2 or RET jump to org file %s"
|
||||
(abbreviate-file-name buffer-file-name))))
|
||||
(regexp org-scheduled-time-regexp)
|
||||
(regexp (if with-hour
|
||||
org-scheduled-time-hour-regexp
|
||||
org-scheduled-time-regexp))
|
||||
(todayp (org-agenda-todayp date)) ; DATE bound by calendar
|
||||
(d1 (calendar-absolute-from-gregorian date)) ; DATE bound by calendar
|
||||
mm
|
||||
@ -9764,7 +9816,8 @@ will only add headlines containing IMPORTANT or headlines
|
||||
belonging to the \"Work\" category.
|
||||
|
||||
ARGS are symbols indicating what kind of entries to consider.
|
||||
By default `org-agenda-to-appt' will use :deadline, :scheduled
|
||||
By default `org-agenda-to-appt' will use :deadline*, :scheduled*
|
||||
\(i.e., deadlines and scheduled items with a hh:mm specification)
|
||||
and :timestamp entries. See the docstring of `org-diary' for
|
||||
details and examples.
|
||||
|
||||
@ -9775,7 +9828,7 @@ to override `appt-message-warning-time'."
|
||||
(if (eq filter t)
|
||||
(setq filter (read-from-minibuffer "Regexp filter: ")))
|
||||
(let* ((cnt 0) ; count added events
|
||||
(scope (or args '(:deadline :scheduled :timestamp)))
|
||||
(scope (or args '(:deadline* :scheduled* :timestamp)))
|
||||
(org-agenda-new-buffers nil)
|
||||
(org-deadline-warning-days 0)
|
||||
;; Do not use `org-today' here because appt only takes
|
||||
@ -9797,7 +9850,10 @@ to override `appt-message-warning-time'."
|
||||
;; Map thru entries and find if we should filter them out
|
||||
(mapc
|
||||
(lambda(x)
|
||||
(let* ((evt (org-trim (or (get-text-property 1 'txt x) "")))
|
||||
(let* ((evt (org-trim
|
||||
(replace-regexp-in-string
|
||||
org-bracket-link-regexp "\\3"
|
||||
(or (get-text-property 1 'txt x) ""))))
|
||||
(cat (get-text-property 1 'org-category x))
|
||||
(tod (get-text-property 1 'time-of-day x))
|
||||
(ok (or (null filter)
|
||||
|
12
lisp/org.el
12
lisp/org.el
@ -4571,6 +4571,9 @@ Also put tags into group 4 if tags are present.")
|
||||
(defvar org-deadline-time-regexp nil
|
||||
"Matches the DEADLINE keyword together with a time stamp.")
|
||||
(make-variable-buffer-local 'org-deadline-time-regexp)
|
||||
(defvar org-deadline-time-hour-regexp nil
|
||||
"Matches the DEADLINE keyword together with a time-and-hour stamp.")
|
||||
(make-variable-buffer-local 'org-deadline-time-hour-regexp)
|
||||
(defvar org-deadline-line-regexp nil
|
||||
"Matches the DEADLINE keyword and the rest of the line.")
|
||||
(make-variable-buffer-local 'org-deadline-line-regexp)
|
||||
@ -4580,6 +4583,9 @@ Also put tags into group 4 if tags are present.")
|
||||
(defvar org-scheduled-time-regexp nil
|
||||
"Matches the SCHEDULED keyword together with a time stamp.")
|
||||
(make-variable-buffer-local 'org-scheduled-time-regexp)
|
||||
(defvar org-scheduled-time-hour-regexp nil
|
||||
"Matches the SCHEDULED keyword together with a time-and-hour stamp.")
|
||||
(make-variable-buffer-local 'org-scheduled-time-hour-regexp)
|
||||
(defvar org-closed-time-regexp nil
|
||||
"Matches the CLOSED keyword together with a time stamp.")
|
||||
(make-variable-buffer-local 'org-closed-time-regexp)
|
||||
@ -4988,12 +4994,18 @@ but the stars and the body are.")
|
||||
org-deadline-regexp (concat "\\<" org-deadline-string)
|
||||
org-deadline-time-regexp
|
||||
(concat "\\<" org-deadline-string " *<\\([^>]+\\)>")
|
||||
org-deadline-time-hour-regexp
|
||||
(concat "\\<" org-deadline-string
|
||||
" *<\\(.+[0-9]\\{1,2\\}:[0-9]\\{2\\}[^>]*\\)>")
|
||||
org-deadline-line-regexp
|
||||
(concat "\\<\\(" org-deadline-string "\\).*")
|
||||
org-scheduled-regexp
|
||||
(concat "\\<" org-scheduled-string)
|
||||
org-scheduled-time-regexp
|
||||
(concat "\\<" org-scheduled-string " *<\\([^>]+\\)>")
|
||||
org-scheduled-time-hour-regexp
|
||||
(concat "\\<" org-scheduled-string
|
||||
" *<\\(.+[0-9]\\{1,2\\}:[0-9]\\{2\\}[^>]*\\)>")
|
||||
org-closed-time-regexp
|
||||
(concat "\\<" org-closed-string " *\\[\\([^]]+\\)\\]")
|
||||
org-keyword-time-regexp
|
||||
|
Loading…
Reference in New Issue
Block a user