@@ -2276,6 +2276,7 @@ When nil, `q' will kill the single agenda buffer."
22762276 org-agenda-top-headline-filter
22772277 org-agenda-regexp-filter
22782278 org-agenda-effort-filter
2279+ org-agenda-filters-preset
22792280 org-agenda-markers
22802281 org-agenda-last-search-view-search-was-boolean
22812282 org-agenda-last-indirect-buffer
@@ -2929,10 +2930,6 @@ Pressing `<' twice means to restrict to the current subtree or region
29292930 (setq org-agenda-restrict nil)
29302931 (move-marker org-agenda-restrict-begin nil)
29312932 (move-marker org-agenda-restrict-end nil))
2932- ;; Delete old local properties
2933- (put 'org-agenda-redo-command 'org-lprops nil)
2934- ;; Delete previously set last-arguments
2935- (put 'org-agenda-redo-command 'last-args nil)
29362933 ;; Remember where this call originated
29372934 (setq org-agenda-last-dispatch-buffer (current-buffer))
29382935 (unless org-keys
@@ -2981,7 +2978,6 @@ Pressing `<' twice means to restrict to the current subtree or region
29812978 (setq org-agenda-buffer-name
29822979 (or (and (stringp org-match) (format "*Org Agenda(%s:%s)*" org-keys org-match))
29832980 (format "*Org Agenda(%s)*" org-keys))))
2984- (put 'org-agenda-redo-command 'org-lprops lprops)
29852981 (cl-progv
29862982 (mapcar #'car lprops)
29872983 (mapcar (lambda (binding) (eval (cadr binding) t)) lprops)
@@ -3016,7 +3012,10 @@ Pressing `<' twice means to restrict to the current subtree or region
30163012 (funcall type org-match))
30173013 ;; FIXME: Will signal an error since it's not `functionp'!
30183014 ((pred fboundp) (funcall type org-match))
3019- (_ (user-error "Invalid custom agenda command type %s" type)))))
3015+ (_ (user-error "Invalid custom agenda command type %s" type))))
3016+ (let ((inhibit-read-only t))
3017+ (add-text-properties (point-min) (point-max)
3018+ `(org-lprops ,lprops))))
30203019 (org-agenda-run-series (nth 1 entry) (cddr entry))))
30213020 ((equal org-keys "C")
30223021 (setq org-agenda-custom-commands org-agenda-custom-commands-orig)
@@ -3808,6 +3807,10 @@ the entire agenda view. In a block agenda, it will not work reliably to
38083807define a filter for one of the individual blocks. You need to set it in
38093808the global options and expect it to be applied to the entire view.")
38103809
3810+ (defvar org-agenda-filters-preset nil
3811+ "Alist of filter types and associated preset of filters.
3812+ This variable is local in `org-agenda' buffers. See `org-agenda-local-vars'.")
3813+
38113814(defconst org-agenda-filter-variables
38123815 '((category . org-agenda-category-filter)
38133816 (tag . org-agenda-tag-filter)
@@ -3818,7 +3821,7 @@ the global options and expect it to be applied to the entire view.")
38183821 "Is any filter active?"
38193822 (cl-some (lambda (x)
38203823 (or (symbol-value (cdr x))
3821- (get :preset-filter x )))
3824+ (assoc-default (car x) org-agenda-filters-preset )))
38223825 org-agenda-filter-variables))
38233826
38243827(defvar org-agenda-category-filter-preset nil
@@ -3927,25 +3930,13 @@ FILTER-ALIST is an alist of filters we need to apply when
39273930 (cat . ,org-agenda-category-filter))))))
39283931 (if (org-agenda-use-sticky-p)
39293932 (progn
3930- (put 'org-agenda-tag-filter :preset-filter nil)
3931- (put 'org-agenda-category-filter :preset-filter nil)
3932- (put 'org-agenda-regexp-filter :preset-filter nil)
3933- (put 'org-agenda-effort-filter :preset-filter nil)
39343933 ;; Popup existing buffer
39353934 (org-agenda-prepare-window (get-buffer org-agenda-buffer-name)
39363935 filter-alist)
39373936 (message "Sticky Agenda buffer, use `r' to refresh")
39383937 (or org-agenda-multi (org-agenda-fit-window-to-buffer))
39393938 (throw 'exit "Sticky Agenda buffer, use `r' to refresh"))
39403939 (setq org-todo-keywords-for-agenda nil)
3941- (put 'org-agenda-tag-filter :preset-filter
3942- org-agenda-tag-filter-preset)
3943- (put 'org-agenda-category-filter :preset-filter
3944- org-agenda-category-filter-preset)
3945- (put 'org-agenda-regexp-filter :preset-filter
3946- org-agenda-regexp-filter-preset)
3947- (put 'org-agenda-effort-filter :preset-filter
3948- org-agenda-effort-filter-preset)
39493940 (if org-agenda-multi
39503941 (progn
39513942 (setq buffer-read-only nil)
@@ -3970,7 +3961,12 @@ FILTER-ALIST is an alist of filters we need to apply when
39703961 (setq org-agenda-buffer (current-buffer))
39713962 (setq org-agenda-contributing-files nil)
39723963 (setq org-agenda-columns-active nil)
3973- (org-agenda-prepare-buffers (org-agenda-files nil 'ifmode))
3964+ (setq org-agenda-filters-preset
3965+ `((tag . ,org-agenda-tag-filter-preset)
3966+ (category . ,org-agenda-category-filter-preset)
3967+ (regexp . ,org-agenda-regexp-filter-preset)
3968+ (effort . ,org-agenda-effort-filter-preset)))
3969+ (org-agenda-prepare-buffers (org-agenda-files nil 'ifmode))
39743970 (setq org-todo-keywords-for-agenda
39753971 (org-uniquify org-todo-keywords-for-agenda))
39763972 (setq org-done-keywords-for-agenda
@@ -4040,24 +4036,24 @@ agenda display, configure `org-agenda-finalize-hook'."
40404036 org-agenda-top-headline-filter))
40414037 (when org-agenda-tag-filter
40424038 (org-agenda-filter-apply org-agenda-tag-filter 'tag t))
4043- (when (get ' org-agenda-tag-filter : preset-filter )
4039+ (when (assoc-default 'tag org-agenda-filters- preset)
40444040 (org-agenda-filter-apply
4045- (get ' org-agenda-tag-filter : preset-filter ) 'tag t))
4041+ (assoc-default 'tag org-agenda-filters- preset) 'tag t))
40464042 (when org-agenda-category-filter
40474043 (org-agenda-filter-apply org-agenda-category-filter 'category))
4048- (when (get ' org-agenda-category-filter : preset-filter )
4044+ (when (assoc-default 'category org-agenda-filters- preset)
40494045 (org-agenda-filter-apply
4050- (get ' org-agenda-category-filter : preset-filter ) 'category))
4046+ (assoc-default 'category org-agenda-filters- preset) 'category))
40514047 (when org-agenda-regexp-filter
40524048 (org-agenda-filter-apply org-agenda-regexp-filter 'regexp))
4053- (when (get ' org-agenda-regexp-filter : preset-filter )
4049+ (when (assoc-default 'regexp org-agenda-filters- preset)
40544050 (org-agenda-filter-apply
4055- (get ' org-agenda-regexp-filter : preset-filter ) 'regexp))
4051+ (assoc-default 'regexp org-agenda-filters- preset) 'regexp))
40564052 (when org-agenda-effort-filter
40574053 (org-agenda-filter-apply org-agenda-effort-filter 'effort))
4058- (when (get ' org-agenda-effort-filter : preset-filter )
4054+ (when (assoc-default 'effort org-agenda-filters- preset)
40594055 (org-agenda-filter-apply
4060- (get ' org-agenda-effort-filter : preset-filter ) 'effort))
4056+ (assoc-default 'effort org-agenda-filters- preset) 'effort))
40614057 (add-hook 'kill-buffer-hook #'org-agenda-reset-markers 'append 'local))
40624058 (run-hooks 'org-agenda-finalize-hook))))
40634059
@@ -8098,19 +8094,19 @@ in the agenda."
80988094 org-agenda-buffer-name))
80998095 (org-agenda-keep-modes t)
81008096 (tag-filter org-agenda-tag-filter)
8101- (tag-preset (get ' org-agenda-tag-filter : preset-filter ))
8097+ (tag-preset (assoc-default 'tag org-agenda-filters- preset))
81028098 (top-hl-filter org-agenda-top-headline-filter)
81038099 (cat-filter org-agenda-category-filter)
8104- (cat-preset (get ' org-agenda-category-filter : preset-filter ))
8100+ (cat-preset (assoc-default 'category org-agenda-filters- preset))
81058101 (re-filter org-agenda-regexp-filter)
8106- (re-preset (get ' org-agenda-regexp-filter : preset-filter ))
8102+ (re-preset (assoc-default 'regexp org-agenda-filters- preset))
81078103 (effort-filter org-agenda-effort-filter)
8108- (effort-preset (get ' org-agenda-effort-filter : preset-filter ))
8104+ (effort-preset (assoc-default 'effort org-agenda-filters- preset))
81098105 (org-agenda-tag-filter-while-redo (or tag-filter tag-preset))
81108106 (cols org-agenda-columns-active)
81118107 (line (org-current-line))
81128108 (window-line (- line (org-current-line (window-start))))
8113- (lprops (get 'org-agenda-redo-command 'org-lprops))
8109+ (lprops (get-text-property p 'org-lprops))
81148110 (redo-cmd (get-text-property p 'org-redo-cmd))
81158111 (last-args (get-text-property p 'org-last-args))
81168112 (org-agenda-overriding-cmd (get-text-property p 'org-series-cmd))
@@ -8121,18 +8117,16 @@ in the agenda."
81218117 ((stringp last-args)
81228118 last-args))))
81238119 (series-redo-cmd (get-text-property p 'org-series-redo-cmd)))
8124- (put 'org-agenda-tag-filter :preset-filter nil)
8125- (put 'org-agenda-category-filter :preset-filter nil)
8126- (put 'org-agenda-regexp-filter :preset-filter nil)
8127- (put 'org-agenda-effort-filter :preset-filter nil)
81288120 (and cols (org-columns-quit))
81298121 (message "Rebuilding agenda buffer...")
81308122 (if series-redo-cmd
81318123 (eval series-redo-cmd t)
81328124 (cl-progv
81338125 (mapcar #'car lprops)
81348126 (mapcar (lambda (binding) (eval (cadr binding) t)) lprops)
8135- (eval redo-cmd t)))
8127+ (eval redo-cmd t))
8128+ (let ((inhibit-read-only t))
8129+ (add-text-properties (point-min) (point-max) `(org-lprops ,lprops))))
81368130 (setq org-agenda-undo-list nil
81378131 org-agenda-pending-undo-list nil
81388132 org-agenda-tag-filter tag-filter
@@ -8141,10 +8135,6 @@ in the agenda."
81418135 org-agenda-effort-filter effort-filter
81428136 org-agenda-top-headline-filter top-hl-filter)
81438137 (message "Rebuilding agenda buffer...done")
8144- (put 'org-agenda-tag-filter :preset-filter tag-preset)
8145- (put 'org-agenda-category-filter :preset-filter cat-preset)
8146- (put 'org-agenda-regexp-filter :preset-filter re-preset)
8147- (put 'org-agenda-effort-filter :preset-filter effort-preset)
81488138 (let ((tag (or tag-filter tag-preset))
81498139 (cat (or cat-filter cat-preset))
81508140 (effort (or effort-filter effort-preset))
@@ -8540,7 +8530,7 @@ also press `-' or `+' to switch between filtering and excluding."
85408530 (org-agenda-filter-apply org-agenda-tag-filter 'tag expand))))
85418531 ((eq char ?\\)
85428532 (org-agenda-filter-show-all-tag)
8543- (when (get ' org-agenda-tag-filter : preset-filter )
8533+ (when (assoc-default 'tag org-agenda-filters- preset)
85448534 (org-agenda-filter-apply org-agenda-tag-filter 'tag expand)))
85458535 ((eq char ?.)
85468536 (setq org-agenda-tag-filter
@@ -8613,7 +8603,7 @@ grouptags."
86138603 ((eq type 'tag)
86148604 (setq filter
86158605 (delete-dups
8616- (append (get ' org-agenda-tag-filter : preset-filter )
8606+ (append (assoc-default 'tag org-agenda-filters- preset)
86178607 filter)))
86188608 (dolist (x filter)
86198609 (let ((op (string-to-char x)))
@@ -8625,7 +8615,7 @@ grouptags."
86258615 ((eq type 'category)
86268616 (setq filter
86278617 (delete-dups
8628- (append (get ' org-agenda-category-filter : preset-filter )
8618+ (append (assoc-default 'category org-agenda-filters- preset)
86298619 filter)))
86308620 (dolist (x filter)
86318621 (if (equal "-" (substring x 0 1))
@@ -8636,7 +8626,7 @@ grouptags."
86368626 ((eq type 'regexp)
86378627 (setq filter
86388628 (delete-dups
8639- (append (get ' org-agenda-regexp-filter : preset-filter )
8629+ (append (assoc-default 'regexp org-agenda-filters- preset)
86408630 filter)))
86418631 (dolist (x filter)
86428632 (if (equal "-" (substring x 0 1))
@@ -8647,7 +8637,7 @@ grouptags."
86478637 ((eq type 'effort)
86488638 (setq filter
86498639 (delete-dups
8650- (append (get ' org-agenda-effort-filter : preset-filter )
8640+ (append (assoc-default 'effort org-agenda-filters- preset)
86518641 filter)))
86528642 (dolist (x filter)
86538643 (push (org-agenda-filter-effort-form x) f))))
@@ -9340,50 +9330,50 @@ When called with a prefix argument, include all archive files as well."
93409330 (t ""))
93419331 (if (org-agenda-filter-any) " " "")
93429332 (if (or org-agenda-category-filter
9343- (get ' org-agenda-category-filter : preset-filter ))
9333+ (assoc-default 'category org-agenda-filters- preset))
93449334 '(:eval (propertize
93459335 (concat "["
93469336 (mapconcat
93479337 #'identity
93489338 (append
9349- (get ' org-agenda-category-filter : preset-filter )
9339+ (assoc-default 'category org-agenda-filters- preset)
93509340 org-agenda-category-filter)
93519341 "")
93529342 "]")
93539343 'face 'org-agenda-filter-category
93549344 'help-echo "Category used in filtering"))
93559345 "")
93569346 (if (or org-agenda-tag-filter
9357- (get ' org-agenda-tag-filter : preset-filter ))
9347+ (assoc-default 'tag org-agenda-filters- preset))
93589348 '(:eval (propertize
93599349 (concat (mapconcat
93609350 #'identity
93619351 (append
9362- (get ' org-agenda-tag-filter : preset-filter )
9352+ (assoc-default 'tag org-agenda-filters- preset)
93639353 org-agenda-tag-filter)
93649354 ""))
93659355 'face 'org-agenda-filter-tags
93669356 'help-echo "Tags used in filtering"))
93679357 "")
93689358 (if (or org-agenda-effort-filter
9369- (get ' org-agenda-effort-filter : preset-filter ))
9359+ (assoc-default 'effort org-agenda-filters- preset))
93709360 '(:eval (propertize
93719361 (concat (mapconcat
93729362 #'identity
93739363 (append
9374- (get ' org-agenda-effort-filter : preset-filter )
9364+ (assoc-default 'effort org-agenda-filters- preset)
93759365 org-agenda-effort-filter)
93769366 ""))
93779367 'face 'org-agenda-filter-effort
93789368 'help-echo "Effort conditions used in filtering"))
93799369 "")
93809370 (if (or org-agenda-regexp-filter
9381- (get ' org-agenda-regexp-filter : preset-filter ))
9371+ (assoc-default 'regexp org-agenda-filters- preset))
93829372 '(:eval (propertize
93839373 (concat (mapconcat
93849374 (lambda (x) (concat (substring x 0 1) "/" (substring x 1) "/"))
93859375 (append
9386- (get ' org-agenda-regexp-filter : preset-filter )
9376+ (assoc-default 'regexp org-agenda-filters- preset)
93879377 org-agenda-regexp-filter)
93889378 ""))
93899379 'face 'org-agenda-filter-regexp
@@ -11235,10 +11225,10 @@ current HH:MM time."
1123511225 (,org-agenda-category-filter category)
1123611226 (,org-agenda-regexp-filter regexp)
1123711227 (,org-agenda-effort-filter effort)
11238- (,(get ' org-agenda-tag-filter : preset-filter ) tag)
11239- (,(get ' org-agenda-category-filter : preset-filter ) category)
11240- (,(get ' org-agenda-effort-filter : preset-filter ) effort)
11241- (,(get ' org-agenda-regexp-filter : preset-filter ) regexp))))
11228+ (,(assoc-default 'tag org-agenda-filters- preset) tag)
11229+ (,(assoc-default 'category org-agenda-filters- preset) category)
11230+ (,(assoc-default 'effort org-agenda-filters- preset) effort)
11231+ (,(assoc-default 'regexp org-agenda-filters- preset) regexp))))
1124211232
1124311233(defun org-agenda-drag-line-forward (arg &optional backward)
1124411234 "Drag an agenda line forward by ARG lines.
0 commit comments