diff options
author | Bastien Guerry <bzg@altern.org> | 2013-04-05 08:36:17 +0200 |
---|---|---|
committer | Bastien Guerry <bzg@altern.org> | 2013-04-05 08:37:51 +0200 |
commit | 618277cf939a04ba351e61307d915c32ab9539bb (patch) | |
tree | b0c881fdff81b3b054c1d823a7af15d7dc3abd80 | |
parent | 3ad43055bf63b70fb0ba7c4f348c08bdb3cc412a (diff) | |
download | org-mode-618277cf939a04ba351e61307d915c32ab9539bb.tar.gz |
org-agenda.el (org-agenda-limit-interactively): New command
* org-agenda.el (org-agenda-dim-blocked-tasks): Enhance
docstring.
(org-agenda-finalize-entries): Conditionally apply limits so
that we don't manipulate big lists uselessly.
(org-agenda-limit-entries): Limit exclusively. E.g., when
limiting to a maximum of "2 tags", don't limit among tagged
entries only, but limit among all entries.
(org-agenda-limit-interactively): New command.
(org-agenda-mode-map): Bind the new command to "~".
(org-agenda-redo): Small fix: don't use `eval'.
-rw-r--r-- | lisp/org-agenda.el | 63 |
1 files changed, 44 insertions, 19 deletions
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 8db53b1..f40d733 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -2293,6 +2293,7 @@ The following commands are available: (org-defkey org-agenda-mode-map "=" 'org-agenda-filter-by-regexp) (org-defkey org-agenda-mode-map "|" 'org-agenda-filter-remove-all) (org-defkey org-agenda-mode-map "\\" 'org-agenda-filter-by-tag-refine) +(org-defkey org-agenda-mode-map "~" 'org-agenda-limit-interactively) (org-defkey org-agenda-mode-map "<" 'org-agenda-filter-by-category) (org-defkey org-agenda-mode-map "^" 'org-agenda-filter-by-top-category) (org-defkey org-agenda-mode-map ";" 'org-timer-set-timer) @@ -3792,7 +3793,9 @@ generating a new one." (overlay-put ov 'org-type 'org-priority))))) (defun org-agenda-dim-blocked-tasks (&optional invisible) - "Dim currently blocked TODO's in the agenda display." + "Dim currently blocked TODO's in the agenda display. +When INVISIBLE is non-nil, hide currently blocked TODO instead of +dimming them." (interactive "P") (when (org-called-interactively-p 'interactive) (message "Dim or hide blocked tasks...")) @@ -6789,26 +6792,48 @@ The optional argument TYPE tells the agenda type." (mapcar org-agenda-before-sorting-filter-function list)))) (setq list (mapcar 'org-agenda-highlight-todo list) - list (mapcar 'identity (sort list 'org-entries-lessp)) - list (org-agenda-limit-entries - list 'effort-minutes max-effort 'identity) - list (org-agenda-limit-entries list 'todo-state max-todo) - list (org-agenda-limit-entries list 'tags max-tags) - list (org-agenda-limit-entries list 'org-hd-marker max-entries) - list (mapconcat 'identity list "\n")))) + list (mapcar 'identity (sort list 'org-entries-lessp))) + (when max-effort + (setq list (org-agenda-limit-entries + list 'effort-minutes max-effort 'identity))) + (when max-todo + (setq list (org-agenda-limit-entries list 'todo-state max-todo))) + (when max-tags + (setq list (org-agenda-limit-entries list 'tags max-tags))) + (when max-entries + (setq list (org-agenda-limit-entries list 'org-hd-marker max-entries))) + (mapconcat 'identity list "\n"))) (defun org-agenda-limit-entries (list prop limit &optional fn) "Limit the number of agenda entries." - (if limit - (let ((f (or fn (lambda (p) (and p 1)))) (lim 0)) - (delq nil - (mapcar - (lambda (e) - (let ((pval (funcall f (get-text-property 1 prop e)))) - (if pval (setq lim (+ lim pval))) - (if (or (not pval) (<= lim limit)) e))) - list))) - list)) + (let ((include (and limit (< limit 0)))) + (if limit + (let ((fun (or fn (lambda (p) (if p 1)))) + (lim 0)) + (delq nil + (mapcar + (lambda (e) + (let ((pval (funcall fun (get-text-property 1 prop e)))) + (if pval (setq lim (+ lim pval))) + (cond ((and pval (<= lim (abs limit))) e) + ((and include (not pval)) e)))) + list))) + list))) + +(defun org-agenda-limit-interactively () + "In agenda, interactively limit entries to various maximums." + (interactive) + (let* ((max (read-char "Number of [e]ntries [t]odos [T]ags [E]ffort? ")) + (num (string-to-number (read-from-minibuffer "How many? ")))) + (cond ((equal max ?e) + (let ((org-agenda-max-entries num)) (org-agenda-redo))) + ((equal max ?t) + (let ((org-agenda-max-todos num)) (org-agenda-redo))) + ((equal max ?T) + (let ((org-agenda-max-tags num)) (org-agenda-redo))) + ((equal max ?E) + (let ((org-agenda-max-effort num)) (org-agenda-redo))))) + (org-agenda-fit-window-to-buffer)) (defun org-agenda-highlight-todo (x) (let ((org-done-keywords org-done-keywords-for-agenda) @@ -7226,7 +7251,7 @@ in the agenda." (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval series-redo-cmd) - (org-let lprops '(eval redo-cmd))) + (org-let lprops redo-cmd)) (setq org-agenda-undo-list nil org-agenda-pending-undo-list nil org-agenda-tag-filter tag-filter |