diff options
author | Bastien <bzg@gnu.org> | 2020-06-01 14:52:47 +0200 |
---|---|---|
committer | Bastien <bzg@gnu.org> | 2020-06-01 14:52:47 +0200 |
commit | efc12142b78c6f1b5711048b5f2ee2183e596702 (patch) | |
tree | 7907873694cbfb6c8f597779424f2d076ed90eac | |
parent | cc75b12e43c41fd580bf4720c768fe9db6ae00fc (diff) | |
download | org-mode-efc12142b78c6f1b5711048b5f2ee2183e596702.tar.gz |
Revert "New function org-agenda-filter-set"
This reverts commit e9b1b8fde5c4fd4f6ce9d1d25bcfe2d1f5de4eb0.
-rw-r--r-- | lisp/org-agenda.el | 100 |
1 files changed, 45 insertions, 55 deletions
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 38087ef..f07c3b8 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -7653,58 +7653,7 @@ consistency with the other filter commands." (if keep current nil))) (org-agenda-filter-apply org-agenda-effort-filter 'effort))))) -(defun org-agenda-filter-set (str &optional force-keep negate) - "Set agenda filter from string. -The string is parsed according to the rules described in -the `org-agenda-filter' command. - -If FORCE-KEEP is non-nil, add the new filter elements to the -existing ones." - (let* ((tag-list (org-agenda-get-represented-tags)) - (category-list (org-agenda-get-represented-categories)) - (keep (or force-keep - (if (string-match "^\\+[+-]" str) - (progn (setq str (substring str 1)) t)))) - (fc (if keep org-agenda-category-filter)) - (ft (if keep org-agenda-tag-filter)) - (fe (if keep org-agenda-effort-filter)) - (fr (if keep org-agenda-regexp-filter)) - pm s) - (while (string-match "^[ \t]*\\([-+]\\)?\\(\\([^-+<>=/ \t]+\\)\\|\\([<>=][0-9:]+\\)\\|\\(/\\([^/]+\\)/?\\)\\)" str) - (setq pm (if (match-beginning 1) (match-string 1 str) "+")) - (when negate - (setq pm (if (equal pm "+") "-" "+"))) - (cond - ((match-beginning 3) - ;; category or tag - (setq s (match-string 3 str)) - (cond - ((member s tag-list) - (add-to-list 'ft (concat pm s) 'append 'equal)) - ((member s category-list) - (add-to-list 'fc (concat pm s) 'append 'equal)) - (t (message - "`%s%s' filter ignored because tag/category is not represented" - pm s)))) - ((match-beginning 4) - ;; effort - (add-to-list 'fe (concat pm (match-string 4 str)) t 'equal)) - ((match-beginning 5) - ;; regexp - (add-to-list 'fr (concat pm (match-string 6 str)) t 'equal))) - (setq str (substring str (match-end 0)))) - (org-agenda-filter-remove-all) - (and fc (org-agenda-filter-apply - (setq org-agenda-category-filter fc) 'category)) - (and ft (org-agenda-filter-apply - (setq org-agenda-tag-filter ft) 'tag 'expand)) - (and fe (org-agenda-filter-apply - (setq org-agenda-effort-filter fe) 'effort)) - (and fr (org-agenda-filter-apply - (setq org-agenda-regexp-filter fr) 'regexp)) - (run-hooks 'org-agenda-filter-hook))) - -(defun org-agenda-filter (&optional strip-or-accumulate filter-string) +(defun org-agenda-filter (&optional strip-or-accumulate) "Prompt for a general filter string and apply it to the agenda. The string may contain filter elements like @@ -7751,7 +7700,9 @@ the variable `org-agenda-auto-exclude-function'." (unless (null org-agenda-tag-filter) (org-agenda-filter-apply org-agenda-tag-filter 'tag 'expand))) ;; Prompt for a filter and act - (let* ((negate (equal strip-or-accumulate '(4))) + (let* ((tag-list (org-agenda-get-represented-tags)) + (category-list (org-agenda-get-represented-categories)) + (negate (equal strip-or-accumulate '(4))) (cf (mapconcat #'identity org-agenda-category-filter "")) (tf (mapconcat #'identity org-agenda-tag-filter "")) (rpl-fn (lambda (c) (replace-regexp-in-string "^\+" "" (or (car c) "")))) @@ -7764,8 +7715,47 @@ the variable `org-agenda-auto-exclude-function'." " [+cat-tag<0:10-/regexp/]: ") 'org-agenda-filter-completion-function nil nil ff)) - (keep (equal strip-or-accumulate '(16)))) - (org-agenda-filter-set f-string keep negate)))) + (keep (or (if (string-match "^\\+[+-]" f-string) + (progn (setq f-string (substring f-string 1)) t)) + (equal strip-or-accumulate '(16)))) + (fc (if keep org-agenda-category-filter)) + (ft (if keep org-agenda-tag-filter)) + (fe (if keep org-agenda-effort-filter)) + (fr (if keep org-agenda-regexp-filter)) + pm s) + (while (string-match "^[ \t]*\\([-+]\\)?\\(\\([^-+<>=/ \t]+\\)\\|\\([<>=][0-9:]+\\)\\|\\(/\\([^/]+\\)/?\\)\\)" f-string) + (setq pm (if (match-beginning 1) (match-string 1 f-string) "+")) + (when negate + (setq pm (if (equal pm "+") "-" "+"))) + (cond + ((match-beginning 3) + ;; category or tag + (setq s (match-string 3 f-string)) + (cond + ((member s tag-list) + (add-to-list 'ft (concat pm s) 'append 'equal)) + ((member s category-list) + (add-to-list 'fc (concat pm s) 'append 'equal)) + (t (message + "`%s%s' filter ignored because tag/category is not represented" + pm s)))) + ((match-beginning 4) + ;; effort + (add-to-list 'fe (concat pm (match-string 4 f-string)) t 'equal)) + ((match-beginning 5) + ;; regexp + (add-to-list 'fr (concat pm (match-string 6 f-string)) t 'equal))) + (setq f-string (substring f-string (match-end 0)))) + (org-agenda-filter-remove-all) + (and fc (org-agenda-filter-apply + (setq org-agenda-category-filter fc) 'category)) + (and ft (org-agenda-filter-apply + (setq org-agenda-tag-filter ft) 'tag 'expand)) + (and fe (org-agenda-filter-apply + (setq org-agenda-effort-filter fe) 'effort)) + (and fr (org-agenda-filter-apply + (setq org-agenda-regexp-filter fr) 'regexp)) + (run-hooks 'org-agenda-filter-hook)))) (defun org-agenda-filter-completion-function (string _predicate &optional flag) "Complete a complex filter string. |