emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* How to detect current in logbook drawer?
@ 2020-08-14  4:46 numbchild
  2020-08-14  5:14 ` Ihor Radchenko
  0 siblings, 1 reply; 13+ messages in thread
From: numbchild @ 2020-08-14  4:46 UTC (permalink / raw)
  To: Org-mode

[-- Attachment #1: Type: text/plain, Size: 880 bytes --]

I have a org-mode extension:
https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71

It will beautify links with text-properties.

When I toggle org-log-mode and related options in org-agenda buffer. I
found my org-link-beautify will caused long time suspend and no stop. After
debug, I found org-link-beautify text-property caused this problem.

I want to get around this problem. So need to know how to detect currently
in logbook drawer or something else which used to record clocking note,
`org-add-note`, etc.

Or maybe org-agenda upstream can do something to work around this
text-properties issue?

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/

[-- Attachment #2: Type: text/html, Size: 2131 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-14  4:46 How to detect current in logbook drawer? numbchild
@ 2020-08-14  5:14 ` Ihor Radchenko
  2020-08-15  5:12   ` numbchild
  2020-08-15  5:34   ` numbchild
  0 siblings, 2 replies; 13+ messages in thread
From: Ihor Radchenko @ 2020-08-14  5:14 UTC (permalink / raw)
  To: numbchild@gmail.com, Org-mode

> I want to get around this problem. So need to know how to detect currently
> in logbook drawer or something else which used to record clocking note,
> `org-add-note`, etc.

You may try to use `org-logbook-drawer-re'.

> When I toggle org-log-mode and related options in org-agenda buffer. I
> found my org-link-beautify will caused long time suspend and no stop. After
> debug, I found org-link-beautify text-property caused this problem.

Could you provide more details how your text property is causing the
problem in org-agenda? Which function in agenda is slow?

Best,
Ihor


"numbchild@gmail.com" <numbchild@gmail.com> writes:

> I have a org-mode extension:
> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
>
> It will beautify links with text-properties.
>
> When I toggle org-log-mode and related options in org-agenda buffer. I
> found my org-link-beautify will caused long time suspend and no stop. After
> debug, I found org-link-beautify text-property caused this problem.
>
> I want to get around this problem. So need to know how to detect currently
> in logbook drawer or something else which used to record clocking note,
> `org-add-note`, etc.
>
> Or maybe org-agenda upstream can do something to work around this
> text-properties issue?
>
> [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> IRC(freeenode): stardiviner                     Twitter:  @numbchild
> Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> Blog: http://stardiviner.github.io/


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-14  5:14 ` Ihor Radchenko
@ 2020-08-15  5:12   ` numbchild
  2020-08-15  6:01     ` Ihor Radchenko
  2020-08-15  5:34   ` numbchild
  1 sibling, 1 reply; 13+ messages in thread
From: numbchild @ 2020-08-15  5:12 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Org-mode

[-- Attachment #1: Type: text/plain, Size: 25466 bytes --]

Thanks for replying, Ihor. I will look into this regexp.

Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
but has long time suspend.

```
Debugger entered--Lisp error: (quit)

re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
17651 t)
  (while (re-search-forward org-link-any-re limit t) (let* ((start
(match-beginning 0)) (end (match-end 0)) (visible-start (or
(match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
(match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle) ((eq 91
(char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
org-highlight-links) (not (string-match-p org-element-paragraph-separate
(match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
(org-element-property :raw-link link-object)) (type (org-element-property
:type link-object)) (path (org-element-property :path link-object))
(properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
(org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at end) (if
(not (eq ... style)) (add-text-properties start end properties)
(remove-text-properties start end '...) (let (...) (add-text-properties
start visible-start hidden) (add-text-properties visible-start visible-end
properties) (add-text-properties visible-end end hidden)
(org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at visible-end)))
(let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
  (catch :exit (while (re-search-forward org-link-any-re limit t) (let*
((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
(match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
(match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...) 'bracket) (t
'plain)))) (if (and (memq style org-highlight-links) (not (string-match-p
org-element-paragraph-separate (match-string 0))) (not (and (eq style ...)
(let ... ...)))) (progn (let* ((link-object ...) (link ...) (type ...)
(path ...) (properties ...)) (org-remove-flyspell-overlays-in start end)
(org-rear-nonsticky-at end) (if (not ...) (add-text-properties start end
properties) (remove-text-properties start end ...) (let ... ... ... ... ...
...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
  org-activate-links(17651)
  (while (org-activate-links (point-max)) (goto-char (match-end 0)))
  (save-excursion (while (org-activate-links (point-max)) (goto-char
(match-end 0))))
  (save-excursion (goto-char (point-min)) (save-excursion (while
(org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
org-agenda-with-colors nil (remove-text-properties (point-min) (point-max)
'(face nil))) (if (and (boundp 'org-overriding-columns-format)
org-overriding-columns-format) (progn (set (make-local-variable
'org-local-columns-format) org-overriding-columns-format))) (if
org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
org-agenda-fontify-priorities (progn (org-agenda-fontify-priorities))) (if
(and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
(org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
(org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
(save-excursion (next-single-property-change (point-min) 'org-habit-p)))
(progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
(org-get-at-bol 'org-agenda-type)) (if (or (eq
org-agenda-show-inherited-tags 'always) (and (listp
org-agenda-show-inherited-tags) (memq org-agenda-type
org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags t)
(or (eq org-agenda-use-tag-inheritance t) (and (listp
org-agenda-use-tag-inheritance) (not (memq org-agenda-type
org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
(goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
(get-text-property ... ...)) (progn (put-text-property ... ... ...
...))))))) (setq org-agenda-represented-tags nil
org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
(progn (org-agenda-filter-top-headline-apply
org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
(org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-tag-filter :preset-filter) 'tag t))) (if
org-agenda-category-filter (progn (org-agenda-filter-apply
org-agenda-category-filter 'category))) (if (get
'org-agenda-category-filter :preset-filter) (progn (org-agenda-filter-apply
(get 'org-agenda-category-filter :preset-filter) 'category))) (if
org-agenda-regexp-filter (progn (org-agenda-filter-apply
org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
:preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
org-agenda-effort-filter (progn (org-agenda-filter-apply
org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
:preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
  (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min))
(save-excursion (while (org-activate-links (point-max)) (goto-char
(match-end 0)))) (if (eq org-agenda-remove-tags t) nil
(org-agenda-align-tags)) (if org-agenda-with-colors nil
(remove-text-properties (point-min) (point-max) '(face nil))) (if (and
(boundp 'org-overriding-columns-format) org-overriding-columns-format)
(progn (set (make-local-variable 'org-local-columns-format)
org-overriding-columns-format))) (if org-agenda-view-columns-initially
(progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
(org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
(org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
(org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
(featurep 'org-habit) (save-excursion (next-single-property-change
(point-min) 'org-habit-p))) (progn (org-habit-insert-consistency-graphs)))
(setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
org-agenda-show-inherited-tags 'always) (and (listp
org-agenda-show-inherited-tags) (memq org-agenda-type
org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags t)
(or (eq org-agenda-use-tag-inheritance t) (and (listp
org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
(save-excursion (goto-char (point-min)) (while (equal (forward-line) 0) (if
(setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
(progn (org-agenda-filter-top-headline-apply
org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
(org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-tag-filter :preset-filter) 'tag t))) (if
org-agenda-category-filter (progn (org-agenda-filter-apply
org-agenda-category-filter 'category))) (if (get
'org-agenda-category-filter :preset-filter) (progn (org-agenda-filter-apply
(get 'org-agenda-category-filter :preset-filter) 'category))) (if
org-agenda-regexp-filter (progn (org-agenda-filter-apply
org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
:preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
org-agenda-effort-filter (progn (org-agenda-filter-apply
org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
:preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
'org-agenda-finalize-hook))
  (if org-agenda-multi nil (let ((inhibit-read-only t)) (save-excursion
(goto-char (point-min)) (save-excursion (while (org-activate-links
(point-max)) (goto-char (match-end 0)))) (if (eq org-agenda-remove-tags t)
nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
(remove-text-properties (point-min) (point-max) '(face nil))) (if (and
(boundp 'org-overriding-columns-format) org-overriding-columns-format)
(progn (set (make-local-variable 'org-local-columns-format)
org-overriding-columns-format))) (if org-agenda-view-columns-initially
(progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
(org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
(org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
(org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
(featurep 'org-habit) (save-excursion (next-single-property-change
(point-min) 'org-habit-p))) (progn (org-habit-insert-consistency-graphs)))
(setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
org-agenda-show-inherited-tags 'always) (and (listp
org-agenda-show-inherited-tags) (memq org-agenda-type
org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags t)
(or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let (mrk)
(save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
...))))) (setq org-agenda-represented-tags nil
org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
(progn (org-agenda-filter-top-headline-apply
org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
(org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-tag-filter :preset-filter) 'tag t))) (if
org-agenda-category-filter (progn (org-agenda-filter-apply
org-agenda-category-filter 'category))) (if (get
'org-agenda-category-filter :preset-filter) (progn (org-agenda-filter-apply
(get 'org-agenda-category-filter :preset-filter) 'category))) (if
org-agenda-regexp-filter (progn (org-agenda-filter-apply
org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
:preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
org-agenda-effort-filter (progn (org-agenda-filter-apply
org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
:preset-filter) (progn (org-agenda-filter-apply (get
'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
'org-agenda-finalize-hook)))
  org-agenda-finalize()
  (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today
(org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays 14))
org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
(files thefiles) (start (if (or (null org-agenda-start-on-weekday) (< ndays
7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (- sd (+
... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay (not
debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1-
ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (cons (1+
(car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
(nreverse day-numbers)) (setq clocktable-start (car day-numbers)
clocktable-end (1+ (or (org-last day-numbers) 0))) (set
(make-local-variable 'org-starting-day) (car day-numbers)) (set
(make-local-variable 'org-arg-loc) arg) (set (make-local-variable
'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-last
day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week
d2))) (setq s (point)) (cond ((not org-agenda-overriding-header) (insert
(concat ... "-agenda" ... ":\n"))) ((equal org-agenda-overriding-header "")
nil) ((stringp org-agenda-overriding-header) (insert (propertize
org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid value
for `org-agenda-overriding-hea..." org-agenda-overriding-header)))) (if (>
(point) s) (progn (add-text-properties s (1- (point)) (list 'face
'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line s))))
(while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s (point))
(if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq
start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos
(point))))) (setq files thefiles rtnall nil) (while (setq file (car-safe
(prog1 files (setq files ...)))) (catch 'nextfile (org-check-agenda-file
file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if (member
:deadline* org-agenda-entry-types) (progn ...)) (if (member :scheduled*
org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...)) (if
org-agenda-include-deadlines nil (setq org-agenda-entry-types ...)) (cond
(... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall (append
rtnall rtn)))) (if org-agenda-include-diary (progn (let
((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq rtn
(org-get-entries-from-diary date)) (setq rtnall (append rtnall rtn))))) (if
(or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
(insert (if (stringp org-agenda-format-date) (format-time-string
org-agenda-format-date ...) (funcall org-agenda-format-date date)) "\n")
(put-text-property s (1- (point)) 'face (org-agenda-get-day-face date))
(put-text-property s (1- (point)) 'org-date-line t) (put-text-property s
(1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point))
'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ... t)))
(setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point)) 'day d)
(put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
org-agenda-clockreport-mode clocktable-start) (progn (let
((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
org-agenda-clockreport-parameter-plist)) tbl) (setq p (org-plist-delete p
:block)) (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put
p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq tbl
(apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
(point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer)) (if
(or (not (get-buffer-window org-agenda-buffer-name)) (and
(pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
(point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not
(pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or start-pos
1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
(point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args (list
arg start-day span) 'org-redo-cmd org-agenda-redo-command 'org-series-cmd
org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
(org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
buffer-read-only t) (message ""))
  (catch 'exit (setq org-agenda-buffer-name (or org-agenda-buffer-tmp-name
(and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq
start-day (or start-day org-agenda-start-day)) (if (stringp start-day)
(progn (setq start-day (time-to-days (org-read-date nil t start-day)))))
(org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda)
(let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today
(org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays 14))
org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
(files thefiles) (start (if (or (null org-agenda-start-on-weekday) (< ndays
7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
(day-cnt 0) (inhibit-redisplay (not debug-on-error))
(org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays)) (n 0))
(while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse day-numbers))
(setq clocktable-start (car day-numbers) clocktable-end (1+ (or (org-last
day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
(make-local-variable 'org-agenda-current-span) (org-agenda-ndays-to-span
span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2
(org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
(org-days-to-iso-week d2))) (setq s (point)) (cond ((not
org-agenda-overriding-header) (insert ...)) ((equal
org-agenda-overriding-header "") nil) ((stringp
org-agenda-overriding-header) (insert ... "\n")) (t (user-error "Invalid
value for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
(if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ... ...
t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1
day-numbers (setq day-numbers ...)))) (setq date
(calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp (= d
today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and
start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files thefiles
rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ... ...)
(if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ... ...
...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary
(progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...)))) (if (or
rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
(insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
(org-agenda-get-day-face date)) (put-text-property s (1- ...)
'org-date-line t) (put-text-property s (1- ...) 'org-agenda-date-header t)
(put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn ...))
(setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
(put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
org-agenda-clockreport-mode clocktable-start) (progn (let
((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p :block))
(setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p :tend
clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply ... p))
(insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
(org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
(pos-visible-in-window-p (point-max)))) nil (goto-char (1- (point-max)))
(recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1))) (progn
(goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos 1))
(add-text-properties (point-min) (point-max) (list 'org-agenda-type 'agenda
'org-last-args (list arg start-day span) 'org-redo-cmd
org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
org-agenda-show-log-scoped 'clockcheck) (progn
(org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
buffer-read-only t) (message "")))
  org-agenda-list(nil nil day nil)
  (let nil (org-agenda-list 'nil nil 'day nil))
  eval((let nil (org-agenda-list 'nil nil 'day nil)))
  org-let(nil (org-agenda-list 'nil nil 'day nil))
  (if series-redo-cmd (eval series-redo-cmd) (org-let lprops redo-cmd))
  (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa (if
(eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name (or
org-agenda-this-buffer-name org-agenda-buffer-name)) (org-agenda-keep-modes
t) (tag-filter org-agenda-tag-filter) (tag-preset (get
'org-agenda-tag-filter :preset-filter)) (top-hl-filter
org-agenda-top-headline-filter) (cat-filter org-agenda-category-filter)
(cat-preset (get 'org-agenda-category-filter :preset-filter)) (re-filter
org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
:preset-filter)) (effort-filter org-agenda-effort-filter) (effort-preset
(get 'org-agenda-effort-filter :preset-filter))
(org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
org-agenda-columns-active) (line (org-current-line)) (window-line (- line
(org-current-line (window-start)))) (lprops (get 'org-agenda-redo-command
'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd)) (last-args
(get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
(get-text-property p 'org-series-cmd)) (org-agenda-overriding-cmd-arguments
(if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
(get-text-property p 'org-series-redo-cmd))) (put 'org-agenda-tag-filter
:preset-filter nil) (put 'org-agenda-category-filter :preset-filter nil)
(put 'org-agenda-regexp-filter :preset-filter nil) (put
'org-agenda-effort-filter :preset-filter nil) (and cols (org-columns-quit))
(message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
series-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
org-agenda-category-filter cat-filter org-agenda-regexp-filter re-filter
org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
top-hl-filter) (message "Rebuilding agenda buffer...done") (put
'org-agenda-tag-filter :preset-filter tag-preset) (put
'org-agenda-category-filter :preset-filter cat-preset) (put
'org-agenda-regexp-filter :preset-filter re-preset) (put
'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag (or
tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag (progn
(org-agenda-filter-apply tag 'tag t))) (if cat (progn
(org-agenda-filter-apply cat 'category))) (if effort (progn
(org-agenda-filter-apply effort 'effort))) (if re (progn
(org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
(org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
(called-interactively-p 'any) (org-agenda-columns)) (org-goto-line line)
(recenter window-line))
  org-agenda-redo(t)
  (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
--dolist-tail-- (setq buffer (car --dolist-tail--)) (save-current-buffer
(set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
(org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
(org-agenda-redo t))
  org-agenda-redo-all(nil)
  funcall-interactively(org-agenda-redo-all nil)
  call-interactively(org-agenda-redo-all nil nil)
  command-execute(org-agenda-redo-all)
```

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/


On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com> wrote:

> > I want to get around this problem. So need to know how to detect
> currently
> > in logbook drawer or something else which used to record clocking note,
> > `org-add-note`, etc.
>
> You may try to use `org-logbook-drawer-re'.
>
> > When I toggle org-log-mode and related options in org-agenda buffer. I
> > found my org-link-beautify will caused long time suspend and no stop.
> After
> > debug, I found org-link-beautify text-property caused this problem.
>
> Could you provide more details how your text property is causing the
> problem in org-agenda? Which function in agenda is slow?
>
> Best,
> Ihor
>
>
> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>
> > I have a org-mode extension:
> >
> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
> >
> > It will beautify links with text-properties.
> >
> > When I toggle org-log-mode and related options in org-agenda buffer. I
> > found my org-link-beautify will caused long time suspend and no stop.
> After
> > debug, I found org-link-beautify text-property caused this problem.
> >
> > I want to get around this problem. So need to know how to detect
> currently
> > in logbook drawer or something else which used to record clocking note,
> > `org-add-note`, etc.
> >
> > Or maybe org-agenda upstream can do something to work around this
> > text-properties issue?
> >
> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
>

[-- Attachment #2: Type: text/html, Size: 28215 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-14  5:14 ` Ihor Radchenko
  2020-08-15  5:12   ` numbchild
@ 2020-08-15  5:34   ` numbchild
  2020-08-15  6:06     ` Ihor Radchenko
  1 sibling, 1 reply; 13+ messages in thread
From: numbchild @ 2020-08-15  5:34 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Org-mode

[-- Attachment #1: Type: text/plain, Size: 2544 bytes --]

I tried this helper function.

```elisp
(defun org-link-beautify--in-logbook-drawer-p (position)
  "Detect whether point is in Org logbook drawer using
`org-logbook-drawer-re'."
  (and (> (point)
          (save-excursion
            (re-search-backward
             (rx (seq bol (0+ (any "\t ")) ":LOGBOOK:" (0+ (any "\t "))
"\n")))))
       (< (point)
          (save-excursion
            (re-search-forward
             (rx (seq bol (0+ (any "\t ")) ":END:" (0+ (any "\t "))
eol)))))))
```
But it's logic is wrong. I becomes global buffer scope. Is there any better
correct solution?


[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/


On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com> wrote:

> > I want to get around this problem. So need to know how to detect
> currently
> > in logbook drawer or something else which used to record clocking note,
> > `org-add-note`, etc.
>
> You may try to use `org-logbook-drawer-re'.
>
> > When I toggle org-log-mode and related options in org-agenda buffer. I
> > found my org-link-beautify will caused long time suspend and no stop.
> After
> > debug, I found org-link-beautify text-property caused this problem.
>
> Could you provide more details how your text property is causing the
> problem in org-agenda? Which function in agenda is slow?
>
> Best,
> Ihor
>
>
> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>
> > I have a org-mode extension:
> >
> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
> >
> > It will beautify links with text-properties.
> >
> > When I toggle org-log-mode and related options in org-agenda buffer. I
> > found my org-link-beautify will caused long time suspend and no stop.
> After
> > debug, I found org-link-beautify text-property caused this problem.
> >
> > I want to get around this problem. So need to know how to detect
> currently
> > in logbook drawer or something else which used to record clocking note,
> > `org-add-note`, etc.
> >
> > Or maybe org-agenda upstream can do something to work around this
> > text-properties issue?
> >
> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
>

[-- Attachment #2: Type: text/html, Size: 4443 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-15  5:12   ` numbchild
@ 2020-08-15  6:01     ` Ihor Radchenko
  2020-08-16  3:55       ` numbchild
  2020-08-16  3:57       ` numbchild
  0 siblings, 2 replies; 13+ messages in thread
From: Ihor Radchenko @ 2020-08-15  6:01 UTC (permalink / raw)
  To: numbchild@gmail.com; +Cc: Org-mode

>Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
>but has long time suspend.

That looks unreadable for me. Also, debug on quit may not show the
problematic part depending on your luck.

It would be easier to understand your problem if you provided the
profiler report (M-x profiler-start ... M-x profiler-report).
Then, you could debug-on-entry using the problematic part according to
the profiler report.

A blind guess - maybe you are modifying match data somewhere in your
code. This might cause infinite loop in

> (while (org-activate-links (point-max)) (goto-char (match-end 0)))

Best,
Ihor

"numbchild@gmail.com" <numbchild@gmail.com> writes:

> Thanks for replying, Ihor. I will look into this regexp.
>
> Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
> but has long time suspend.
>
> ```
> Debugger entered--Lisp error: (quit)
>
> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
> 17651 t)
>   (while (re-search-forward org-link-any-re limit t) (let* ((start
> (match-beginning 0)) (end (match-end 0)) (visible-start (or
> (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
> (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle) ((eq 91
> (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
> org-highlight-links) (not (string-match-p org-element-paragraph-separate
> (match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
> ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
> (org-element-property :raw-link link-object)) (type (org-element-property
> :type link-object)) (path (org-element-property :path link-object))
> (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
> (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at end) (if
> (not (eq ... style)) (add-text-properties start end properties)
> (remove-text-properties start end '...) (let (...) (add-text-properties
> start visible-start hidden) (add-text-properties visible-start visible-end
> properties) (add-text-properties visible-end end hidden)
> (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at visible-end)))
> (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
>   (catch :exit (while (re-search-forward org-link-any-re limit t) (let*
> ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
> (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
> (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...) 'bracket) (t
> 'plain)))) (if (and (memq style org-highlight-links) (not (string-match-p
> org-element-paragraph-separate (match-string 0))) (not (and (eq style ...)
> (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type ...)
> (path ...) (properties ...)) (org-remove-flyspell-overlays-in start end)
> (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start end
> properties) (remove-text-properties start end ...) (let ... ... ... ... ...
> ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
>   org-activate-links(17651)
>   (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>   (save-excursion (while (org-activate-links (point-max)) (goto-char
> (match-end 0))))
>   (save-excursion (goto-char (point-min)) (save-excursion (while
> (org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
> org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
> org-agenda-with-colors nil (remove-text-properties (point-min) (point-max)
> '(face nil))) (if (and (boundp 'org-overriding-columns-format)
> org-overriding-columns-format) (progn (set (make-local-variable
> 'org-local-columns-format) org-overriding-columns-format))) (if
> org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
> org-agenda-fontify-priorities (progn (org-agenda-fontify-priorities))) (if
> (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
> (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
> org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
> (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
> (save-excursion (next-single-property-change (point-min) 'org-habit-p)))
> (progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
> (org-get-at-bol 'org-agenda-type)) (if (or (eq
> org-agenda-show-inherited-tags 'always) (and (listp
> org-agenda-show-inherited-tags) (memq org-agenda-type
> org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags t)
> (or (eq org-agenda-use-tag-inheritance t) (and (listp
> org-agenda-use-tag-inheritance) (not (memq org-agenda-type
> org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
> (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
> (get-text-property ... ...)) (progn (put-text-property ... ... ...
> ...))))))) (setq org-agenda-represented-tags nil
> org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> (progn (org-agenda-filter-top-headline-apply
> org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> org-agenda-category-filter (progn (org-agenda-filter-apply
> org-agenda-category-filter 'category))) (if (get
> 'org-agenda-category-filter :preset-filter) (progn (org-agenda-filter-apply
> (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> org-agenda-regexp-filter (progn (org-agenda-filter-apply
> org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> org-agenda-effort-filter (progn (org-agenda-filter-apply
> org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>   (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min))
> (save-excursion (while (org-activate-links (point-max)) (goto-char
> (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
> (org-agenda-align-tags)) (if org-agenda-with-colors nil
> (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> (progn (set (make-local-variable 'org-local-columns-format)
> org-overriding-columns-format))) (if org-agenda-view-columns-initially
> (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
> org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> (featurep 'org-habit) (save-excursion (next-single-property-change
> (point-min) 'org-habit-p))) (progn (org-habit-insert-consistency-graphs)))
> (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> org-agenda-show-inherited-tags 'always) (and (listp
> org-agenda-show-inherited-tags) (memq org-agenda-type
> org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags t)
> (or (eq org-agenda-use-tag-inheritance t) (and (listp
> org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
> (save-excursion (goto-char (point-min)) (while (equal (forward-line) 0) (if
> (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
> org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> (progn (org-agenda-filter-top-headline-apply
> org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> org-agenda-category-filter (progn (org-agenda-filter-apply
> org-agenda-category-filter 'category))) (if (get
> 'org-agenda-category-filter :preset-filter) (progn (org-agenda-filter-apply
> (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> org-agenda-regexp-filter (progn (org-agenda-filter-apply
> org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> org-agenda-effort-filter (progn (org-agenda-filter-apply
> org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
> 'org-agenda-finalize-hook))
>   (if org-agenda-multi nil (let ((inhibit-read-only t)) (save-excursion
> (goto-char (point-min)) (save-excursion (while (org-activate-links
> (point-max)) (goto-char (match-end 0)))) (if (eq org-agenda-remove-tags t)
> nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
> (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> (progn (set (make-local-variable 'org-local-columns-format)
> org-overriding-columns-format))) (if org-agenda-view-columns-initially
> (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
> org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> (featurep 'org-habit) (save-excursion (next-single-property-change
> (point-min) 'org-habit-p))) (progn (org-habit-insert-consistency-graphs)))
> (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> org-agenda-show-inherited-tags 'always) (and (listp
> org-agenda-show-inherited-tags) (memq org-agenda-type
> org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags t)
> (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let (mrk)
> (save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
> ...))))) (setq org-agenda-represented-tags nil
> org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> (progn (org-agenda-filter-top-headline-apply
> org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> org-agenda-category-filter (progn (org-agenda-filter-apply
> org-agenda-category-filter 'category))) (if (get
> 'org-agenda-category-filter :preset-filter) (progn (org-agenda-filter-apply
> (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> org-agenda-regexp-filter (progn (org-agenda-filter-apply
> org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> org-agenda-effort-filter (progn (org-agenda-filter-apply
> org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> :preset-filter) (progn (org-agenda-filter-apply (get
> 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
> 'org-agenda-finalize-hook)))
>   org-agenda-finalize()
>   (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today
> (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
> span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays 14))
> org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
> (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (< ndays
> 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (- sd (+
> ... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay (not
> debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1-
> ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (cons (1+
> (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
> (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
> clocktable-end (1+ (or (org-last day-numbers) 0))) (set
> (make-local-variable 'org-starting-day) (car day-numbers)) (set
> (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
> 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
> org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-last
> day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week
> d2))) (setq s (point)) (cond ((not org-agenda-overriding-header) (insert
> (concat ... "-agenda" ... ":\n"))) ((equal org-agenda-overriding-header "")
> nil) ((stringp org-agenda-overriding-header) (insert (propertize
> org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid value
> for `org-agenda-overriding-hea..." org-agenda-overriding-header)))) (if (>
> (point) s) (progn (add-text-properties s (1- (point)) (list 'face
> 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line s))))
> (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
> day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s (point))
> (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq
> start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos
> (point))))) (setq files thefiles rtnall nil) (while (setq file (car-safe
> (prog1 files (setq files ...)))) (catch 'nextfile (org-check-agenda-file
> file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if (member
> :deadline* org-agenda-entry-types) (progn ...)) (if (member :scheduled*
> org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...)) (if
> org-agenda-include-deadlines nil (setq org-agenda-entry-types ...)) (cond
> (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall (append
> rtnall rtn)))) (if org-agenda-include-diary (progn (let
> ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq rtn
> (org-get-entries-from-diary date)) (setq rtnall (append rtnall rtn))))) (if
> (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
> (insert (if (stringp org-agenda-format-date) (format-time-string
> org-agenda-format-date ...) (funcall org-agenda-format-date date)) "\n")
> (put-text-property s (1- (point)) 'face (org-agenda-get-day-face date))
> (put-text-property s (1- (point)) 'org-date-line t) (put-text-property s
> (1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point))
> 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ... t)))
> (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point)) 'day d)
> (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
> org-agenda-clockreport-mode clocktable-start) (progn (let
> ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
> org-agenda-clockreport-parameter-plist)) tbl) (setq p (org-plist-delete p
> :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put
> p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq tbl
> (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
> (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer)) (if
> (or (not (get-buffer-window org-agenda-buffer-name)) (and
> (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
> (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not
> (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or start-pos
> 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
> (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args (list
> arg start-day span) 'org-redo-cmd org-agenda-redo-command 'org-series-cmd
> org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
> (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> buffer-read-only t) (message ""))
>   (catch 'exit (setq org-agenda-buffer-name (or org-agenda-buffer-tmp-name
> (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
> org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
> Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq
> start-day (or start-day org-agenda-start-day)) (if (stringp start-day)
> (progn (setq start-day (time-to-days (org-read-date nil t start-day)))))
> (org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda)
> (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today
> (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
> span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays 14))
> org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
> (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (< ndays
> 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
> (day-cnt 0) (inhibit-redisplay (not debug-on-error))
> (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays)) (n 0))
> (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
> day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse day-numbers))
> (setq clocktable-start (car day-numbers) clocktable-end (1+ (or (org-last
> day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
> day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
> (make-local-variable 'org-agenda-current-span) (org-agenda-ndays-to-span
> span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2
> (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
> (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
> org-agenda-overriding-header) (insert ...)) ((equal
> org-agenda-overriding-header "") nil) ((stringp
> org-agenda-overriding-header) (insert ... "\n")) (t (user-error "Invalid
> value for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
> (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ... ...
> t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1
> day-numbers (setq day-numbers ...)))) (setq date
> (calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp (= d
> today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and
> start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files thefiles
> rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
> 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ... ...)
> (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ... ...
> ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary
> (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...)))) (if (or
> rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
> (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
> (org-agenda-get-day-face date)) (put-text-property s (1- ...)
> 'org-date-line t) (put-text-property s (1- ...) 'org-agenda-date-header t)
> (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn ...))
> (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
> (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
> org-agenda-clockreport-mode clocktable-start) (progn (let
> ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p :block))
> (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p :tend
> clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply ... p))
> (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
> (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
> org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
> (pos-visible-in-window-p (point-max)))) nil (goto-char (1- (point-max)))
> (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1))) (progn
> (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos 1))
> (add-text-properties (point-min) (point-max) (list 'org-agenda-type 'agenda
> 'org-last-args (list arg start-day span) 'org-redo-cmd
> org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
> org-agenda-show-log-scoped 'clockcheck) (progn
> (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> buffer-read-only t) (message "")))
>   org-agenda-list(nil nil day nil)
>   (let nil (org-agenda-list 'nil nil 'day nil))
>   eval((let nil (org-agenda-list 'nil nil 'day nil)))
>   org-let(nil (org-agenda-list 'nil nil 'day nil))
>   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops redo-cmd))
>   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa (if
> (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
> org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name (or
> org-agenda-this-buffer-name org-agenda-buffer-name)) (org-agenda-keep-modes
> t) (tag-filter org-agenda-tag-filter) (tag-preset (get
> 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
> org-agenda-top-headline-filter) (cat-filter org-agenda-category-filter)
> (cat-preset (get 'org-agenda-category-filter :preset-filter)) (re-filter
> org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
> :preset-filter)) (effort-filter org-agenda-effort-filter) (effort-preset
> (get 'org-agenda-effort-filter :preset-filter))
> (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
> org-agenda-columns-active) (line (org-current-line)) (window-line (- line
> (org-current-line (window-start)))) (lprops (get 'org-agenda-redo-command
> 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd)) (last-args
> (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
> (get-text-property p 'org-series-cmd)) (org-agenda-overriding-cmd-arguments
> (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
> last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
> (get-text-property p 'org-series-redo-cmd))) (put 'org-agenda-tag-filter
> :preset-filter nil) (put 'org-agenda-category-filter :preset-filter nil)
> (put 'org-agenda-regexp-filter :preset-filter nil) (put
> 'org-agenda-effort-filter :preset-filter nil) (and cols (org-columns-quit))
> (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
> series-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
> org-agenda-category-filter cat-filter org-agenda-regexp-filter re-filter
> org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
> top-hl-filter) (message "Rebuilding agenda buffer...done") (put
> 'org-agenda-tag-filter :preset-filter tag-preset) (put
> 'org-agenda-category-filter :preset-filter cat-preset) (put
> 'org-agenda-regexp-filter :preset-filter re-preset) (put
> 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag (or
> tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
> effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag (progn
> (org-agenda-filter-apply tag 'tag t))) (if cat (progn
> (org-agenda-filter-apply cat 'category))) (if effort (progn
> (org-agenda-filter-apply effort 'effort))) (if re (progn
> (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
> (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
> (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line line)
> (recenter window-line))
>   org-agenda-redo(t)
>   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
> --dolist-tail-- (setq buffer (car --dolist-tail--)) (save-current-buffer
> (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
> (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
> (org-agenda-redo t))
>   org-agenda-redo-all(nil)
>   funcall-interactively(org-agenda-redo-all nil)
>   call-interactively(org-agenda-redo-all nil nil)
>   command-execute(org-agenda-redo-all)
> ```
>
> [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> IRC(freeenode): stardiviner                     Twitter:  @numbchild
> Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> Blog: http://stardiviner.github.io/
>
>
> On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com> wrote:
>
>> > I want to get around this problem. So need to know how to detect
>> currently
>> > in logbook drawer or something else which used to record clocking note,
>> > `org-add-note`, etc.
>>
>> You may try to use `org-logbook-drawer-re'.
>>
>> > When I toggle org-log-mode and related options in org-agenda buffer. I
>> > found my org-link-beautify will caused long time suspend and no stop.
>> After
>> > debug, I found org-link-beautify text-property caused this problem.
>>
>> Could you provide more details how your text property is causing the
>> problem in org-agenda? Which function in agenda is slow?
>>
>> Best,
>> Ihor
>>
>>
>> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>>
>> > I have a org-mode extension:
>> >
>> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
>> >
>> > It will beautify links with text-properties.
>> >
>> > When I toggle org-log-mode and related options in org-agenda buffer. I
>> > found my org-link-beautify will caused long time suspend and no stop.
>> After
>> > debug, I found org-link-beautify text-property caused this problem.
>> >
>> > I want to get around this problem. So need to know how to detect
>> currently
>> > in logbook drawer or something else which used to record clocking note,
>> > `org-add-note`, etc.
>> >
>> > Or maybe org-agenda upstream can do something to work around this
>> > text-properties issue?
>> >
>> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> > Blog: http://stardiviner.github.io/
>>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-15  5:34   ` numbchild
@ 2020-08-15  6:06     ` Ihor Radchenko
  0 siblings, 0 replies; 13+ messages in thread
From: Ihor Radchenko @ 2020-08-15  6:06 UTC (permalink / raw)
  To: numbchild@gmail.com; +Cc: Org-mode

I think you may do something like the following:
1. search backward for drawer-re, but limit search to the beginning of
headline
2. it should not be :END:
2. search next drawer-re from the point of previous search, but limit
search to next headline
3. make sure the drawer line at point is :END:
4. check if point is within the boundaries

Hope it helps.

Best,
Ihor


"numbchild@gmail.com" <numbchild@gmail.com> writes:

> I tried this helper function.
>
> ```elisp
> (defun org-link-beautify--in-logbook-drawer-p (position)
>   "Detect whether point is in Org logbook drawer using
> `org-logbook-drawer-re'."
>   (and (> (point)
>           (save-excursion
>             (re-search-backward
>              (rx (seq bol (0+ (any "\t ")) ":LOGBOOK:" (0+ (any "\t "))
> "\n")))))
>        (< (point)
>           (save-excursion
>             (re-search-forward
>              (rx (seq bol (0+ (any "\t ")) ":END:" (0+ (any "\t "))
> eol)))))))
> ```
> But it's logic is wrong. I becomes global buffer scope. Is there any better
> correct solution?
>
>
> [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> IRC(freeenode): stardiviner                     Twitter:  @numbchild
> Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> Blog: http://stardiviner.github.io/
>
>
> On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com> wrote:
>
>> > I want to get around this problem. So need to know how to detect
>> currently
>> > in logbook drawer or something else which used to record clocking note,
>> > `org-add-note`, etc.
>>
>> You may try to use `org-logbook-drawer-re'.
>>
>> > When I toggle org-log-mode and related options in org-agenda buffer. I
>> > found my org-link-beautify will caused long time suspend and no stop.
>> After
>> > debug, I found org-link-beautify text-property caused this problem.
>>
>> Could you provide more details how your text property is causing the
>> problem in org-agenda? Which function in agenda is slow?
>>
>> Best,
>> Ihor
>>
>>
>> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>>
>> > I have a org-mode extension:
>> >
>> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
>> >
>> > It will beautify links with text-properties.
>> >
>> > When I toggle org-log-mode and related options in org-agenda buffer. I
>> > found my org-link-beautify will caused long time suspend and no stop.
>> After
>> > debug, I found org-link-beautify text-property caused this problem.
>> >
>> > I want to get around this problem. So need to know how to detect
>> currently
>> > in logbook drawer or something else which used to record clocking note,
>> > `org-add-note`, etc.
>> >
>> > Or maybe org-agenda upstream can do something to work around this
>> > text-properties issue?
>> >
>> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> > Blog: http://stardiviner.github.io/
>>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-15  6:01     ` Ihor Radchenko
@ 2020-08-16  3:55       ` numbchild
  2020-08-16  6:38         ` Ihor Radchenko
  2020-08-16  3:57       ` numbchild
  1 sibling, 1 reply; 13+ messages in thread
From: numbchild @ 2020-08-16  3:55 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Org-mode

[-- Attachment #1: Type: text/plain, Size: 28944 bytes --]

I tried use debug-on-entry on:
  + org-agenda-list(nil)
    - org-agenda-mode()
      + org-agenda-set-mode-name()
        - org-update-dblock
          + org-dblock-write:clocktable

But got no lucky, Then I followed your another suggestion, use profiler:

I got a very big message log, (not suitable for paste in email, so I paste
it on Gist)

- CPU profiler report: https://www.pastery.net/gststf/
- Memory profiler report: https://www.pastery.net/gststf+qzyxaf/#qzyxaf

The very deepest call stacks seems the output format is not long enough, so
can't display.

Your suggestion is very useful, I can see what function is invoked many
times. But still can't understand what's the cause.

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/


On Sat, Aug 15, 2020 at 2:02 PM Ihor Radchenko <yantar92@gmail.com> wrote:

> >Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
> >but has long time suspend.
>
> That looks unreadable for me. Also, debug on quit may not show the
> problematic part depending on your luck.
>
> It would be easier to understand your problem if you provided the
> profiler report (M-x profiler-start ... M-x profiler-report).
> Then, you could debug-on-entry using the problematic part according to
> the profiler report.
>
> A blind guess - maybe you are modifying match data somewhere in your
> code. This might cause infinite loop in
>
> > (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>
> Best,
> Ihor
>
> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>
> > Thanks for replying, Ihor. I will look into this regexp.
> >
> > Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
> > but has long time suspend.
> >
> > ```
> > Debugger entered--Lisp error: (quit)
> >
> >
> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
> > 17651 t)
> >   (while (re-search-forward org-link-any-re limit t) (let* ((start
> > (match-beginning 0)) (end (match-end 0)) (visible-start (or
> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
> > (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle) ((eq 91
> > (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
> > org-highlight-links) (not (string-match-p org-element-paragraph-separate
> > (match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
> > ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
> > (org-element-property :raw-link link-object)) (type (org-element-property
> > :type link-object)) (path (org-element-property :path link-object))
> > (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
> > (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at end)
> (if
> > (not (eq ... style)) (add-text-properties start end properties)
> > (remove-text-properties start end '...) (let (...) (add-text-properties
> > start visible-start hidden) (add-text-properties visible-start
> visible-end
> > properties) (add-text-properties visible-end end hidden)
> > (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at
> visible-end)))
> > (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
> >   (catch :exit (while (re-search-forward org-link-any-re limit t) (let*
> > ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
> > (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...) 'bracket)
> (t
> > 'plain)))) (if (and (memq style org-highlight-links) (not (string-match-p
> > org-element-paragraph-separate (match-string 0))) (not (and (eq style
> ...)
> > (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type ...)
> > (path ...) (properties ...)) (org-remove-flyspell-overlays-in start end)
> > (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start end
> > properties) (remove-text-properties start end ...) (let ... ... ... ...
> ...
> > ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
> >   org-activate-links(17651)
> >   (while (org-activate-links (point-max)) (goto-char (match-end 0)))
> >   (save-excursion (while (org-activate-links (point-max)) (goto-char
> > (match-end 0))))
> >   (save-excursion (goto-char (point-min)) (save-excursion (while
> > (org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
> > org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
> > org-agenda-with-colors nil (remove-text-properties (point-min)
> (point-max)
> > '(face nil))) (if (and (boundp 'org-overriding-columns-format)
> > org-overriding-columns-format) (progn (set (make-local-variable
> > 'org-local-columns-format) org-overriding-columns-format))) (if
> > org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
> > org-agenda-fontify-priorities (progn (org-agenda-fontify-priorities)))
> (if
> > (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
> > (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
> > org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
> > (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
> > (save-excursion (next-single-property-change (point-min) 'org-habit-p)))
> > (progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
> > (org-get-at-bol 'org-agenda-type)) (if (or (eq
> > org-agenda-show-inherited-tags 'always) (and (listp
> > org-agenda-show-inherited-tags) (memq org-agenda-type
> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
> t)
> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> > org-agenda-use-tag-inheritance) (not (memq org-agenda-type
> > org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
> > (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
> > ...))))))) (setq org-agenda-represented-tags nil
> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> > (progn (org-agenda-filter-top-headline-apply
> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> (get
> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> > org-agenda-category-filter (progn (org-agenda-filter-apply
> > org-agenda-category-filter 'category))) (if (get
> > 'org-agenda-category-filter :preset-filter) (progn
> (org-agenda-filter-apply
> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> >   (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min))
> > (save-excursion (while (org-activate-links (point-max)) (goto-char
> > (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
> > (org-agenda-align-tags)) (if org-agenda-with-colors nil
> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> > (progn (set (make-local-variable 'org-local-columns-format)
> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> > (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> > (featurep 'org-habit) (save-excursion (next-single-property-change
> > (point-min) 'org-habit-p))) (progn
> (org-habit-insert-consistency-graphs)))
> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> > org-agenda-show-inherited-tags 'always) (and (listp
> > org-agenda-show-inherited-tags) (memq org-agenda-type
> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
> t)
> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> > org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
> > (save-excursion (goto-char (point-min)) (while (equal (forward-line) 0)
> (if
> > (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> > (progn (org-agenda-filter-top-headline-apply
> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> (get
> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> > org-agenda-category-filter (progn (org-agenda-filter-apply
> > org-agenda-category-filter 'category))) (if (get
> > 'org-agenda-category-filter :preset-filter) (progn
> (org-agenda-filter-apply
> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
> > 'org-agenda-finalize-hook))
> >   (if org-agenda-multi nil (let ((inhibit-read-only t)) (save-excursion
> > (goto-char (point-min)) (save-excursion (while (org-activate-links
> > (point-max)) (goto-char (match-end 0)))) (if (eq org-agenda-remove-tags
> t)
> > nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> > (progn (set (make-local-variable 'org-local-columns-format)
> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> > (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> > (featurep 'org-habit) (save-excursion (next-single-property-change
> > (point-min) 'org-habit-p))) (progn
> (org-habit-insert-consistency-graphs)))
> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> > org-agenda-show-inherited-tags 'always) (and (listp
> > org-agenda-show-inherited-tags) (memq org-agenda-type
> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
> t)
> > (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let (mrk)
> > (save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
> > ...))))) (setq org-agenda-represented-tags nil
> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> > (progn (org-agenda-filter-top-headline-apply
> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> (get
> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> > org-agenda-category-filter (progn (org-agenda-filter-apply
> > org-agenda-category-filter 'category))) (if (get
> > 'org-agenda-category-filter :preset-filter) (progn
> (org-agenda-filter-apply
> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
> > 'org-agenda-finalize-hook)))
> >   org-agenda-finalize()
> >   (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
> (today
> > (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
> 14))
> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
> ndays
> > 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (- sd (+
> > ... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay (not
> > debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit--
> (1-
> > ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (cons (1+
> > (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
> > (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
> > clocktable-end (1+ (or (org-last day-numbers) 0))) (set
> > (make-local-variable 'org-starting-day) (car day-numbers)) (set
> > (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
> > org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-last
> > day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week
> > d2))) (setq s (point)) (cond ((not org-agenda-overriding-header) (insert
> > (concat ... "-agenda" ... ":\n"))) ((equal org-agenda-overriding-header
> "")
> > nil) ((stringp org-agenda-overriding-header) (insert (propertize
> > org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid
> value
> > for `org-agenda-overriding-hea..." org-agenda-overriding-header)))) (if
> (>
> > (point) s) (progn (add-text-properties s (1- (point)) (list 'face
> > 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line
> s))))
> > (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
> > day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s
> (point))
> > (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq
> > start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos
> > (point))))) (setq files thefiles rtnall nil) (while (setq file (car-safe
> > (prog1 files (setq files ...)))) (catch 'nextfile (org-check-agenda-file
> > file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if (member
> > :deadline* org-agenda-entry-types) (progn ...)) (if (member :scheduled*
> > org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...)) (if
> > org-agenda-include-deadlines nil (setq org-agenda-entry-types ...)) (cond
> > (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall (append
> > rtnall rtn)))) (if org-agenda-include-diary (progn (let
> > ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq rtn
> > (org-get-entries-from-diary date)) (setq rtnall (append rtnall rtn)))))
> (if
> > (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
> > (insert (if (stringp org-agenda-format-date) (format-time-string
> > org-agenda-format-date ...) (funcall org-agenda-format-date date)) "\n")
> > (put-text-property s (1- (point)) 'face (org-agenda-get-day-face date))
> > (put-text-property s (1- (point)) 'org-date-line t) (put-text-property s
> > (1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point))
> > 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ... t)))
> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> > rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point)) 'day
> d)
> > (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
> > org-agenda-clockreport-mode clocktable-start) (progn (let
> > ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
> > org-agenda-clockreport-parameter-plist)) tbl) (setq p (org-plist-delete p
> > :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p
> (plist-put
> > p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq tbl
> > (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
> > (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer)) (if
> > (or (not (get-buffer-window org-agenda-buffer-name)) (and
> > (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
> > (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not
> > (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or
> start-pos
> > 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
> > (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args
> (list
> > arg start-day span) 'org-redo-cmd org-agenda-redo-command 'org-series-cmd
> > org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> > buffer-read-only t) (message ""))
> >   (catch 'exit (setq org-agenda-buffer-name (or
> org-agenda-buffer-tmp-name
> > (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
> > org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq
> > start-day (or start-day org-agenda-start-day)) (if (stringp start-day)
> > (progn (setq start-day (time-to-days (org-read-date nil t start-day)))))
> > (org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda)
> > (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today
> > (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
> 14))
> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
> ndays
> > 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
> > (day-cnt 0) (inhibit-redisplay (not debug-on-error))
> > (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays)) (n
> 0))
> > (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
> > day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse day-numbers))
> > (setq clocktable-start (car day-numbers) clocktable-end (1+ (or (org-last
> > day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
> > day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
> > (make-local-variable 'org-agenda-current-span) (org-agenda-ndays-to-span
> > span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers))
> (d2
> > (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
> > (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
> > org-agenda-overriding-header) (insert ...)) ((equal
> > org-agenda-overriding-header "") nil) ((stringp
> > org-agenda-overriding-header) (insert ... "\n")) (t (user-error "Invalid
> > value for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
> > (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ...
> ...
> > t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1
> > day-numbers (setq day-numbers ...)))) (setq date
> > (calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp (= d
> > today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and
> > start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files
> thefiles
> > rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
> > 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ...
> ...)
> > (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ...
> ...
> > ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary
> > (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...)))) (if
> (or
> > rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
> > (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
> > (org-agenda-get-day-face date)) (put-text-property s (1- ...)
> > 'org-date-line t) (put-text-property s (1- ...) 'org-agenda-date-header
> t)
> > (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn
> ...))
> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> > rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
> > (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
> > org-agenda-clockreport-mode clocktable-start) (progn (let
> > ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p :block))
> > (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p
> :tend
> > clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply ...
> p))
> > (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
> > (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
> > org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
> > (pos-visible-in-window-p (point-max)))) nil (goto-char (1- (point-max)))
> > (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1))) (progn
> > (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos 1))
> > (add-text-properties (point-min) (point-max) (list 'org-agenda-type
> 'agenda
> > 'org-last-args (list arg start-day span) 'org-redo-cmd
> > org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
> > org-agenda-show-log-scoped 'clockcheck) (progn
> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> > buffer-read-only t) (message "")))
> >   org-agenda-list(nil nil day nil)
> >   (let nil (org-agenda-list 'nil nil 'day nil))
> >   eval((let nil (org-agenda-list 'nil nil 'day nil)))
> >   org-let(nil (org-agenda-list 'nil nil 'day nil))
> >   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops redo-cmd))
> >   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa (if
> > (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
> > org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name (or
> > org-agenda-this-buffer-name org-agenda-buffer-name))
> (org-agenda-keep-modes
> > t) (tag-filter org-agenda-tag-filter) (tag-preset (get
> > 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
> > org-agenda-top-headline-filter) (cat-filter org-agenda-category-filter)
> > (cat-preset (get 'org-agenda-category-filter :preset-filter)) (re-filter
> > org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
> > :preset-filter)) (effort-filter org-agenda-effort-filter) (effort-preset
> > (get 'org-agenda-effort-filter :preset-filter))
> > (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
> > org-agenda-columns-active) (line (org-current-line)) (window-line (- line
> > (org-current-line (window-start)))) (lprops (get 'org-agenda-redo-command
> > 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd)) (last-args
> > (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
> > (get-text-property p 'org-series-cmd))
> (org-agenda-overriding-cmd-arguments
> > (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
> > last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
> > (get-text-property p 'org-series-redo-cmd))) (put 'org-agenda-tag-filter
> > :preset-filter nil) (put 'org-agenda-category-filter :preset-filter nil)
> > (put 'org-agenda-regexp-filter :preset-filter nil) (put
> > 'org-agenda-effort-filter :preset-filter nil) (and cols
> (org-columns-quit))
> > (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
> > series-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
> > org-agenda-category-filter cat-filter org-agenda-regexp-filter re-filter
> > org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
> > top-hl-filter) (message "Rebuilding agenda buffer...done") (put
> > 'org-agenda-tag-filter :preset-filter tag-preset) (put
> > 'org-agenda-category-filter :preset-filter cat-preset) (put
> > 'org-agenda-regexp-filter :preset-filter re-preset) (put
> > 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag (or
> > tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
> > effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag
> (progn
> > (org-agenda-filter-apply tag 'tag t))) (if cat (progn
> > (org-agenda-filter-apply cat 'category))) (if effort (progn
> > (org-agenda-filter-apply effort 'effort))) (if re (progn
> > (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
> > (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
> > (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line line)
> > (recenter window-line))
> >   org-agenda-redo(t)
> >   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
> > --dolist-tail-- (setq buffer (car --dolist-tail--)) (save-current-buffer
> > (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
> > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
> > (org-agenda-redo t))
> >   org-agenda-redo-all(nil)
> >   funcall-interactively(org-agenda-redo-all nil)
> >   call-interactively(org-agenda-redo-all nil nil)
> >   command-execute(org-agenda-redo-all)
> > ```
> >
> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
> >
> >
> > On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com>
> wrote:
> >
> >> > I want to get around this problem. So need to know how to detect
> >> currently
> >> > in logbook drawer or something else which used to record clocking
> note,
> >> > `org-add-note`, etc.
> >>
> >> You may try to use `org-logbook-drawer-re'.
> >>
> >> > When I toggle org-log-mode and related options in org-agenda buffer. I
> >> > found my org-link-beautify will caused long time suspend and no stop.
> >> After
> >> > debug, I found org-link-beautify text-property caused this problem.
> >>
> >> Could you provide more details how your text property is causing the
> >> problem in org-agenda? Which function in agenda is slow?
> >>
> >> Best,
> >> Ihor
> >>
> >>
> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
> >>
> >> > I have a org-mode extension:
> >> >
> >>
> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
> >> >
> >> > It will beautify links with text-properties.
> >> >
> >> > When I toggle org-log-mode and related options in org-agenda buffer. I
> >> > found my org-link-beautify will caused long time suspend and no stop.
> >> After
> >> > debug, I found org-link-beautify text-property caused this problem.
> >> >
> >> > I want to get around this problem. So need to know how to detect
> >> currently
> >> > in logbook drawer or something else which used to record clocking
> note,
> >> > `org-add-note`, etc.
> >> >
> >> > Or maybe org-agenda upstream can do something to work around this
> >> > text-properties issue?
> >> >
> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> >> > Blog: http://stardiviner.github.io/
> >>
>

[-- Attachment #2: Type: text/html, Size: 34973 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-15  6:01     ` Ihor Radchenko
  2020-08-16  3:55       ` numbchild
@ 2020-08-16  3:57       ` numbchild
  1 sibling, 0 replies; 13+ messages in thread
From: numbchild @ 2020-08-16  3:57 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Org-mode

[-- Attachment #1: Type: text/plain, Size: 29001 bytes --]

Also I noticed one thing:

 The problem happens on when link (org-link-beautify enabled) is behind "-"
directly:

 #+begin_src org
 ,* headline
   :LOGBOOK:
   CLOCK: [2020-07-23 Thu 22:05]--[2020-07-23 Thu 22:14] =>  0:09
   - [[file:~/Code/Emacs/org-mode/lisp/org-agenda.el::(defcustom
org-agenda-start-with-clockreport-mode
nil][org-agenda-start-with-clockreport-mode]]
   :END:
 #+end_src

 But no problem when preceding content is not link. For example:

 #+begin_src org
 ,* headline
   :LOGBOOK:
   CLOCK: [2020-07-23 Thu 22:05]--[2020-07-23 Thu 22:14] =>  0:09
   - kk
     [[file:~/Code/Emacs/org-mode/lisp/org-agenda.el::(defcustom
org-agenda-start-with-clockreport-mode
nil][org-agenda-start-with-clockreport-mode]]
   :END:
 #+end_src

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/


On Sat, Aug 15, 2020 at 2:02 PM Ihor Radchenko <yantar92@gmail.com> wrote:

> >Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
> >but has long time suspend.
>
> That looks unreadable for me. Also, debug on quit may not show the
> problematic part depending on your luck.
>
> It would be easier to understand your problem if you provided the
> profiler report (M-x profiler-start ... M-x profiler-report).
> Then, you could debug-on-entry using the problematic part according to
> the profiler report.
>
> A blind guess - maybe you are modifying match data somewhere in your
> code. This might cause infinite loop in
>
> > (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>
> Best,
> Ihor
>
> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>
> > Thanks for replying, Ihor. I will look into this regexp.
> >
> > Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
> > but has long time suspend.
> >
> > ```
> > Debugger entered--Lisp error: (quit)
> >
> >
> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
> > 17651 t)
> >   (while (re-search-forward org-link-any-re limit t) (let* ((start
> > (match-beginning 0)) (end (match-end 0)) (visible-start (or
> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
> > (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle) ((eq 91
> > (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
> > org-highlight-links) (not (string-match-p org-element-paragraph-separate
> > (match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
> > ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
> > (org-element-property :raw-link link-object)) (type (org-element-property
> > :type link-object)) (path (org-element-property :path link-object))
> > (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
> > (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at end)
> (if
> > (not (eq ... style)) (add-text-properties start end properties)
> > (remove-text-properties start end '...) (let (...) (add-text-properties
> > start visible-start hidden) (add-text-properties visible-start
> visible-end
> > properties) (add-text-properties visible-end end hidden)
> > (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at
> visible-end)))
> > (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
> >   (catch :exit (while (re-search-forward org-link-any-re limit t) (let*
> > ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
> > (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...) 'bracket)
> (t
> > 'plain)))) (if (and (memq style org-highlight-links) (not (string-match-p
> > org-element-paragraph-separate (match-string 0))) (not (and (eq style
> ...)
> > (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type ...)
> > (path ...) (properties ...)) (org-remove-flyspell-overlays-in start end)
> > (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start end
> > properties) (remove-text-properties start end ...) (let ... ... ... ...
> ...
> > ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
> >   org-activate-links(17651)
> >   (while (org-activate-links (point-max)) (goto-char (match-end 0)))
> >   (save-excursion (while (org-activate-links (point-max)) (goto-char
> > (match-end 0))))
> >   (save-excursion (goto-char (point-min)) (save-excursion (while
> > (org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
> > org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
> > org-agenda-with-colors nil (remove-text-properties (point-min)
> (point-max)
> > '(face nil))) (if (and (boundp 'org-overriding-columns-format)
> > org-overriding-columns-format) (progn (set (make-local-variable
> > 'org-local-columns-format) org-overriding-columns-format))) (if
> > org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
> > org-agenda-fontify-priorities (progn (org-agenda-fontify-priorities)))
> (if
> > (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
> > (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
> > org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
> > (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
> > (save-excursion (next-single-property-change (point-min) 'org-habit-p)))
> > (progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
> > (org-get-at-bol 'org-agenda-type)) (if (or (eq
> > org-agenda-show-inherited-tags 'always) (and (listp
> > org-agenda-show-inherited-tags) (memq org-agenda-type
> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
> t)
> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> > org-agenda-use-tag-inheritance) (not (memq org-agenda-type
> > org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
> > (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
> > ...))))))) (setq org-agenda-represented-tags nil
> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> > (progn (org-agenda-filter-top-headline-apply
> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> (get
> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> > org-agenda-category-filter (progn (org-agenda-filter-apply
> > org-agenda-category-filter 'category))) (if (get
> > 'org-agenda-category-filter :preset-filter) (progn
> (org-agenda-filter-apply
> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> >   (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min))
> > (save-excursion (while (org-activate-links (point-max)) (goto-char
> > (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
> > (org-agenda-align-tags)) (if org-agenda-with-colors nil
> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> > (progn (set (make-local-variable 'org-local-columns-format)
> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> > (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> > (featurep 'org-habit) (save-excursion (next-single-property-change
> > (point-min) 'org-habit-p))) (progn
> (org-habit-insert-consistency-graphs)))
> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> > org-agenda-show-inherited-tags 'always) (and (listp
> > org-agenda-show-inherited-tags) (memq org-agenda-type
> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
> t)
> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> > org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
> > (save-excursion (goto-char (point-min)) (while (equal (forward-line) 0)
> (if
> > (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> > (progn (org-agenda-filter-top-headline-apply
> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> (get
> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> > org-agenda-category-filter (progn (org-agenda-filter-apply
> > org-agenda-category-filter 'category))) (if (get
> > 'org-agenda-category-filter :preset-filter) (progn
> (org-agenda-filter-apply
> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
> > 'org-agenda-finalize-hook))
> >   (if org-agenda-multi nil (let ((inhibit-read-only t)) (save-excursion
> > (goto-char (point-min)) (save-excursion (while (org-activate-links
> > (point-max)) (goto-char (match-end 0)))) (if (eq org-agenda-remove-tags
> t)
> > nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> > (progn (set (make-local-variable 'org-local-columns-format)
> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> > (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> > (featurep 'org-habit) (save-excursion (next-single-property-change
> > (point-min) 'org-habit-p))) (progn
> (org-habit-insert-consistency-graphs)))
> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> > org-agenda-show-inherited-tags 'always) (and (listp
> > org-agenda-show-inherited-tags) (memq org-agenda-type
> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
> t)
> > (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let (mrk)
> > (save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
> > ...))))) (setq org-agenda-represented-tags nil
> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
> > (progn (org-agenda-filter-top-headline-apply
> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> (get
> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> > org-agenda-category-filter (progn (org-agenda-filter-apply
> > org-agenda-category-filter 'category))) (if (get
> > 'org-agenda-category-filter :preset-filter) (progn
> (org-agenda-filter-apply
> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> > :preset-filter) (progn (org-agenda-filter-apply (get
> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
> > 'org-agenda-finalize-hook)))
> >   org-agenda-finalize()
> >   (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
> (today
> > (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
> 14))
> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
> ndays
> > 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (- sd (+
> > ... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay (not
> > debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit--
> (1-
> > ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (cons (1+
> > (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
> > (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
> > clocktable-end (1+ (or (org-last day-numbers) 0))) (set
> > (make-local-variable 'org-starting-day) (car day-numbers)) (set
> > (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
> > org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-last
> > day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week
> > d2))) (setq s (point)) (cond ((not org-agenda-overriding-header) (insert
> > (concat ... "-agenda" ... ":\n"))) ((equal org-agenda-overriding-header
> "")
> > nil) ((stringp org-agenda-overriding-header) (insert (propertize
> > org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid
> value
> > for `org-agenda-overriding-hea..." org-agenda-overriding-header)))) (if
> (>
> > (point) s) (progn (add-text-properties s (1- (point)) (list 'face
> > 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line
> s))))
> > (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
> > day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s
> (point))
> > (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq
> > start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos
> > (point))))) (setq files thefiles rtnall nil) (while (setq file (car-safe
> > (prog1 files (setq files ...)))) (catch 'nextfile (org-check-agenda-file
> > file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if (member
> > :deadline* org-agenda-entry-types) (progn ...)) (if (member :scheduled*
> > org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...)) (if
> > org-agenda-include-deadlines nil (setq org-agenda-entry-types ...)) (cond
> > (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall (append
> > rtnall rtn)))) (if org-agenda-include-diary (progn (let
> > ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq rtn
> > (org-get-entries-from-diary date)) (setq rtnall (append rtnall rtn)))))
> (if
> > (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
> > (insert (if (stringp org-agenda-format-date) (format-time-string
> > org-agenda-format-date ...) (funcall org-agenda-format-date date)) "\n")
> > (put-text-property s (1- (point)) 'face (org-agenda-get-day-face date))
> > (put-text-property s (1- (point)) 'org-date-line t) (put-text-property s
> > (1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point))
> > 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ... t)))
> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> > rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point)) 'day
> d)
> > (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
> > org-agenda-clockreport-mode clocktable-start) (progn (let
> > ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
> > org-agenda-clockreport-parameter-plist)) tbl) (setq p (org-plist-delete p
> > :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p
> (plist-put
> > p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq tbl
> > (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
> > (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer)) (if
> > (or (not (get-buffer-window org-agenda-buffer-name)) (and
> > (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
> > (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not
> > (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or
> start-pos
> > 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
> > (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args
> (list
> > arg start-day span) 'org-redo-cmd org-agenda-redo-command 'org-series-cmd
> > org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> > buffer-read-only t) (message ""))
> >   (catch 'exit (setq org-agenda-buffer-name (or
> org-agenda-buffer-tmp-name
> > (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
> > org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq
> > start-day (or start-day org-agenda-start-day)) (if (stringp start-day)
> > (progn (setq start-day (time-to-days (org-read-date nil t start-day)))))
> > (org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda)
> > (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today
> > (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
> 14))
> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
> ndays
> > 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
> > (day-cnt 0) (inhibit-redisplay (not debug-on-error))
> > (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays)) (n
> 0))
> > (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
> > day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse day-numbers))
> > (setq clocktable-start (car day-numbers) clocktable-end (1+ (or (org-last
> > day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
> > day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
> > (make-local-variable 'org-agenda-current-span) (org-agenda-ndays-to-span
> > span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers))
> (d2
> > (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
> > (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
> > org-agenda-overriding-header) (insert ...)) ((equal
> > org-agenda-overriding-header "") nil) ((stringp
> > org-agenda-overriding-header) (insert ... "\n")) (t (user-error "Invalid
> > value for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
> > (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ...
> ...
> > t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1
> > day-numbers (setq day-numbers ...)))) (setq date
> > (calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp (= d
> > today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and
> > start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files
> thefiles
> > rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
> > 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ...
> ...)
> > (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ...
> ...
> > ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary
> > (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...)))) (if
> (or
> > rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
> > (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
> > (org-agenda-get-day-face date)) (put-text-property s (1- ...)
> > 'org-date-line t) (put-text-property s (1- ...) 'org-agenda-date-header
> t)
> > (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn
> ...))
> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> > rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
> > (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
> > org-agenda-clockreport-mode clocktable-start) (progn (let
> > ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p :block))
> > (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p
> :tend
> > clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply ...
> p))
> > (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
> > (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
> > org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
> > (pos-visible-in-window-p (point-max)))) nil (goto-char (1- (point-max)))
> > (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1))) (progn
> > (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos 1))
> > (add-text-properties (point-min) (point-max) (list 'org-agenda-type
> 'agenda
> > 'org-last-args (list arg start-day span) 'org-redo-cmd
> > org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
> > org-agenda-show-log-scoped 'clockcheck) (progn
> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> > buffer-read-only t) (message "")))
> >   org-agenda-list(nil nil day nil)
> >   (let nil (org-agenda-list 'nil nil 'day nil))
> >   eval((let nil (org-agenda-list 'nil nil 'day nil)))
> >   org-let(nil (org-agenda-list 'nil nil 'day nil))
> >   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops redo-cmd))
> >   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa (if
> > (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
> > org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name (or
> > org-agenda-this-buffer-name org-agenda-buffer-name))
> (org-agenda-keep-modes
> > t) (tag-filter org-agenda-tag-filter) (tag-preset (get
> > 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
> > org-agenda-top-headline-filter) (cat-filter org-agenda-category-filter)
> > (cat-preset (get 'org-agenda-category-filter :preset-filter)) (re-filter
> > org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
> > :preset-filter)) (effort-filter org-agenda-effort-filter) (effort-preset
> > (get 'org-agenda-effort-filter :preset-filter))
> > (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
> > org-agenda-columns-active) (line (org-current-line)) (window-line (- line
> > (org-current-line (window-start)))) (lprops (get 'org-agenda-redo-command
> > 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd)) (last-args
> > (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
> > (get-text-property p 'org-series-cmd))
> (org-agenda-overriding-cmd-arguments
> > (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
> > last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
> > (get-text-property p 'org-series-redo-cmd))) (put 'org-agenda-tag-filter
> > :preset-filter nil) (put 'org-agenda-category-filter :preset-filter nil)
> > (put 'org-agenda-regexp-filter :preset-filter nil) (put
> > 'org-agenda-effort-filter :preset-filter nil) (and cols
> (org-columns-quit))
> > (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
> > series-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
> > org-agenda-category-filter cat-filter org-agenda-regexp-filter re-filter
> > org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
> > top-hl-filter) (message "Rebuilding agenda buffer...done") (put
> > 'org-agenda-tag-filter :preset-filter tag-preset) (put
> > 'org-agenda-category-filter :preset-filter cat-preset) (put
> > 'org-agenda-regexp-filter :preset-filter re-preset) (put
> > 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag (or
> > tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
> > effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag
> (progn
> > (org-agenda-filter-apply tag 'tag t))) (if cat (progn
> > (org-agenda-filter-apply cat 'category))) (if effort (progn
> > (org-agenda-filter-apply effort 'effort))) (if re (progn
> > (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
> > (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
> > (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line line)
> > (recenter window-line))
> >   org-agenda-redo(t)
> >   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
> > --dolist-tail-- (setq buffer (car --dolist-tail--)) (save-current-buffer
> > (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
> > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
> > (org-agenda-redo t))
> >   org-agenda-redo-all(nil)
> >   funcall-interactively(org-agenda-redo-all nil)
> >   call-interactively(org-agenda-redo-all nil nil)
> >   command-execute(org-agenda-redo-all)
> > ```
> >
> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
> >
> >
> > On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com>
> wrote:
> >
> >> > I want to get around this problem. So need to know how to detect
> >> currently
> >> > in logbook drawer or something else which used to record clocking
> note,
> >> > `org-add-note`, etc.
> >>
> >> You may try to use `org-logbook-drawer-re'.
> >>
> >> > When I toggle org-log-mode and related options in org-agenda buffer. I
> >> > found my org-link-beautify will caused long time suspend and no stop.
> >> After
> >> > debug, I found org-link-beautify text-property caused this problem.
> >>
> >> Could you provide more details how your text property is causing the
> >> problem in org-agenda? Which function in agenda is slow?
> >>
> >> Best,
> >> Ihor
> >>
> >>
> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
> >>
> >> > I have a org-mode extension:
> >> >
> >>
> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
> >> >
> >> > It will beautify links with text-properties.
> >> >
> >> > When I toggle org-log-mode and related options in org-agenda buffer. I
> >> > found my org-link-beautify will caused long time suspend and no stop.
> >> After
> >> > debug, I found org-link-beautify text-property caused this problem.
> >> >
> >> > I want to get around this problem. So need to know how to detect
> >> currently
> >> > in logbook drawer or something else which used to record clocking
> note,
> >> > `org-add-note`, etc.
> >> >
> >> > Or maybe org-agenda upstream can do something to work around this
> >> > text-properties issue?
> >> >
> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> >> > Blog: http://stardiviner.github.io/
> >>
>

[-- Attachment #2: Type: text/html, Size: 34284 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-16  3:55       ` numbchild
@ 2020-08-16  6:38         ` Ihor Radchenko
  2020-08-17  0:38           ` numbchild
  0 siblings, 1 reply; 13+ messages in thread
From: Ihor Radchenko @ 2020-08-16  6:38 UTC (permalink / raw)
  To: numbchild@gmail.com; +Cc: Org-mode

> Your suggestion is very useful, I can see what function is invoked many
> times. But still can't understand what's the cause.

Looking at your CPU profiler report I can see that the slow part is
happening while running org-agenda-finalize when agenda buffer is
already populated. Most of time is taken by calling your function. I
suspect that it is simply called many times (maybe infinite loop?).

You may check the number of times your function is called using

(require 'elp)
(elp-instrument-function #'org-link-beautify)
;; run agenda
;; M-x elp-results

Another suggestion would be invoking debug-on-entry for you function,
for org-activate-links, and for org-agenda-finalize.

Best,
Ihor




"numbchild@gmail.com" <numbchild@gmail.com> writes:

> I tried use debug-on-entry on:
>   + org-agenda-list(nil)
>     - org-agenda-mode()
>       + org-agenda-set-mode-name()
>         - org-update-dblock
>           + org-dblock-write:clocktable
>
> But got no lucky, Then I followed your another suggestion, use profiler:
>
> I got a very big message log, (not suitable for paste in email, so I paste
> it on Gist)
>
> - CPU profiler report: https://www.pastery.net/gststf/
> - Memory profiler report: https://www.pastery.net/gststf+qzyxaf/#qzyxaf
>
> The very deepest call stacks seems the output format is not long enough, so
> can't display.
>
> Your suggestion is very useful, I can see what function is invoked many
> times. But still can't understand what's the cause.
>
> [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> IRC(freeenode): stardiviner                     Twitter:  @numbchild
> Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> Blog: http://stardiviner.github.io/
>
>
> On Sat, Aug 15, 2020 at 2:02 PM Ihor Radchenko <yantar92@gmail.com> wrote:
>
>> >Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
>> >but has long time suspend.
>>
>> That looks unreadable for me. Also, debug on quit may not show the
>> problematic part depending on your luck.
>>
>> It would be easier to understand your problem if you provided the
>> profiler report (M-x profiler-start ... M-x profiler-report).
>> Then, you could debug-on-entry using the problematic part according to
>> the profiler report.
>>
>> A blind guess - maybe you are modifying match data somewhere in your
>> code. This might cause infinite loop in
>>
>> > (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>>
>> Best,
>> Ihor
>>
>> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>>
>> > Thanks for replying, Ihor. I will look into this regexp.
>> >
>> > Here is the backtrace of "toggle-debug-on-quit" when I refresh org-agenda
>> > but has long time suspend.
>> >
>> > ```
>> > Debugger entered--Lisp error: (quit)
>> >
>> >
>> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
>> > 17651 t)
>> >   (while (re-search-forward org-link-any-re limit t) (let* ((start
>> > (match-beginning 0)) (end (match-end 0)) (visible-start (or
>> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
>> > (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle) ((eq 91
>> > (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
>> > org-highlight-links) (not (string-match-p org-element-paragraph-separate
>> > (match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
>> > ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
>> > (org-element-property :raw-link link-object)) (type (org-element-property
>> > :type link-object)) (path (org-element-property :path link-object))
>> > (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
>> > (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at end)
>> (if
>> > (not (eq ... style)) (add-text-properties start end properties)
>> > (remove-text-properties start end '...) (let (...) (add-text-properties
>> > start visible-start hidden) (add-text-properties visible-start
>> visible-end
>> > properties) (add-text-properties visible-end end hidden)
>> > (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at
>> visible-end)))
>> > (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
>> >   (catch :exit (while (re-search-forward org-link-any-re limit t) (let*
>> > ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
>> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end 3)
>> > (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...) 'bracket)
>> (t
>> > 'plain)))) (if (and (memq style org-highlight-links) (not (string-match-p
>> > org-element-paragraph-separate (match-string 0))) (not (and (eq style
>> ...)
>> > (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type ...)
>> > (path ...) (properties ...)) (org-remove-flyspell-overlays-in start end)
>> > (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start end
>> > properties) (remove-text-properties start end ...) (let ... ... ... ...
>> ...
>> > ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
>> >   org-activate-links(17651)
>> >   (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>> >   (save-excursion (while (org-activate-links (point-max)) (goto-char
>> > (match-end 0))))
>> >   (save-excursion (goto-char (point-min)) (save-excursion (while
>> > (org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
>> > org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
>> > org-agenda-with-colors nil (remove-text-properties (point-min)
>> (point-max)
>> > '(face nil))) (if (and (boundp 'org-overriding-columns-format)
>> > org-overriding-columns-format) (progn (set (make-local-variable
>> > 'org-local-columns-format) org-overriding-columns-format))) (if
>> > org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
>> > org-agenda-fontify-priorities (progn (org-agenda-fontify-priorities)))
>> (if
>> > (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
>> > (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
>> > org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
>> > (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
>> > (save-excursion (next-single-property-change (point-min) 'org-habit-p)))
>> > (progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
>> > (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> > org-agenda-show-inherited-tags 'always) (and (listp
>> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
>> t)
>> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
>> > org-agenda-use-tag-inheritance) (not (memq org-agenda-type
>> > org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
>> > (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
>> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
>> > ...))))))) (setq org-agenda-represented-tags nil
>> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
>> > (progn (org-agenda-filter-top-headline-apply
>> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
>> (get
>> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> > org-agenda-category-filter 'category))) (if (get
>> > 'org-agenda-category-filter :preset-filter) (progn
>> (org-agenda-filter-apply
>> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
>> > :preset-filter) (progn (org-agenda-filter-apply (get
>> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
>> > :preset-filter) (progn (org-agenda-filter-apply (get
>> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>> >   (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min))
>> > (save-excursion (while (org-activate-links (point-max)) (goto-char
>> > (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
>> > (org-agenda-align-tags)) (if org-agenda-with-colors nil
>> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
>> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
>> > (progn (set (make-local-variable 'org-local-columns-format)
>> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
>> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
>> > (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
>> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
>> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
>> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
>> > (featurep 'org-habit) (save-excursion (next-single-property-change
>> > (point-min) 'org-habit-p))) (progn
>> (org-habit-insert-consistency-graphs)))
>> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> > org-agenda-show-inherited-tags 'always) (and (listp
>> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
>> t)
>> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
>> > org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
>> > (save-excursion (goto-char (point-min)) (while (equal (forward-line) 0)
>> (if
>> > (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
>> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
>> > (progn (org-agenda-filter-top-headline-apply
>> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
>> (get
>> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> > org-agenda-category-filter 'category))) (if (get
>> > 'org-agenda-category-filter :preset-filter) (progn
>> (org-agenda-filter-apply
>> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
>> > :preset-filter) (progn (org-agenda-filter-apply (get
>> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
>> > :preset-filter) (progn (org-agenda-filter-apply (get
>> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
>> > 'org-agenda-finalize-hook))
>> >   (if org-agenda-multi nil (let ((inhibit-read-only t)) (save-excursion
>> > (goto-char (point-min)) (save-excursion (while (org-activate-links
>> > (point-max)) (goto-char (match-end 0)))) (if (eq org-agenda-remove-tags
>> t)
>> > nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
>> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
>> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
>> > (progn (set (make-local-variable 'org-local-columns-format)
>> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
>> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
>> > (org-agenda-fontify-priorities))) (if (and org-agenda-dim-blocked-tasks
>> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
>> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
>> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
>> > (featurep 'org-habit) (save-excursion (next-single-property-change
>> > (point-min) 'org-habit-p))) (progn
>> (org-habit-insert-consistency-graphs)))
>> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> > org-agenda-show-inherited-tags 'always) (and (listp
>> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> > org-agenda-show-inherited-tags)) (and (eq org-agenda-show-inherited-tags
>> t)
>> > (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let (mrk)
>> > (save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
>> > ...))))) (setq org-agenda-represented-tags nil
>> > org-agenda-represented-categories nil) (if org-agenda-top-headline-filter
>> > (progn (org-agenda-filter-top-headline-apply
>> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
>> (get
>> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> > org-agenda-category-filter 'category))) (if (get
>> > 'org-agenda-category-filter :preset-filter) (progn
>> (org-agenda-filter-apply
>> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
>> > :preset-filter) (progn (org-agenda-filter-apply (get
>> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
>> > :preset-filter) (progn (org-agenda-filter-apply (get
>> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local)) (run-hooks
>> > 'org-agenda-finalize-hook)))
>> >   org-agenda-finalize()
>> >   (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
>> (today
>> > (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
>> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
>> 14))
>> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
>> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
>> ndays
>> > 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (- sd (+
>> > ... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay (not
>> > debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit--
>> (1-
>> > ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (cons (1+
>> > (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
>> > (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
>> > clocktable-end (1+ (or (org-last day-numbers) 0))) (set
>> > (make-local-variable 'org-starting-day) (car day-numbers)) (set
>> > (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
>> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
>> > org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-last
>> > day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week
>> > d2))) (setq s (point)) (cond ((not org-agenda-overriding-header) (insert
>> > (concat ... "-agenda" ... ":\n"))) ((equal org-agenda-overriding-header
>> "")
>> > nil) ((stringp org-agenda-overriding-header) (insert (propertize
>> > org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid
>> value
>> > for `org-agenda-overriding-hea..." org-agenda-overriding-header)))) (if
>> (>
>> > (point) s) (progn (add-text-properties s (1- (point)) (list 'face
>> > 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line
>> s))))
>> > (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
>> > day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s
>> (point))
>> > (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq
>> > start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos
>> > (point))))) (setq files thefiles rtnall nil) (while (setq file (car-safe
>> > (prog1 files (setq files ...)))) (catch 'nextfile (org-check-agenda-file
>> > file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if (member
>> > :deadline* org-agenda-entry-types) (progn ...)) (if (member :scheduled*
>> > org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...)) (if
>> > org-agenda-include-deadlines nil (setq org-agenda-entry-types ...)) (cond
>> > (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall (append
>> > rtnall rtn)))) (if org-agenda-include-diary (progn (let
>> > ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq rtn
>> > (org-get-entries-from-diary date)) (setq rtnall (append rtnall rtn)))))
>> (if
>> > (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
>> > (insert (if (stringp org-agenda-format-date) (format-time-string
>> > org-agenda-format-date ...) (funcall org-agenda-format-date date)) "\n")
>> > (put-text-property s (1- (point)) 'face (org-agenda-get-day-face date))
>> > (put-text-property s (1- (point)) 'org-date-line t) (put-text-property s
>> > (1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point))
>> > 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ... t)))
>> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
>> > rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point)) 'day
>> d)
>> > (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
>> > org-agenda-clockreport-mode clocktable-start) (progn (let
>> > ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
>> > org-agenda-clockreport-parameter-plist)) tbl) (setq p (org-plist-delete p
>> > :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p
>> (plist-put
>> > p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq tbl
>> > (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
>> > (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer)) (if
>> > (or (not (get-buffer-window org-agenda-buffer-name)) (and
>> > (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
>> > (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not
>> > (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or
>> start-pos
>> > 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
>> > (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args
>> (list
>> > arg start-day span) 'org-redo-cmd org-agenda-redo-command 'org-series-cmd
>> > org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
>> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
>> > buffer-read-only t) (message ""))
>> >   (catch 'exit (setq org-agenda-buffer-name (or
>> org-agenda-buffer-tmp-name
>> > (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
>> > org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
>> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq
>> > start-day (or start-day org-agenda-start-day)) (if (stringp start-day)
>> > (progn (setq start-day (time-to-days (org-read-date nil t start-day)))))
>> > (org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda)
>> > (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today
>> > (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays
>> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
>> 14))
>> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode))
>> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
>> ndays
>> > 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
>> > (day-cnt 0) (inhibit-redisplay (not debug-on-error))
>> > (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays)) (n
>> 0))
>> > (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
>> > day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse day-numbers))
>> > (setq clocktable-start (car day-numbers) clocktable-end (1+ (or (org-last
>> > day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
>> > day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
>> > (make-local-variable 'org-agenda-current-span) (org-agenda-ndays-to-span
>> > span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers))
>> (d2
>> > (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
>> > (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
>> > org-agenda-overriding-header) (insert ...)) ((equal
>> > org-agenda-overriding-header "") nil) ((stringp
>> > org-agenda-overriding-header) (insert ... "\n")) (t (user-error "Invalid
>> > value for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
>> > (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ...
>> ...
>> > t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1
>> > day-numbers (setq day-numbers ...)))) (setq date
>> > (calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp (= d
>> > today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and
>> > start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files
>> thefiles
>> > rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
>> > 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ...
>> ...)
>> > (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ...
>> ...
>> > ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary
>> > (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...)))) (if
>> (or
>> > rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
>> > (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
>> > (org-agenda-get-day-face date)) (put-text-property s (1- ...)
>> > 'org-date-line t) (put-text-property s (1- ...) 'org-agenda-date-header
>> t)
>> > (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn
>> ...))
>> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
>> > rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
>> > (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
>> > org-agenda-clockreport-mode clocktable-start) (progn (let
>> > ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p :block))
>> > (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p
>> :tend
>> > clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply ...
>> p))
>> > (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
>> > (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
>> > org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
>> > (pos-visible-in-window-p (point-max)))) nil (goto-char (1- (point-max)))
>> > (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1))) (progn
>> > (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos 1))
>> > (add-text-properties (point-min) (point-max) (list 'org-agenda-type
>> 'agenda
>> > 'org-last-args (list arg start-day span) 'org-redo-cmd
>> > org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
>> > org-agenda-show-log-scoped 'clockcheck) (progn
>> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
>> > buffer-read-only t) (message "")))
>> >   org-agenda-list(nil nil day nil)
>> >   (let nil (org-agenda-list 'nil nil 'day nil))
>> >   eval((let nil (org-agenda-list 'nil nil 'day nil)))
>> >   org-let(nil (org-agenda-list 'nil nil 'day nil))
>> >   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops redo-cmd))
>> >   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa (if
>> > (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
>> > org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name (or
>> > org-agenda-this-buffer-name org-agenda-buffer-name))
>> (org-agenda-keep-modes
>> > t) (tag-filter org-agenda-tag-filter) (tag-preset (get
>> > 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
>> > org-agenda-top-headline-filter) (cat-filter org-agenda-category-filter)
>> > (cat-preset (get 'org-agenda-category-filter :preset-filter)) (re-filter
>> > org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
>> > :preset-filter)) (effort-filter org-agenda-effort-filter) (effort-preset
>> > (get 'org-agenda-effort-filter :preset-filter))
>> > (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
>> > org-agenda-columns-active) (line (org-current-line)) (window-line (- line
>> > (org-current-line (window-start)))) (lprops (get 'org-agenda-redo-command
>> > 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd)) (last-args
>> > (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
>> > (get-text-property p 'org-series-cmd))
>> (org-agenda-overriding-cmd-arguments
>> > (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
>> > last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
>> > (get-text-property p 'org-series-redo-cmd))) (put 'org-agenda-tag-filter
>> > :preset-filter nil) (put 'org-agenda-category-filter :preset-filter nil)
>> > (put 'org-agenda-regexp-filter :preset-filter nil) (put
>> > 'org-agenda-effort-filter :preset-filter nil) (and cols
>> (org-columns-quit))
>> > (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
>> > series-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
>> > org-agenda-category-filter cat-filter org-agenda-regexp-filter re-filter
>> > org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
>> > top-hl-filter) (message "Rebuilding agenda buffer...done") (put
>> > 'org-agenda-tag-filter :preset-filter tag-preset) (put
>> > 'org-agenda-category-filter :preset-filter cat-preset) (put
>> > 'org-agenda-regexp-filter :preset-filter re-preset) (put
>> > 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag (or
>> > tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
>> > effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag
>> (progn
>> > (org-agenda-filter-apply tag 'tag t))) (if cat (progn
>> > (org-agenda-filter-apply cat 'category))) (if effort (progn
>> > (org-agenda-filter-apply effort 'effort))) (if re (progn
>> > (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
>> > (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
>> > (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line line)
>> > (recenter window-line))
>> >   org-agenda-redo(t)
>> >   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
>> > --dolist-tail-- (setq buffer (car --dolist-tail--)) (save-current-buffer
>> > (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
>> > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
>> > (org-agenda-redo t))
>> >   org-agenda-redo-all(nil)
>> >   funcall-interactively(org-agenda-redo-all nil)
>> >   call-interactively(org-agenda-redo-all nil nil)
>> >   command-execute(org-agenda-redo-all)
>> > ```
>> >
>> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> > Blog: http://stardiviner.github.io/
>> >
>> >
>> > On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com>
>> wrote:
>> >
>> >> > I want to get around this problem. So need to know how to detect
>> >> currently
>> >> > in logbook drawer or something else which used to record clocking
>> note,
>> >> > `org-add-note`, etc.
>> >>
>> >> You may try to use `org-logbook-drawer-re'.
>> >>
>> >> > When I toggle org-log-mode and related options in org-agenda buffer. I
>> >> > found my org-link-beautify will caused long time suspend and no stop.
>> >> After
>> >> > debug, I found org-link-beautify text-property caused this problem.
>> >>
>> >> Could you provide more details how your text property is causing the
>> >> problem in org-agenda? Which function in agenda is slow?
>> >>
>> >> Best,
>> >> Ihor
>> >>
>> >>
>> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>> >>
>> >> > I have a org-mode extension:
>> >> >
>> >>
>> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
>> >> >
>> >> > It will beautify links with text-properties.
>> >> >
>> >> > When I toggle org-log-mode and related options in org-agenda buffer. I
>> >> > found my org-link-beautify will caused long time suspend and no stop.
>> >> After
>> >> > debug, I found org-link-beautify text-property caused this problem.
>> >> >
>> >> > I want to get around this problem. So need to know how to detect
>> >> currently
>> >> > in logbook drawer or something else which used to record clocking
>> note,
>> >> > `org-add-note`, etc.
>> >> >
>> >> > Or maybe org-agenda upstream can do something to work around this
>> >> > text-properties issue?
>> >> >
>> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> >> > Blog: http://stardiviner.github.io/
>> >>
>>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-16  6:38         ` Ihor Radchenko
@ 2020-08-17  0:38           ` numbchild
  2020-08-17  0:46             ` numbchild
  2020-08-17  1:49             ` Ihor Radchenko
  0 siblings, 2 replies; 13+ messages in thread
From: numbchild @ 2020-08-17  0:38 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Org-mode

[-- Attachment #1: Type: text/plain, Size: 32825 bytes --]

Ihor, thanks for your detailed help.
I followed your steps, the `elp` step, I confirmed `org-link-beautify` is
invoked and fall into an infinite loop.

```
org-link-beautify  11265       58.586412984  0.0052007468
```

And another step `debug-on-entry` on `org-link-beautify`,
`org-agenda-finalize`, `org-activate-links`. I have not got a stoppoint
backtrace on any of upper functions when org-agenda initializes. This is
weird, because I tested to use `debug-on-entry` on `org-agenda`. It can
popup a stoppoint backtrace.

I reviewed my org-link-beautify (
https://github.com/stardiviner/org-link-beautify) source code, I have not
use any regexp matching. I guess the function
`org-link-beautify--get-element` invoked `(org-element-context)` caused
this problem or other similar places. But I use `debug-on-entry` on
`org-element-context`. Still have not got stoppoint backtrace.

Need your more help. Sorry for disturbing you....

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/


On Sun, Aug 16, 2020 at 2:39 PM Ihor Radchenko <yantar92@gmail.com> wrote:

> > Your suggestion is very useful, I can see what function is invoked many
> > times. But still can't understand what's the cause.
>
> Looking at your CPU profiler report I can see that the slow part is
> happening while running org-agenda-finalize when agenda buffer is
> already populated. Most of time is taken by calling your function. I
> suspect that it is simply called many times (maybe infinite loop?).
>
> You may check the number of times your function is called using
>
> (require 'elp)
> (elp-instrument-function #'org-link-beautify)
> ;; run agenda
> ;; M-x elp-results
>
> Another suggestion would be invoking debug-on-entry for you function,
> for org-activate-links, and for org-agenda-finalize.
>
> Best,
> Ihor
>
>
>
>
> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>
> > I tried use debug-on-entry on:
> >   + org-agenda-list(nil)
> >     - org-agenda-mode()
> >       + org-agenda-set-mode-name()
> >         - org-update-dblock
> >           + org-dblock-write:clocktable
> >
> > But got no lucky, Then I followed your another suggestion, use profiler:
> >
> > I got a very big message log, (not suitable for paste in email, so I
> paste
> > it on Gist)
> >
> > - CPU profiler report: https://www.pastery.net/gststf/
> > - Memory profiler report: https://www.pastery.net/gststf+qzyxaf/#qzyxaf
> >
> > The very deepest call stacks seems the output format is not long enough,
> so
> > can't display.
> >
> > Your suggestion is very useful, I can see what function is invoked many
> > times. But still can't understand what's the cause.
> >
> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
> >
> >
> > On Sat, Aug 15, 2020 at 2:02 PM Ihor Radchenko <yantar92@gmail.com>
> wrote:
> >
> >> >Here is the backtrace of "toggle-debug-on-quit" when I refresh
> org-agenda
> >> >but has long time suspend.
> >>
> >> That looks unreadable for me. Also, debug on quit may not show the
> >> problematic part depending on your luck.
> >>
> >> It would be easier to understand your problem if you provided the
> >> profiler report (M-x profiler-start ... M-x profiler-report).
> >> Then, you could debug-on-entry using the problematic part according to
> >> the profiler report.
> >>
> >> A blind guess - maybe you are modifying match data somewhere in your
> >> code. This might cause infinite loop in
> >>
> >> > (while (org-activate-links (point-max)) (goto-char (match-end 0)))
> >>
> >> Best,
> >> Ihor
> >>
> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
> >>
> >> > Thanks for replying, Ihor. I will look into this regexp.
> >> >
> >> > Here is the backtrace of "toggle-debug-on-quit" when I refresh
> org-agenda
> >> > but has long time suspend.
> >> >
> >> > ```
> >> > Debugger entered--Lisp error: (quit)
> >> >
> >> >
> >>
> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
> >> > 17651 t)
> >> >   (while (re-search-forward org-link-any-re limit t) (let* ((start
> >> > (match-beginning 0)) (end (match-end 0)) (visible-start (or
> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end
> 3)
> >> > (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle) ((eq
> 91
> >> > (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
> >> > org-highlight-links) (not (string-match-p
> org-element-paragraph-separate
> >> > (match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
> >> > ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
> >> > (org-element-property :raw-link link-object)) (type
> (org-element-property
> >> > :type link-object)) (path (org-element-property :path link-object))
> >> > (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
> >> > (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at
> end)
> >> (if
> >> > (not (eq ... style)) (add-text-properties start end properties)
> >> > (remove-text-properties start end '...) (let (...)
> (add-text-properties
> >> > start visible-start hidden) (add-text-properties visible-start
> >> visible-end
> >> > properties) (add-text-properties visible-end end hidden)
> >> > (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at
> >> visible-end)))
> >> > (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
> >> >   (catch :exit (while (re-search-forward org-link-any-re limit t)
> (let*
> >> > ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end
> 3)
> >> > (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...)
> 'bracket)
> >> (t
> >> > 'plain)))) (if (and (memq style org-highlight-links) (not
> (string-match-p
> >> > org-element-paragraph-separate (match-string 0))) (not (and (eq style
> >> ...)
> >> > (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type ...)
> >> > (path ...) (properties ...)) (org-remove-flyspell-overlays-in start
> end)
> >> > (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start
> end
> >> > properties) (remove-text-properties start end ...) (let ... ... ...
> ...
> >> ...
> >> > ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
> >> >   org-activate-links(17651)
> >> >   (while (org-activate-links (point-max)) (goto-char (match-end 0)))
> >> >   (save-excursion (while (org-activate-links (point-max)) (goto-char
> >> > (match-end 0))))
> >> >   (save-excursion (goto-char (point-min)) (save-excursion (while
> >> > (org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
> >> > org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
> >> > org-agenda-with-colors nil (remove-text-properties (point-min)
> >> (point-max)
> >> > '(face nil))) (if (and (boundp 'org-overriding-columns-format)
> >> > org-overriding-columns-format) (progn (set (make-local-variable
> >> > 'org-local-columns-format) org-overriding-columns-format))) (if
> >> > org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
> >> > org-agenda-fontify-priorities (progn (org-agenda-fontify-priorities)))
> >> (if
> >> > (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
> >> > (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
> >> > org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
> >> > (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
> >> > (save-excursion (next-single-property-change (point-min)
> 'org-habit-p)))
> >> > (progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
> >> > (org-get-at-bol 'org-agenda-type)) (if (or (eq
> >> > org-agenda-show-inherited-tags 'always) (and (listp
> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
> >> > org-agenda-show-inherited-tags)) (and (eq
> org-agenda-show-inherited-tags
> >> t)
> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> >> > org-agenda-use-tag-inheritance) (not (memq org-agenda-type
> >> > org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
> >> > (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
> >> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
> >> > ...))))))) (setq org-agenda-represented-tags nil
> >> > org-agenda-represented-categories nil) (if
> org-agenda-top-headline-filter
> >> > (progn (org-agenda-filter-top-headline-apply
> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> >> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> >> (get
> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
> >> > org-agenda-category-filter 'category))) (if (get
> >> > 'org-agenda-category-filter :preset-filter) (progn
> >> (org-agenda-filter-apply
> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> >> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> >> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> >> >   (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min))
> >> > (save-excursion (while (org-activate-links (point-max)) (goto-char
> >> > (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
> >> > (org-agenda-align-tags)) (if org-agenda-with-colors nil
> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> >> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> >> > (progn (set (make-local-variable 'org-local-columns-format)
> >> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> >> > (org-agenda-fontify-priorities))) (if (and
> org-agenda-dim-blocked-tasks
> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
> >> > (point-min) 'org-habit-p))) (progn
> >> (org-habit-insert-consistency-graphs)))
> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> >> > org-agenda-show-inherited-tags 'always) (and (listp
> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
> >> > org-agenda-show-inherited-tags)) (and (eq
> org-agenda-show-inherited-tags
> >> t)
> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> >> > org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
> >> > (save-excursion (goto-char (point-min)) (while (equal (forward-line)
> 0)
> >> (if
> >> > (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
> >> > org-agenda-represented-categories nil) (if
> org-agenda-top-headline-filter
> >> > (progn (org-agenda-filter-top-headline-apply
> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> >> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> >> (get
> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
> >> > org-agenda-category-filter 'category))) (if (get
> >> > 'org-agenda-category-filter :preset-filter) (progn
> >> (org-agenda-filter-apply
> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> >> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> >> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> (run-hooks
> >> > 'org-agenda-finalize-hook))
> >> >   (if org-agenda-multi nil (let ((inhibit-read-only t))
> (save-excursion
> >> > (goto-char (point-min)) (save-excursion (while (org-activate-links
> >> > (point-max)) (goto-char (match-end 0)))) (if (eq
> org-agenda-remove-tags
> >> t)
> >> > nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
> >> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
> >> > (progn (set (make-local-variable 'org-local-columns-format)
> >> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
> >> > (org-agenda-fontify-priorities))) (if (and
> org-agenda-dim-blocked-tasks
> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
> >> > (point-min) 'org-habit-p))) (progn
> >> (org-habit-insert-consistency-graphs)))
> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
> >> > org-agenda-show-inherited-tags 'always) (and (listp
> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
> >> > org-agenda-show-inherited-tags)) (and (eq
> org-agenda-show-inherited-tags
> >> t)
> >> > (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let
> (mrk)
> >> > (save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
> >> > ...))))) (setq org-agenda-represented-tags nil
> >> > org-agenda-represented-categories nil) (if
> org-agenda-top-headline-filter
> >> > (progn (org-agenda-filter-top-headline-apply
> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> >> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
> >> (get
> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
> >> > org-agenda-category-filter 'category))) (if (get
> >> > 'org-agenda-category-filter :preset-filter) (progn
> >> (org-agenda-filter-apply
> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> >> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> >> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> (run-hooks
> >> > 'org-agenda-finalize-hook)))
> >> >   org-agenda-finalize()
> >> >   (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
> >> (today
> >> > (org-today)) (sd (or start-day today)) (ndays
> (org-agenda-span-to-ndays
> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
> >> 14))
> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
> 'ifmode))
> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
> >> ndays
> >> > 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (-
> sd (+
> >> > ... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay
> (not
> >> > debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit--
> >> (1-
> >> > ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (cons
> (1+
> >> > (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
> >> > (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
> >> > clocktable-end (1+ (or (org-last day-numbers) 0))) (set
> >> > (make-local-variable 'org-starting-day) (car day-numbers)) (set
> >> > (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
> >> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
> >> > org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2
> (org-last
> >> > day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week
> >> > d2))) (setq s (point)) (cond ((not org-agenda-overriding-header)
> (insert
> >> > (concat ... "-agenda" ... ":\n"))) ((equal
> org-agenda-overriding-header
> >> "")
> >> > nil) ((stringp org-agenda-overriding-header) (insert (propertize
> >> > org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid
> >> value
> >> > for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
> (if
> >> (>
> >> > (point) s) (progn (add-text-properties s (1- (point)) (list 'face
> >> > 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line
> >> s))))
> >> > (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
> >> > day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s
> >> (point))
> >> > (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd)))
> (setq
> >> > start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq
> end-pos
> >> > (point))))) (setq files thefiles rtnall nil) (while (setq file
> (car-safe
> >> > (prog1 files (setq files ...)))) (catch 'nextfile
> (org-check-agenda-file
> >> > file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if
> (member
> >> > :deadline* org-agenda-entry-types) (progn ...)) (if (member
> :scheduled*
> >> > org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...))
> (if
> >> > org-agenda-include-deadlines nil (setq org-agenda-entry-types ...))
> (cond
> >> > (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall
> (append
> >> > rtnall rtn)))) (if org-agenda-include-diary (progn (let
> >> > ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq
> rtn
> >> > (org-get-entries-from-diary date)) (setq rtnall (append rtnall
> rtn)))))
> >> (if
> >> > (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+
> day-cnt))
> >> > (insert (if (stringp org-agenda-format-date) (format-time-string
> >> > org-agenda-format-date ...) (funcall org-agenda-format-date date))
> "\n")
> >> > (put-text-property s (1- (point)) 'face (org-agenda-get-day-face
> date))
> >> > (put-text-property s (1- (point)) 'org-date-line t)
> (put-text-property s
> >> > (1- (point)) 'org-agenda-date-header t) (put-text-property s (1-
> (point))
> >> > 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ...
> t)))
> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> >> > rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point))
> 'day
> >> d)
> >> > (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
> >> > ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
> >> > org-agenda-clockreport-parameter-plist)) tbl) (setq p
> (org-plist-delete p
> >> > :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p
> >> (plist-put
> >> > p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq
> tbl
> >> > (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
> >> > (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer))
> (if
> >> > (or (not (get-buffer-window org-agenda-buffer-name)) (and
> >> > (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
> >> > (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not
> >> > (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or
> >> start-pos
> >> > 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
> >> > (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args
> >> (list
> >> > arg start-day span) 'org-redo-cmd org-agenda-redo-command
> 'org-series-cmd
> >> > org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> >> > buffer-read-only t) (message ""))
> >> >   (catch 'exit (setq org-agenda-buffer-name (or
> >> org-agenda-buffer-tmp-name
> >> > (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
> >> > org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
> >> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq
> >> > start-day (or start-day org-agenda-start-day)) (if (stringp start-day)
> >> > (progn (setq start-day (time-to-days (org-read-date nil t
> start-day)))))
> >> > (org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda)
> >> > (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
> (today
> >> > (org-today)) (sd (or start-day today)) (ndays
> (org-agenda-span-to-ndays
> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
> >> 14))
> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
> 'ifmode))
> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
> >> ndays
> >> > 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
> >> > (day-cnt 0) (inhibit-redisplay (not debug-on-error))
> >> > (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays)) (n
> >> 0))
> >> > (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
> >> > day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse
> day-numbers))
> >> > (setq clocktable-start (car day-numbers) clocktable-end (1+ (or
> (org-last
> >> > day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
> >> > day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
> >> > (make-local-variable 'org-agenda-current-span)
> (org-agenda-ndays-to-span
> >> > span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers))
> >> (d2
> >> > (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
> >> > (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
> >> > org-agenda-overriding-header) (insert ...)) ((equal
> >> > org-agenda-overriding-header "") nil) ((stringp
> >> > org-agenda-overriding-header) (insert ... "\n")) (t (user-error
> "Invalid
> >> > value for `org-agenda-overriding-hea..."
> org-agenda-overriding-header))))
> >> > (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ...
> >> ...
> >> > t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1
> >> > day-numbers (setq day-numbers ...)))) (setq date
> >> > (calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp
> (= d
> >> > today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if
> (and
> >> > start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files
> >> thefiles
> >> > rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
> >> > 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ...
> >> ...)
> >> > (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ...
> >> ...
> >> > ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary
> >> > (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...))))
> (if
> >> (or
> >> > rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
> >> > (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
> >> > (org-agenda-get-day-face date)) (put-text-property s (1- ...)
> >> > 'org-date-line t) (put-text-property s (1- ...)
> 'org-agenda-date-header
> >> t)
> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn
> >> ...))
> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
> >> > rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
> >> > ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p
> :block))
> >> > (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p
> >> :tend
> >> > clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply
> ...
> >> p))
> >> > (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
> >> > (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
> >> > org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
> >> > (pos-visible-in-window-p (point-max)))) nil (goto-char (1-
> (point-max)))
> >> > (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1)))
> (progn
> >> > (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos
> 1))
> >> > (add-text-properties (point-min) (point-max) (list 'org-agenda-type
> >> 'agenda
> >> > 'org-last-args (list arg start-day span) 'org-redo-cmd
> >> > org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
> >> > org-agenda-show-log-scoped 'clockcheck) (progn
> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> >> > buffer-read-only t) (message "")))
> >> >   org-agenda-list(nil nil day nil)
> >> >   (let nil (org-agenda-list 'nil nil 'day nil))
> >> >   eval((let nil (org-agenda-list 'nil nil 'day nil)))
> >> >   org-let(nil (org-agenda-list 'nil nil 'day nil))
> >> >   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops
> redo-cmd))
> >> >   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa
> (if
> >> > (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
> >> > org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name (or
> >> > org-agenda-this-buffer-name org-agenda-buffer-name))
> >> (org-agenda-keep-modes
> >> > t) (tag-filter org-agenda-tag-filter) (tag-preset (get
> >> > 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
> >> > org-agenda-top-headline-filter) (cat-filter
> org-agenda-category-filter)
> >> > (cat-preset (get 'org-agenda-category-filter :preset-filter))
> (re-filter
> >> > org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
> >> > :preset-filter)) (effort-filter org-agenda-effort-filter)
> (effort-preset
> >> > (get 'org-agenda-effort-filter :preset-filter))
> >> > (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
> >> > org-agenda-columns-active) (line (org-current-line)) (window-line (-
> line
> >> > (org-current-line (window-start)))) (lprops (get
> 'org-agenda-redo-command
> >> > 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd))
> (last-args
> >> > (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
> >> > (get-text-property p 'org-series-cmd))
> >> (org-agenda-overriding-cmd-arguments
> >> > (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
> >> > last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
> >> > (get-text-property p 'org-series-redo-cmd))) (put
> 'org-agenda-tag-filter
> >> > :preset-filter nil) (put 'org-agenda-category-filter :preset-filter
> nil)
> >> > (put 'org-agenda-regexp-filter :preset-filter nil) (put
> >> > 'org-agenda-effort-filter :preset-filter nil) (and cols
> >> (org-columns-quit))
> >> > (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
> >> > series-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
> >> > org-agenda-category-filter cat-filter org-agenda-regexp-filter
> re-filter
> >> > org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
> >> > top-hl-filter) (message "Rebuilding agenda buffer...done") (put
> >> > 'org-agenda-tag-filter :preset-filter tag-preset) (put
> >> > 'org-agenda-category-filter :preset-filter cat-preset) (put
> >> > 'org-agenda-regexp-filter :preset-filter re-preset) (put
> >> > 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag (or
> >> > tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
> >> > effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag
> >> (progn
> >> > (org-agenda-filter-apply tag 'tag t))) (if cat (progn
> >> > (org-agenda-filter-apply cat 'category))) (if effort (progn
> >> > (org-agenda-filter-apply effort 'effort))) (if re (progn
> >> > (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
> >> > (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
> >> > (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line
> line)
> >> > (recenter window-line))
> >> >   org-agenda-redo(t)
> >> >   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
> >> > --dolist-tail-- (setq buffer (car --dolist-tail--))
> (save-current-buffer
> >> > (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
> >> > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
> >> > (org-agenda-redo t))
> >> >   org-agenda-redo-all(nil)
> >> >   funcall-interactively(org-agenda-redo-all nil)
> >> >   call-interactively(org-agenda-redo-all nil nil)
> >> >   command-execute(org-agenda-redo-all)
> >> > ```
> >> >
> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> >> > Blog: http://stardiviner.github.io/
> >> >
> >> >
> >> > On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com>
> >> wrote:
> >> >
> >> >> > I want to get around this problem. So need to know how to detect
> >> >> currently
> >> >> > in logbook drawer or something else which used to record clocking
> >> note,
> >> >> > `org-add-note`, etc.
> >> >>
> >> >> You may try to use `org-logbook-drawer-re'.
> >> >>
> >> >> > When I toggle org-log-mode and related options in org-agenda
> buffer. I
> >> >> > found my org-link-beautify will caused long time suspend and no
> stop.
> >> >> After
> >> >> > debug, I found org-link-beautify text-property caused this problem.
> >> >>
> >> >> Could you provide more details how your text property is causing the
> >> >> problem in org-agenda? Which function in agenda is slow?
> >> >>
> >> >> Best,
> >> >> Ihor
> >> >>
> >> >>
> >> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
> >> >>
> >> >> > I have a org-mode extension:
> >> >> >
> >> >>
> >>
> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
> >> >> >
> >> >> > It will beautify links with text-properties.
> >> >> >
> >> >> > When I toggle org-log-mode and related options in org-agenda
> buffer. I
> >> >> > found my org-link-beautify will caused long time suspend and no
> stop.
> >> >> After
> >> >> > debug, I found org-link-beautify text-property caused this problem.
> >> >> >
> >> >> > I want to get around this problem. So need to know how to detect
> >> >> currently
> >> >> > in logbook drawer or something else which used to record clocking
> >> note,
> >> >> > `org-add-note`, etc.
> >> >> >
> >> >> > Or maybe org-agenda upstream can do something to work around this
> >> >> > text-properties issue?
> >> >> >
> >> >> > [stardiviner]           <Hack this world!>      GPG key ID:
> 47C32433
> >> >> > IRC(freeenode): stardiviner                     Twitter:
> @numbchild
> >> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3
> 2433
> >> >> > Blog: http://stardiviner.github.io/
> >> >>
> >>
>

[-- Attachment #2: Type: text/html, Size: 42682 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-17  0:38           ` numbchild
@ 2020-08-17  0:46             ` numbchild
  2020-08-17  1:49             ` Ihor Radchenko
  1 sibling, 0 replies; 13+ messages in thread
From: numbchild @ 2020-08-17  0:46 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Org-mode

[-- Attachment #1: Type: text/plain, Size: 34225 bytes --]

I figured an temporary workaround solution:

Use `(unless (memq major-mode org-link-beautify-exclude-modes) ...` in
`org-link-beautify` function to exclude `org-agenda-mode`.

But I still wonder what caused this problem.

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/


On Mon, Aug 17, 2020 at 8:38 AM numbchild@gmail.com <numbchild@gmail.com>
wrote:

> Ihor, thanks for your detailed help.
> I followed your steps, the `elp` step, I confirmed `org-link-beautify` is
> invoked and fall into an infinite loop.
>
> ```
> org-link-beautify  11265       58.586412984  0.0052007468
> ```
>
> And another step `debug-on-entry` on `org-link-beautify`,
> `org-agenda-finalize`, `org-activate-links`. I have not got a stoppoint
> backtrace on any of upper functions when org-agenda initializes. This is
> weird, because I tested to use `debug-on-entry` on `org-agenda`. It can
> popup a stoppoint backtrace.
>
> I reviewed my org-link-beautify (
> https://github.com/stardiviner/org-link-beautify) source code, I have not
> use any regexp matching. I guess the function
> `org-link-beautify--get-element` invoked `(org-element-context)` caused
> this problem or other similar places. But I use `debug-on-entry` on
> `org-element-context`. Still have not got stoppoint backtrace.
>
> Need your more help. Sorry for disturbing you....
>
> [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> IRC(freeenode): stardiviner                     Twitter:  @numbchild
> Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> Blog: http://stardiviner.github.io/
>
>
> On Sun, Aug 16, 2020 at 2:39 PM Ihor Radchenko <yantar92@gmail.com> wrote:
>
>> > Your suggestion is very useful, I can see what function is invoked many
>> > times. But still can't understand what's the cause.
>>
>> Looking at your CPU profiler report I can see that the slow part is
>> happening while running org-agenda-finalize when agenda buffer is
>> already populated. Most of time is taken by calling your function. I
>> suspect that it is simply called many times (maybe infinite loop?).
>>
>> You may check the number of times your function is called using
>>
>> (require 'elp)
>> (elp-instrument-function #'org-link-beautify)
>> ;; run agenda
>> ;; M-x elp-results
>>
>> Another suggestion would be invoking debug-on-entry for you function,
>> for org-activate-links, and for org-agenda-finalize.
>>
>> Best,
>> Ihor
>>
>>
>>
>>
>> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>>
>> > I tried use debug-on-entry on:
>> >   + org-agenda-list(nil)
>> >     - org-agenda-mode()
>> >       + org-agenda-set-mode-name()
>> >         - org-update-dblock
>> >           + org-dblock-write:clocktable
>> >
>> > But got no lucky, Then I followed your another suggestion, use profiler:
>> >
>> > I got a very big message log, (not suitable for paste in email, so I
>> paste
>> > it on Gist)
>> >
>> > - CPU profiler report: https://www.pastery.net/gststf/
>> > - Memory profiler report: https://www.pastery.net/gststf+qzyxaf/#qzyxaf
>> >
>> > The very deepest call stacks seems the output format is not long
>> enough, so
>> > can't display.
>> >
>> > Your suggestion is very useful, I can see what function is invoked many
>> > times. But still can't understand what's the cause.
>> >
>> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> > Blog: http://stardiviner.github.io/
>> >
>> >
>> > On Sat, Aug 15, 2020 at 2:02 PM Ihor Radchenko <yantar92@gmail.com>
>> wrote:
>> >
>> >> >Here is the backtrace of "toggle-debug-on-quit" when I refresh
>> org-agenda
>> >> >but has long time suspend.
>> >>
>> >> That looks unreadable for me. Also, debug on quit may not show the
>> >> problematic part depending on your luck.
>> >>
>> >> It would be easier to understand your problem if you provided the
>> >> profiler report (M-x profiler-start ... M-x profiler-report).
>> >> Then, you could debug-on-entry using the problematic part according to
>> >> the profiler report.
>> >>
>> >> A blind guess - maybe you are modifying match data somewhere in your
>> >> code. This might cause infinite loop in
>> >>
>> >> > (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>> >>
>> >> Best,
>> >> Ihor
>> >>
>> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>> >>
>> >> > Thanks for replying, Ihor. I will look into this regexp.
>> >> >
>> >> > Here is the backtrace of "toggle-debug-on-quit" when I refresh
>> org-agenda
>> >> > but has long time suspend.
>> >> >
>> >> > ```
>> >> > Debugger entered--Lisp error: (quit)
>> >> >
>> >> >
>> >>
>> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
>> >> > 17651 t)
>> >> >   (while (re-search-forward org-link-any-re limit t) (let* ((start
>> >> > (match-beginning 0)) (end (match-end 0)) (visible-start (or
>> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or
>> (match-end 3)
>> >> > (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle)
>> ((eq 91
>> >> > (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
>> >> > org-highlight-links) (not (string-match-p
>> org-element-paragraph-separate
>> >> > (match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
>> >> > ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
>> >> > (org-element-property :raw-link link-object)) (type
>> (org-element-property
>> >> > :type link-object)) (path (org-element-property :path link-object))
>> >> > (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
>> >> > (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at
>> end)
>> >> (if
>> >> > (not (eq ... style)) (add-text-properties start end properties)
>> >> > (remove-text-properties start end '...) (let (...)
>> (add-text-properties
>> >> > start visible-start hidden) (add-text-properties visible-start
>> >> visible-end
>> >> > properties) (add-text-properties visible-end end hidden)
>> >> > (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at
>> >> visible-end)))
>> >> > (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
>> >> >   (catch :exit (while (re-search-forward org-link-any-re limit t)
>> (let*
>> >> > ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
>> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or
>> (match-end 3)
>> >> > (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...)
>> 'bracket)
>> >> (t
>> >> > 'plain)))) (if (and (memq style org-highlight-links) (not
>> (string-match-p
>> >> > org-element-paragraph-separate (match-string 0))) (not (and (eq style
>> >> ...)
>> >> > (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type
>> ...)
>> >> > (path ...) (properties ...)) (org-remove-flyspell-overlays-in start
>> end)
>> >> > (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start
>> end
>> >> > properties) (remove-text-properties start end ...) (let ... ... ...
>> ...
>> >> ...
>> >> > ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
>> >> >   org-activate-links(17651)
>> >> >   (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>> >> >   (save-excursion (while (org-activate-links (point-max)) (goto-char
>> >> > (match-end 0))))
>> >> >   (save-excursion (goto-char (point-min)) (save-excursion (while
>> >> > (org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
>> >> > org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
>> >> > org-agenda-with-colors nil (remove-text-properties (point-min)
>> >> (point-max)
>> >> > '(face nil))) (if (and (boundp 'org-overriding-columns-format)
>> >> > org-overriding-columns-format) (progn (set (make-local-variable
>> >> > 'org-local-columns-format) org-overriding-columns-format))) (if
>> >> > org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
>> >> > org-agenda-fontify-priorities (progn
>> (org-agenda-fontify-priorities)))
>> >> (if
>> >> > (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
>> >> > (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
>> >> > org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
>> >> > (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
>> >> > (save-excursion (next-single-property-change (point-min)
>> 'org-habit-p)))
>> >> > (progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
>> >> > (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> >> > org-agenda-show-inherited-tags 'always) (and (listp
>> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> >> > org-agenda-show-inherited-tags)) (and (eq
>> org-agenda-show-inherited-tags
>> >> t)
>> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
>> >> > org-agenda-use-tag-inheritance) (not (memq org-agenda-type
>> >> > org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
>> >> > (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
>> >> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
>> >> > ...))))))) (setq org-agenda-represented-tags nil
>> >> > org-agenda-represented-categories nil) (if
>> org-agenda-top-headline-filter
>> >> > (progn (org-agenda-filter-top-headline-apply
>> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> >> > 'org-agenda-tag-filter :preset-filter) (progn
>> (org-agenda-filter-apply
>> >> (get
>> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-category-filter 'category))) (if (get
>> >> > 'org-agenda-category-filter :preset-filter) (progn
>> >> (org-agenda-filter-apply
>> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-regexp-filter 'regexp))) (if (get
>> 'org-agenda-regexp-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-effort-filter 'effort))) (if (get
>> 'org-agenda-effort-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>> >> >   (let ((inhibit-read-only t)) (save-excursion (goto-char
>> (point-min))
>> >> > (save-excursion (while (org-activate-links (point-max)) (goto-char
>> >> > (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
>> >> > (org-agenda-align-tags)) (if org-agenda-with-colors nil
>> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if
>> (and
>> >> > (boundp 'org-overriding-columns-format)
>> org-overriding-columns-format)
>> >> > (progn (set (make-local-variable 'org-local-columns-format)
>> >> > org-overriding-columns-format))) (if
>> org-agenda-view-columns-initially
>> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities
>> (progn
>> >> > (org-agenda-fontify-priorities))) (if (and
>> org-agenda-dim-blocked-tasks
>> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
>> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
>> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
>> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
>> >> > (point-min) 'org-habit-p))) (progn
>> >> (org-habit-insert-consistency-graphs)))
>> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> >> > org-agenda-show-inherited-tags 'always) (and (listp
>> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> >> > org-agenda-show-inherited-tags)) (and (eq
>> org-agenda-show-inherited-tags
>> >> t)
>> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
>> >> > org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
>> >> > (save-excursion (goto-char (point-min)) (while (equal (forward-line)
>> 0)
>> >> (if
>> >> > (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
>> >> > org-agenda-represented-categories nil) (if
>> org-agenda-top-headline-filter
>> >> > (progn (org-agenda-filter-top-headline-apply
>> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> >> > 'org-agenda-tag-filter :preset-filter) (progn
>> (org-agenda-filter-apply
>> >> (get
>> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-category-filter 'category))) (if (get
>> >> > 'org-agenda-category-filter :preset-filter) (progn
>> >> (org-agenda-filter-apply
>> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-regexp-filter 'regexp))) (if (get
>> 'org-agenda-regexp-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-effort-filter 'effort))) (if (get
>> 'org-agenda-effort-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>> (run-hooks
>> >> > 'org-agenda-finalize-hook))
>> >> >   (if org-agenda-multi nil (let ((inhibit-read-only t))
>> (save-excursion
>> >> > (goto-char (point-min)) (save-excursion (while (org-activate-links
>> >> > (point-max)) (goto-char (match-end 0)))) (if (eq
>> org-agenda-remove-tags
>> >> t)
>> >> > nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
>> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if
>> (and
>> >> > (boundp 'org-overriding-columns-format)
>> org-overriding-columns-format)
>> >> > (progn (set (make-local-variable 'org-local-columns-format)
>> >> > org-overriding-columns-format))) (if
>> org-agenda-view-columns-initially
>> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities
>> (progn
>> >> > (org-agenda-fontify-priorities))) (if (and
>> org-agenda-dim-blocked-tasks
>> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
>> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
>> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
>> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
>> >> > (point-min) 'org-habit-p))) (progn
>> >> (org-habit-insert-consistency-graphs)))
>> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> >> > org-agenda-show-inherited-tags 'always) (and (listp
>> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> >> > org-agenda-show-inherited-tags)) (and (eq
>> org-agenda-show-inherited-tags
>> >> t)
>> >> > (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let
>> (mrk)
>> >> > (save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
>> >> > ...))))) (setq org-agenda-represented-tags nil
>> >> > org-agenda-represented-categories nil) (if
>> org-agenda-top-headline-filter
>> >> > (progn (org-agenda-filter-top-headline-apply
>> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> >> > 'org-agenda-tag-filter :preset-filter) (progn
>> (org-agenda-filter-apply
>> >> (get
>> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-category-filter 'category))) (if (get
>> >> > 'org-agenda-category-filter :preset-filter) (progn
>> >> (org-agenda-filter-apply
>> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-regexp-filter 'regexp))) (if (get
>> 'org-agenda-regexp-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-effort-filter 'effort))) (if (get
>> 'org-agenda-effort-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>> (run-hooks
>> >> > 'org-agenda-finalize-hook)))
>> >> >   org-agenda-finalize()
>> >> >   (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
>> >> (today
>> >> > (org-today)) (sd (or start-day today)) (ndays
>> (org-agenda-span-to-ndays
>> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq
>> ndays
>> >> 14))
>> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
>> 'ifmode))
>> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
>> >> ndays
>> >> > 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (-
>> sd (+
>> >> > ... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay
>> (not
>> >> > debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let
>> ((--dotimes-limit--
>> >> (1-
>> >> > ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers
>> (cons (1+
>> >> > (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
>> >> > (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
>> >> > clocktable-end (1+ (or (org-last day-numbers) 0))) (set
>> >> > (make-local-variable 'org-starting-day) (car day-numbers)) (set
>> >> > (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
>> >> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
>> >> > org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2
>> (org-last
>> >> > day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
>> (org-days-to-iso-week
>> >> > d2))) (setq s (point)) (cond ((not org-agenda-overriding-header)
>> (insert
>> >> > (concat ... "-agenda" ... ":\n"))) ((equal
>> org-agenda-overriding-header
>> >> "")
>> >> > nil) ((stringp org-agenda-overriding-header) (insert (propertize
>> >> > org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid
>> >> value
>> >> > for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
>> (if
>> >> (>
>> >> > (point) s) (progn (add-text-properties s (1- (point)) (list 'face
>> >> > 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line
>> >> s))))
>> >> > (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
>> >> > day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s
>> >> (point))
>> >> > (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd)))
>> (setq
>> >> > start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq
>> end-pos
>> >> > (point))))) (setq files thefiles rtnall nil) (while (setq file
>> (car-safe
>> >> > (prog1 files (setq files ...)))) (catch 'nextfile
>> (org-check-agenda-file
>> >> > file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if
>> (member
>> >> > :deadline* org-agenda-entry-types) (progn ...)) (if (member
>> :scheduled*
>> >> > org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...))
>> (if
>> >> > org-agenda-include-deadlines nil (setq org-agenda-entry-types ...))
>> (cond
>> >> > (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall
>> (append
>> >> > rtnall rtn)))) (if org-agenda-include-diary (progn (let
>> >> > ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq
>> rtn
>> >> > (org-get-entries-from-diary date)) (setq rtnall (append rtnall
>> rtn)))))
>> >> (if
>> >> > (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+
>> day-cnt))
>> >> > (insert (if (stringp org-agenda-format-date) (format-time-string
>> >> > org-agenda-format-date ...) (funcall org-agenda-format-date date))
>> "\n")
>> >> > (put-text-property s (1- (point)) 'face (org-agenda-get-day-face
>> date))
>> >> > (put-text-property s (1- (point)) 'org-date-line t)
>> (put-text-property s
>> >> > (1- (point)) 'org-agenda-date-header t) (put-text-property s (1-
>> (point))
>> >> > 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ...
>> t)))
>> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp))
>> (if
>> >> > rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point))
>> 'day
>> >> d)
>> >> > (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
>> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
>> >> > ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
>> >> > org-agenda-clockreport-parameter-plist)) tbl) (setq p
>> (org-plist-delete p
>> >> > :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p
>> >> (plist-put
>> >> > p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq
>> tbl
>> >> > (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
>> >> > (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer))
>> (if
>> >> > (or (not (get-buffer-window org-agenda-buffer-name)) (and
>> >> > (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
>> >> > (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if
>> (not
>> >> > (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or
>> >> start-pos
>> >> > 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
>> >> > (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args
>> >> (list
>> >> > arg start-day span) 'org-redo-cmd org-agenda-redo-command
>> 'org-series-cmd
>> >> > org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
>> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
>> >> > buffer-read-only t) (message ""))
>> >> >   (catch 'exit (setq org-agenda-buffer-name (or
>> >> org-agenda-buffer-tmp-name
>> >> > (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
>> >> > org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
>> >> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week")
>> (setq
>> >> > start-day (or start-day org-agenda-start-day)) (if (stringp
>> start-day)
>> >> > (progn (setq start-day (time-to-days (org-read-date nil t
>> start-day)))))
>> >> > (org-compile-prefix-format 'agenda) (org-set-sorting-strategy
>> 'agenda)
>> >> > (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
>> (today
>> >> > (org-today)) (sd (or start-day today)) (ndays
>> (org-agenda-span-to-ndays
>> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq
>> ndays
>> >> 14))
>> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
>> 'ifmode))
>> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
>> >> ndays
>> >> > 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
>> >> > (day-cnt 0) (inhibit-redisplay (not debug-on-error))
>> >> > (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays))
>> (n
>> >> 0))
>> >> > (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
>> >> > day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse
>> day-numbers))
>> >> > (setq clocktable-start (car day-numbers) clocktable-end (1+ (or
>> (org-last
>> >> > day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
>> >> > day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
>> >> > (make-local-variable 'org-agenda-current-span)
>> (org-agenda-ndays-to-span
>> >> > span)) (if org-agenda-compact-blocks nil (let* ((d1 (car
>> day-numbers))
>> >> (d2
>> >> > (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
>> >> > (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
>> >> > org-agenda-overriding-header) (insert ...)) ((equal
>> >> > org-agenda-overriding-header "") nil) ((stringp
>> >> > org-agenda-overriding-header) (insert ... "\n")) (t (user-error
>> "Invalid
>> >> > value for `org-agenda-overriding-hea..."
>> org-agenda-overriding-header))))
>> >> > (if (> (point) s) (progn (add-text-properties s (1- ...) (list ...
>> ...
>> >> ...
>> >> > t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe
>> (prog1
>> >> > day-numbers (setq day-numbers ...)))) (setq date
>> >> > (calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp
>> (= d
>> >> > today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if
>> (and
>> >> > start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files
>> >> thefiles
>> >> > rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
>> >> > 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if
>> ...
>> >> ...)
>> >> > (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond
>> ...
>> >> ...
>> >> > ...)) (setq rtnall (append rtnall rtn)))) (if
>> org-agenda-include-diary
>> >> > (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...))))
>> (if
>> >> (or
>> >> > rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
>> >> > (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
>> >> > (org-agenda-get-day-face date)) (put-text-property s (1- ...)
>> >> > 'org-date-line t) (put-text-property s (1- ...)
>> 'org-agenda-date-header
>> >> t)
>> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn
>> >> ...))
>> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp))
>> (if
>> >> > rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
>> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
>> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
>> >> > ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p
>> :block))
>> >> > (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p
>> >> :tend
>> >> > clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply
>> ...
>> >> p))
>> >> > (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
>> >> > (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
>> >> > org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
>> >> > (pos-visible-in-window-p (point-max)))) nil (goto-char (1-
>> (point-max)))
>> >> > (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1)))
>> (progn
>> >> > (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or
>> start-pos 1))
>> >> > (add-text-properties (point-min) (point-max) (list 'org-agenda-type
>> >> 'agenda
>> >> > 'org-last-args (list arg start-day span) 'org-redo-cmd
>> >> > org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
>> >> > org-agenda-show-log-scoped 'clockcheck) (progn
>> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
>> >> > buffer-read-only t) (message "")))
>> >> >   org-agenda-list(nil nil day nil)
>> >> >   (let nil (org-agenda-list 'nil nil 'day nil))
>> >> >   eval((let nil (org-agenda-list 'nil nil 'day nil)))
>> >> >   org-let(nil (org-agenda-list 'nil nil 'day nil))
>> >> >   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops
>> redo-cmd))
>> >> >   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa
>> (if
>> >> > (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
>> >> > org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name
>> (or
>> >> > org-agenda-this-buffer-name org-agenda-buffer-name))
>> >> (org-agenda-keep-modes
>> >> > t) (tag-filter org-agenda-tag-filter) (tag-preset (get
>> >> > 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
>> >> > org-agenda-top-headline-filter) (cat-filter
>> org-agenda-category-filter)
>> >> > (cat-preset (get 'org-agenda-category-filter :preset-filter))
>> (re-filter
>> >> > org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
>> >> > :preset-filter)) (effort-filter org-agenda-effort-filter)
>> (effort-preset
>> >> > (get 'org-agenda-effort-filter :preset-filter))
>> >> > (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
>> >> > org-agenda-columns-active) (line (org-current-line)) (window-line (-
>> line
>> >> > (org-current-line (window-start)))) (lprops (get
>> 'org-agenda-redo-command
>> >> > 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd))
>> (last-args
>> >> > (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
>> >> > (get-text-property p 'org-series-cmd))
>> >> (org-agenda-overriding-cmd-arguments
>> >> > (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
>> >> > last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
>> >> > (get-text-property p 'org-series-redo-cmd))) (put
>> 'org-agenda-tag-filter
>> >> > :preset-filter nil) (put 'org-agenda-category-filter :preset-filter
>> nil)
>> >> > (put 'org-agenda-regexp-filter :preset-filter nil) (put
>> >> > 'org-agenda-effort-filter :preset-filter nil) (and cols
>> >> (org-columns-quit))
>> >> > (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
>> >> > series-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
>> >> > org-agenda-category-filter cat-filter org-agenda-regexp-filter
>> re-filter
>> >> > org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
>> >> > top-hl-filter) (message "Rebuilding agenda buffer...done") (put
>> >> > 'org-agenda-tag-filter :preset-filter tag-preset) (put
>> >> > 'org-agenda-category-filter :preset-filter cat-preset) (put
>> >> > 'org-agenda-regexp-filter :preset-filter re-preset) (put
>> >> > 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag
>> (or
>> >> > tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
>> >> > effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag
>> >> (progn
>> >> > (org-agenda-filter-apply tag 'tag t))) (if cat (progn
>> >> > (org-agenda-filter-apply cat 'category))) (if effort (progn
>> >> > (org-agenda-filter-apply effort 'effort))) (if re (progn
>> >> > (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
>> >> > (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
>> >> > (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line
>> line)
>> >> > (recenter window-line))
>> >> >   org-agenda-redo(t)
>> >> >   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
>> >> > --dolist-tail-- (setq buffer (car --dolist-tail--))
>> (save-current-buffer
>> >> > (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
>> >> > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
>> >> > (org-agenda-redo t))
>> >> >   org-agenda-redo-all(nil)
>> >> >   funcall-interactively(org-agenda-redo-all nil)
>> >> >   call-interactively(org-agenda-redo-all nil nil)
>> >> >   command-execute(org-agenda-redo-all)
>> >> > ```
>> >> >
>> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> >> > Blog: http://stardiviner.github.io/
>> >> >
>> >> >
>> >> > On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com>
>> >> wrote:
>> >> >
>> >> >> > I want to get around this problem. So need to know how to detect
>> >> >> currently
>> >> >> > in logbook drawer or something else which used to record clocking
>> >> note,
>> >> >> > `org-add-note`, etc.
>> >> >>
>> >> >> You may try to use `org-logbook-drawer-re'.
>> >> >>
>> >> >> > When I toggle org-log-mode and related options in org-agenda
>> buffer. I
>> >> >> > found my org-link-beautify will caused long time suspend and no
>> stop.
>> >> >> After
>> >> >> > debug, I found org-link-beautify text-property caused this
>> problem.
>> >> >>
>> >> >> Could you provide more details how your text property is causing the
>> >> >> problem in org-agenda? Which function in agenda is slow?
>> >> >>
>> >> >> Best,
>> >> >> Ihor
>> >> >>
>> >> >>
>> >> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>> >> >>
>> >> >> > I have a org-mode extension:
>> >> >> >
>> >> >>
>> >>
>> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
>> >> >> >
>> >> >> > It will beautify links with text-properties.
>> >> >> >
>> >> >> > When I toggle org-log-mode and related options in org-agenda
>> buffer. I
>> >> >> > found my org-link-beautify will caused long time suspend and no
>> stop.
>> >> >> After
>> >> >> > debug, I found org-link-beautify text-property caused this
>> problem.
>> >> >> >
>> >> >> > I want to get around this problem. So need to know how to detect
>> >> >> currently
>> >> >> > in logbook drawer or something else which used to record clocking
>> >> note,
>> >> >> > `org-add-note`, etc.
>> >> >> >
>> >> >> > Or maybe org-agenda upstream can do something to work around this
>> >> >> > text-properties issue?
>> >> >> >
>> >> >> > [stardiviner]           <Hack this world!>      GPG key ID:
>> 47C32433
>> >> >> > IRC(freeenode): stardiviner                     Twitter:
>> @numbchild
>> >> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3
>> 2433
>> >> >> > Blog: http://stardiviner.github.io/
>> >> >>
>> >>
>>
>

[-- Attachment #2: Type: text/html, Size: 44270 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-17  0:38           ` numbchild
  2020-08-17  0:46             ` numbchild
@ 2020-08-17  1:49             ` Ihor Radchenko
  2020-08-17  3:13               ` numbchild
  1 sibling, 1 reply; 13+ messages in thread
From: Ihor Radchenko @ 2020-08-17  1:49 UTC (permalink / raw)
  To: numbchild@gmail.com; +Cc: Org-mode

> I reviewed my org-link-beautify (
> https://github.com/stardiviner/org-link-beautify) source code, I have not
> use any regexp matching. I guess the function
> `org-link-beautify--get-element` invoked `(org-element-context)` caused
> this problem or other similar places. But I use `debug-on-entry` on
> `org-element-context`. Still have not got stoppoint backtrace.

Judging from source code of `org-element-context`, it does modify match
data. You can probably send a bug (or patch) fixing this. All is needed
is to wrap the code into `save-match-data`.

For you package, you can simply wrap all the code in `org-link-beautify`
into (save-match-data ... ).

> And another step `debug-on-entry` on `org-link-beautify`,
> `org-agenda-finalize`, `org-activate-links`. I have not got a stoppoint
> backtrace on any of upper functions when org-agenda initializes. This is
> weird, because I tested to use `debug-on-entry` on `org-agenda`. It can
> popup a stoppoint backtrace.

Strange. I had no problem with debugging `org-agenda-finalize` on my
system.

Best,
Ihor


"numbchild@gmail.com" <numbchild@gmail.com> writes:

> Ihor, thanks for your detailed help.
> I followed your steps, the `elp` step, I confirmed `org-link-beautify` is
> invoked and fall into an infinite loop.
>
> ```
> org-link-beautify  11265       58.586412984  0.0052007468
> ```
>
> And another step `debug-on-entry` on `org-link-beautify`,
> `org-agenda-finalize`, `org-activate-links`. I have not got a stoppoint
> backtrace on any of upper functions when org-agenda initializes. This is
> weird, because I tested to use `debug-on-entry` on `org-agenda`. It can
> popup a stoppoint backtrace.
>
> I reviewed my org-link-beautify (
> https://github.com/stardiviner/org-link-beautify) source code, I have not
> use any regexp matching. I guess the function
> `org-link-beautify--get-element` invoked `(org-element-context)` caused
> this problem or other similar places. But I use `debug-on-entry` on
> `org-element-context`. Still have not got stoppoint backtrace.
>
> Need your more help. Sorry for disturbing you....
>
> [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> IRC(freeenode): stardiviner                     Twitter:  @numbchild
> Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> Blog: http://stardiviner.github.io/
>
>
> On Sun, Aug 16, 2020 at 2:39 PM Ihor Radchenko <yantar92@gmail.com> wrote:
>
>> > Your suggestion is very useful, I can see what function is invoked many
>> > times. But still can't understand what's the cause.
>>
>> Looking at your CPU profiler report I can see that the slow part is
>> happening while running org-agenda-finalize when agenda buffer is
>> already populated. Most of time is taken by calling your function. I
>> suspect that it is simply called many times (maybe infinite loop?).
>>
>> You may check the number of times your function is called using
>>
>> (require 'elp)
>> (elp-instrument-function #'org-link-beautify)
>> ;; run agenda
>> ;; M-x elp-results
>>
>> Another suggestion would be invoking debug-on-entry for you function,
>> for org-activate-links, and for org-agenda-finalize.
>>
>> Best,
>> Ihor
>>
>>
>>
>>
>> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>>
>> > I tried use debug-on-entry on:
>> >   + org-agenda-list(nil)
>> >     - org-agenda-mode()
>> >       + org-agenda-set-mode-name()
>> >         - org-update-dblock
>> >           + org-dblock-write:clocktable
>> >
>> > But got no lucky, Then I followed your another suggestion, use profiler:
>> >
>> > I got a very big message log, (not suitable for paste in email, so I
>> paste
>> > it on Gist)
>> >
>> > - CPU profiler report: https://www.pastery.net/gststf/
>> > - Memory profiler report: https://www.pastery.net/gststf+qzyxaf/#qzyxaf
>> >
>> > The very deepest call stacks seems the output format is not long enough,
>> so
>> > can't display.
>> >
>> > Your suggestion is very useful, I can see what function is invoked many
>> > times. But still can't understand what's the cause.
>> >
>> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> > Blog: http://stardiviner.github.io/
>> >
>> >
>> > On Sat, Aug 15, 2020 at 2:02 PM Ihor Radchenko <yantar92@gmail.com>
>> wrote:
>> >
>> >> >Here is the backtrace of "toggle-debug-on-quit" when I refresh
>> org-agenda
>> >> >but has long time suspend.
>> >>
>> >> That looks unreadable for me. Also, debug on quit may not show the
>> >> problematic part depending on your luck.
>> >>
>> >> It would be easier to understand your problem if you provided the
>> >> profiler report (M-x profiler-start ... M-x profiler-report).
>> >> Then, you could debug-on-entry using the problematic part according to
>> >> the profiler report.
>> >>
>> >> A blind guess - maybe you are modifying match data somewhere in your
>> >> code. This might cause infinite loop in
>> >>
>> >> > (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>> >>
>> >> Best,
>> >> Ihor
>> >>
>> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>> >>
>> >> > Thanks for replying, Ihor. I will look into this regexp.
>> >> >
>> >> > Here is the backtrace of "toggle-debug-on-quit" when I refresh
>> org-agenda
>> >> > but has long time suspend.
>> >> >
>> >> > ```
>> >> > Debugger entered--Lisp error: (quit)
>> >> >
>> >> >
>> >>
>> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
>> >> > 17651 t)
>> >> >   (while (re-search-forward org-link-any-re limit t) (let* ((start
>> >> > (match-beginning 0)) (end (match-end 0)) (visible-start (or
>> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end
>> 3)
>> >> > (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle) ((eq
>> 91
>> >> > (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
>> >> > org-highlight-links) (not (string-match-p
>> org-element-paragraph-separate
>> >> > (match-string 0))) (not (and (eq style 'plain) (let (...) (if ... ...
>> >> > ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
>> >> > (org-element-property :raw-link link-object)) (type
>> (org-element-property
>> >> > :type link-object)) (path (org-element-property :path link-object))
>> >> > (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
>> >> > (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at
>> end)
>> >> (if
>> >> > (not (eq ... style)) (add-text-properties start end properties)
>> >> > (remove-text-properties start end '...) (let (...)
>> (add-text-properties
>> >> > start visible-start hidden) (add-text-properties visible-start
>> >> visible-end
>> >> > properties) (add-text-properties visible-end end hidden)
>> >> > (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at
>> >> visible-end)))
>> >> > (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
>> >> >   (catch :exit (while (re-search-forward org-link-any-re limit t)
>> (let*
>> >> > ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
>> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or (match-end
>> 3)
>> >> > (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...)
>> 'bracket)
>> >> (t
>> >> > 'plain)))) (if (and (memq style org-highlight-links) (not
>> (string-match-p
>> >> > org-element-paragraph-separate (match-string 0))) (not (and (eq style
>> >> ...)
>> >> > (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type ...)
>> >> > (path ...) (properties ...)) (org-remove-flyspell-overlays-in start
>> end)
>> >> > (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start
>> end
>> >> > properties) (remove-text-properties start end ...) (let ... ... ...
>> ...
>> >> ...
>> >> > ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
>> >> >   org-activate-links(17651)
>> >> >   (while (org-activate-links (point-max)) (goto-char (match-end 0)))
>> >> >   (save-excursion (while (org-activate-links (point-max)) (goto-char
>> >> > (match-end 0))))
>> >> >   (save-excursion (goto-char (point-min)) (save-excursion (while
>> >> > (org-activate-links (point-max)) (goto-char (match-end 0)))) (if (eq
>> >> > org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
>> >> > org-agenda-with-colors nil (remove-text-properties (point-min)
>> >> (point-max)
>> >> > '(face nil))) (if (and (boundp 'org-overriding-columns-format)
>> >> > org-overriding-columns-format) (progn (set (make-local-variable
>> >> > 'org-local-columns-format) org-overriding-columns-format))) (if
>> >> > org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
>> >> > org-agenda-fontify-priorities (progn (org-agenda-fontify-priorities)))
>> >> (if
>> >> > (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
>> >> > (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task) (if
>> >> > org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
>> >> > (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
>> >> > (save-excursion (next-single-property-change (point-min)
>> 'org-habit-p)))
>> >> > (progn (org-habit-insert-consistency-graphs))) (setq org-agenda-type
>> >> > (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> >> > org-agenda-show-inherited-tags 'always) (and (listp
>> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> >> > org-agenda-show-inherited-tags)) (and (eq
>> org-agenda-show-inherited-tags
>> >> t)
>> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
>> >> > org-agenda-use-tag-inheritance) (not (memq org-agenda-type
>> >> > org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
>> >> > (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq mrk
>> >> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
>> >> > ...))))))) (setq org-agenda-represented-tags nil
>> >> > org-agenda-represented-categories nil) (if
>> org-agenda-top-headline-filter
>> >> > (progn (org-agenda-filter-top-headline-apply
>> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> >> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
>> >> (get
>> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-category-filter 'category))) (if (get
>> >> > 'org-agenda-category-filter :preset-filter) (progn
>> >> (org-agenda-filter-apply
>> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>> >> >   (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min))
>> >> > (save-excursion (while (org-activate-links (point-max)) (goto-char
>> >> > (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
>> >> > (org-agenda-align-tags)) (if org-agenda-with-colors nil
>> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
>> >> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
>> >> > (progn (set (make-local-variable 'org-local-columns-format)
>> >> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
>> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
>> >> > (org-agenda-fontify-priorities))) (if (and
>> org-agenda-dim-blocked-tasks
>> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
>> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
>> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
>> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
>> >> > (point-min) 'org-habit-p))) (progn
>> >> (org-habit-insert-consistency-graphs)))
>> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> >> > org-agenda-show-inherited-tags 'always) (and (listp
>> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> >> > org-agenda-show-inherited-tags)) (and (eq
>> org-agenda-show-inherited-tags
>> >> t)
>> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
>> >> > org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
>> >> > (save-excursion (goto-char (point-min)) (while (equal (forward-line)
>> 0)
>> >> (if
>> >> > (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags nil
>> >> > org-agenda-represented-categories nil) (if
>> org-agenda-top-headline-filter
>> >> > (progn (org-agenda-filter-top-headline-apply
>> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> >> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
>> >> (get
>> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-category-filter 'category))) (if (get
>> >> > 'org-agenda-category-filter :preset-filter) (progn
>> >> (org-agenda-filter-apply
>> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>> (run-hooks
>> >> > 'org-agenda-finalize-hook))
>> >> >   (if org-agenda-multi nil (let ((inhibit-read-only t))
>> (save-excursion
>> >> > (goto-char (point-min)) (save-excursion (while (org-activate-links
>> >> > (point-max)) (goto-char (match-end 0)))) (if (eq
>> org-agenda-remove-tags
>> >> t)
>> >> > nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
>> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if (and
>> >> > (boundp 'org-overriding-columns-format) org-overriding-columns-format)
>> >> > (progn (set (make-local-variable 'org-local-columns-format)
>> >> > org-overriding-columns-format))) (if org-agenda-view-columns-initially
>> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities (progn
>> >> > (org-agenda-fontify-priorities))) (if (and
>> org-agenda-dim-blocked-tasks
>> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
>> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn
>> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if (and
>> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
>> >> > (point-min) 'org-habit-p))) (progn
>> >> (org-habit-insert-consistency-graphs)))
>> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or (eq
>> >> > org-agenda-show-inherited-tags 'always) (and (listp
>> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
>> >> > org-agenda-show-inherited-tags)) (and (eq
>> org-agenda-show-inherited-tags
>> >> t)
>> >> > (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let
>> (mrk)
>> >> > (save-excursion (goto-char (point-min)) (while (equal ... 0) (if ...
>> >> > ...))))) (setq org-agenda-represented-tags nil
>> >> > org-agenda-represented-categories nil) (if
>> org-agenda-top-headline-filter
>> >> > (progn (org-agenda-filter-top-headline-apply
>> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
>> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
>> >> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-apply
>> >> (get
>> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
>> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-category-filter 'category))) (if (get
>> >> > 'org-agenda-category-filter :preset-filter) (progn
>> >> (org-agenda-filter-apply
>> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
>> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-regexp-filter 'regexp))) (if (get 'org-agenda-regexp-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
>> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
>> >> > org-agenda-effort-filter 'effort))) (if (get 'org-agenda-effort-filter
>> >> > :preset-filter) (progn (org-agenda-filter-apply (get
>> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
>> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
>> (run-hooks
>> >> > 'org-agenda-finalize-hook)))
>> >> >   org-agenda-finalize()
>> >> >   (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
>> >> (today
>> >> > (org-today)) (sd (or start-day today)) (ndays
>> (org-agenda-span-to-ndays
>> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
>> >> 14))
>> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
>> 'ifmode))
>> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
>> >> ndays
>> >> > 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (-
>> sd (+
>> >> > ... d))))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay
>> (not
>> >> > debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit--
>> >> (1-
>> >> > ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (cons
>> (1+
>> >> > (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq day-numbers
>> >> > (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
>> >> > clocktable-end (1+ (or (org-last day-numbers) 0))) (set
>> >> > (make-local-variable 'org-starting-day) (car day-numbers)) (set
>> >> > (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
>> >> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
>> >> > org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2
>> (org-last
>> >> > day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week
>> >> > d2))) (setq s (point)) (cond ((not org-agenda-overriding-header)
>> (insert
>> >> > (concat ... "-agenda" ... ":\n"))) ((equal
>> org-agenda-overriding-header
>> >> "")
>> >> > nil) ((stringp org-agenda-overriding-header) (insert (propertize
>> >> > org-agenda-overriding-header ... ...) "\n")) (t (user-error "Invalid
>> >> value
>> >> > for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
>> (if
>> >> (>
>> >> > (point) s) (progn (add-text-properties s (1- (point)) (list 'face
>> >> > 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-header-line
>> >> s))))
>> >> > (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
>> >> > day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s
>> >> (point))
>> >> > (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd)))
>> (setq
>> >> > start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq
>> end-pos
>> >> > (point))))) (setq files thefiles rtnall nil) (while (setq file
>> (car-safe
>> >> > (prog1 files (setq files ...)))) (catch 'nextfile
>> (org-check-agenda-file
>> >> > file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if
>> (member
>> >> > :deadline* org-agenda-entry-types) (progn ...)) (if (member
>> :scheduled*
>> >> > org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...))
>> (if
>> >> > org-agenda-include-deadlines nil (setq org-agenda-entry-types ...))
>> (cond
>> >> > (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall
>> (append
>> >> > rtnall rtn)))) (if org-agenda-include-diary (progn (let
>> >> > ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq
>> rtn
>> >> > (org-get-entries-from-diary date)) (setq rtnall (append rtnall
>> rtn)))))
>> >> (if
>> >> > (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+
>> day-cnt))
>> >> > (insert (if (stringp org-agenda-format-date) (format-time-string
>> >> > org-agenda-format-date ...) (funcall org-agenda-format-date date))
>> "\n")
>> >> > (put-text-property s (1- (point)) 'face (org-agenda-get-day-face
>> date))
>> >> > (put-text-property s (1- (point)) 'org-date-line t)
>> (put-text-property s
>> >> > (1- (point)) 'org-agenda-date-header t) (put-text-property s (1-
>> (point))
>> >> > 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ... ...
>> t)))
>> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
>> >> > rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point))
>> 'day
>> >> d)
>> >> > (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
>> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
>> >> > ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
>> >> > org-agenda-clockreport-parameter-plist)) tbl) (setq p
>> (org-plist-delete p
>> >> > :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p
>> >> (plist-put
>> >> > p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (setq
>> tbl
>> >> > (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
>> >> > (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer))
>> (if
>> >> > (or (not (get-buffer-window org-agenda-buffer-name)) (and
>> >> > (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
>> >> > (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not
>> >> > (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or
>> >> start-pos
>> >> > 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties
>> >> > (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args
>> >> (list
>> >> > arg start-day span) 'org-redo-cmd org-agenda-redo-command
>> 'org-series-cmd
>> >> > org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
>> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
>> >> > buffer-read-only t) (message ""))
>> >> >   (catch 'exit (setq org-agenda-buffer-name (or
>> >> org-agenda-buffer-tmp-name
>> >> > (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
>> >> > org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
>> >> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq
>> >> > start-day (or start-day org-agenda-start-day)) (if (stringp start-day)
>> >> > (progn (setq start-day (time-to-days (org-read-date nil t
>> start-day)))))
>> >> > (org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda)
>> >> > (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
>> (today
>> >> > (org-today)) (sd (or start-day today)) (ndays
>> (org-agenda-span-to-ndays
>> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays
>> >> 14))
>> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
>> 'ifmode))
>> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (<
>> >> ndays
>> >> > 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
>> >> > (day-cnt 0) (inhibit-redisplay (not debug-on-error))
>> >> > (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1- ndays)) (n
>> >> 0))
>> >> > (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
>> >> > day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse
>> day-numbers))
>> >> > (setq clocktable-start (car day-numbers) clocktable-end (1+ (or
>> (org-last
>> >> > day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
>> >> > day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
>> >> > (make-local-variable 'org-agenda-current-span)
>> (org-agenda-ndays-to-span
>> >> > span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers))
>> >> (d2
>> >> > (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
>> >> > (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
>> >> > org-agenda-overriding-header) (insert ...)) ((equal
>> >> > org-agenda-overriding-header "") nil) ((stringp
>> >> > org-agenda-overriding-header) (insert ... "\n")) (t (user-error
>> "Invalid
>> >> > value for `org-agenda-overriding-hea..."
>> org-agenda-overriding-header))))
>> >> > (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ...
>> >> ...
>> >> > t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1
>> >> > day-numbers (setq day-numbers ...)))) (setq date
>> >> > (calendar-gregorian-from-absolute d) s (point)) (if (or (setq todayp
>> (= d
>> >> > today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if
>> (and
>> >> > start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files
>> >> thefiles
>> >> > rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
>> >> > 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ...
>> >> ...)
>> >> > (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ...
>> >> ...
>> >> > ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary
>> >> > (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...))))
>> (if
>> >> (or
>> >> > rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt))
>> >> > (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
>> >> > (org-agenda-get-day-face date)) (put-text-property s (1- ...)
>> >> > 'org-date-line t) (put-text-property s (1- ...)
>> 'org-agenda-date-header
>> >> t)
>> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn
>> >> ...))
>> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if
>> >> > rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
>> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
>> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
>> >> > ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p
>> :block))
>> >> > (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p
>> >> :tend
>> >> > clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply
>> ...
>> >> p))
>> >> > (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
>> >> > (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
>> >> > org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
>> >> > (pos-visible-in-window-p (point-max)))) nil (goto-char (1-
>> (point-max)))
>> >> > (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1)))
>> (progn
>> >> > (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos
>> 1))
>> >> > (add-text-properties (point-min) (point-max) (list 'org-agenda-type
>> >> 'agenda
>> >> > 'org-last-args (list arg start-day span) 'org-redo-cmd
>> >> > org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
>> >> > org-agenda-show-log-scoped 'clockcheck) (progn
>> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
>> >> > buffer-read-only t) (message "")))
>> >> >   org-agenda-list(nil nil day nil)
>> >> >   (let nil (org-agenda-list 'nil nil 'day nil))
>> >> >   eval((let nil (org-agenda-list 'nil nil 'day nil)))
>> >> >   org-let(nil (org-agenda-list 'nil nil 'day nil))
>> >> >   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops
>> redo-cmd))
>> >> >   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point))) (cpa
>> (if
>> >> > (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
>> >> > org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name (or
>> >> > org-agenda-this-buffer-name org-agenda-buffer-name))
>> >> (org-agenda-keep-modes
>> >> > t) (tag-filter org-agenda-tag-filter) (tag-preset (get
>> >> > 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
>> >> > org-agenda-top-headline-filter) (cat-filter
>> org-agenda-category-filter)
>> >> > (cat-preset (get 'org-agenda-category-filter :preset-filter))
>> (re-filter
>> >> > org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
>> >> > :preset-filter)) (effort-filter org-agenda-effort-filter)
>> (effort-preset
>> >> > (get 'org-agenda-effort-filter :preset-filter))
>> >> > (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
>> >> > org-agenda-columns-active) (line (org-current-line)) (window-line (-
>> line
>> >> > (org-current-line (window-start)))) (lprops (get
>> 'org-agenda-redo-command
>> >> > 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd))
>> (last-args
>> >> > (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
>> >> > (get-text-property p 'org-series-cmd))
>> >> (org-agenda-overriding-cmd-arguments
>> >> > (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
>> >> > last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
>> >> > (get-text-property p 'org-series-redo-cmd))) (put
>> 'org-agenda-tag-filter
>> >> > :preset-filter nil) (put 'org-agenda-category-filter :preset-filter
>> nil)
>> >> > (put 'org-agenda-regexp-filter :preset-filter nil) (put
>> >> > 'org-agenda-effort-filter :preset-filter nil) (and cols
>> >> (org-columns-quit))
>> >> > (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
>> >> > series-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
>> >> > org-agenda-category-filter cat-filter org-agenda-regexp-filter
>> re-filter
>> >> > org-agenda-effort-filter effort-filter org-agenda-top-headline-filter
>> >> > top-hl-filter) (message "Rebuilding agenda buffer...done") (put
>> >> > 'org-agenda-tag-filter :preset-filter tag-preset) (put
>> >> > 'org-agenda-category-filter :preset-filter cat-preset) (put
>> >> > 'org-agenda-regexp-filter :preset-filter re-preset) (put
>> >> > 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag (or
>> >> > tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort (or
>> >> > effort-filter effort-preset)) (re (or re-filter re-preset))) (if tag
>> >> (progn
>> >> > (org-agenda-filter-apply tag 'tag t))) (if cat (progn
>> >> > (org-agenda-filter-apply cat 'category))) (if effort (progn
>> >> > (org-agenda-filter-apply effort 'effort))) (if re (progn
>> >> > (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
>> >> > (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
>> >> > (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line
>> line)
>> >> > (recenter window-line))
>> >> >   org-agenda-redo(t)
>> >> >   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer) (while
>> >> > --dolist-tail-- (setq buffer (car --dolist-tail--))
>> (save-current-buffer
>> >> > (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
>> >> > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
>> >> > (org-agenda-redo t))
>> >> >   org-agenda-redo-all(nil)
>> >> >   funcall-interactively(org-agenda-redo-all nil)
>> >> >   call-interactively(org-agenda-redo-all nil nil)
>> >> >   command-execute(org-agenda-redo-all)
>> >> > ```
>> >> >
>> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
>> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
>> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
>> >> > Blog: http://stardiviner.github.io/
>> >> >
>> >> >
>> >> > On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com>
>> >> wrote:
>> >> >
>> >> >> > I want to get around this problem. So need to know how to detect
>> >> >> currently
>> >> >> > in logbook drawer or something else which used to record clocking
>> >> note,
>> >> >> > `org-add-note`, etc.
>> >> >>
>> >> >> You may try to use `org-logbook-drawer-re'.
>> >> >>
>> >> >> > When I toggle org-log-mode and related options in org-agenda
>> buffer. I
>> >> >> > found my org-link-beautify will caused long time suspend and no
>> stop.
>> >> >> After
>> >> >> > debug, I found org-link-beautify text-property caused this problem.
>> >> >>
>> >> >> Could you provide more details how your text property is causing the
>> >> >> problem in org-agenda? Which function in agenda is slow?
>> >> >>
>> >> >> Best,
>> >> >> Ihor
>> >> >>
>> >> >>
>> >> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>> >> >>
>> >> >> > I have a org-mode extension:
>> >> >> >
>> >> >>
>> >>
>> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
>> >> >> >
>> >> >> > It will beautify links with text-properties.
>> >> >> >
>> >> >> > When I toggle org-log-mode and related options in org-agenda
>> buffer. I
>> >> >> > found my org-link-beautify will caused long time suspend and no
>> stop.
>> >> >> After
>> >> >> > debug, I found org-link-beautify text-property caused this problem.
>> >> >> >
>> >> >> > I want to get around this problem. So need to know how to detect
>> >> >> currently
>> >> >> > in logbook drawer or something else which used to record clocking
>> >> note,
>> >> >> > `org-add-note`, etc.
>> >> >> >
>> >> >> > Or maybe org-agenda upstream can do something to work around this
>> >> >> > text-properties issue?
>> >> >> >
>> >> >> > [stardiviner]           <Hack this world!>      GPG key ID:
>> 47C32433
>> >> >> > IRC(freeenode): stardiviner                     Twitter:
>> @numbchild
>> >> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3
>> 2433
>> >> >> > Blog: http://stardiviner.github.io/
>> >> >>
>> >>
>>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: How to detect current in logbook drawer?
  2020-08-17  1:49             ` Ihor Radchenko
@ 2020-08-17  3:13               ` numbchild
  0 siblings, 0 replies; 13+ messages in thread
From: numbchild @ 2020-08-17  3:13 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Org-mode

[-- Attachment #1: Type: text/plain, Size: 36855 bytes --]

Now I added `save-match-data` in my org-link-beautify. Thanks for tips.

Indeed. I will try this problem later and update here if got any news.

At last, thanks for your helping. Really thanks. :)

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/


On Mon, Aug 17, 2020 at 9:50 AM Ihor Radchenko <yantar92@gmail.com> wrote:

> > I reviewed my org-link-beautify (
> > https://github.com/stardiviner/org-link-beautify) source code, I have
> not
> > use any regexp matching. I guess the function
> > `org-link-beautify--get-element` invoked `(org-element-context)` caused
> > this problem or other similar places. But I use `debug-on-entry` on
> > `org-element-context`. Still have not got stoppoint backtrace.
>
> Judging from source code of `org-element-context`, it does modify match
> data. You can probably send a bug (or patch) fixing this. All is needed
> is to wrap the code into `save-match-data`.
>
> For you package, you can simply wrap all the code in `org-link-beautify`
> into (save-match-data ... ).
>
> > And another step `debug-on-entry` on `org-link-beautify`,
> > `org-agenda-finalize`, `org-activate-links`. I have not got a stoppoint
> > backtrace on any of upper functions when org-agenda initializes. This is
> > weird, because I tested to use `debug-on-entry` on `org-agenda`. It can
> > popup a stoppoint backtrace.
>
> Strange. I had no problem with debugging `org-agenda-finalize` on my
> system.
>
> Best,
> Ihor
>
>
> "numbchild@gmail.com" <numbchild@gmail.com> writes:
>
> > Ihor, thanks for your detailed help.
> > I followed your steps, the `elp` step, I confirmed `org-link-beautify` is
> > invoked and fall into an infinite loop.
> >
> > ```
> > org-link-beautify  11265       58.586412984  0.0052007468
> > ```
> >
> > And another step `debug-on-entry` on `org-link-beautify`,
> > `org-agenda-finalize`, `org-activate-links`. I have not got a stoppoint
> > backtrace on any of upper functions when org-agenda initializes. This is
> > weird, because I tested to use `debug-on-entry` on `org-agenda`. It can
> > popup a stoppoint backtrace.
> >
> > I reviewed my org-link-beautify (
> > https://github.com/stardiviner/org-link-beautify) source code, I have
> not
> > use any regexp matching. I guess the function
> > `org-link-beautify--get-element` invoked `(org-element-context)` caused
> > this problem or other similar places. But I use `debug-on-entry` on
> > `org-element-context`. Still have not got stoppoint backtrace.
> >
> > Need your more help. Sorry for disturbing you....
> >
> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
> >
> >
> > On Sun, Aug 16, 2020 at 2:39 PM Ihor Radchenko <yantar92@gmail.com>
> wrote:
> >
> >> > Your suggestion is very useful, I can see what function is invoked
> many
> >> > times. But still can't understand what's the cause.
> >>
> >> Looking at your CPU profiler report I can see that the slow part is
> >> happening while running org-agenda-finalize when agenda buffer is
> >> already populated. Most of time is taken by calling your function. I
> >> suspect that it is simply called many times (maybe infinite loop?).
> >>
> >> You may check the number of times your function is called using
> >>
> >> (require 'elp)
> >> (elp-instrument-function #'org-link-beautify)
> >> ;; run agenda
> >> ;; M-x elp-results
> >>
> >> Another suggestion would be invoking debug-on-entry for you function,
> >> for org-activate-links, and for org-agenda-finalize.
> >>
> >> Best,
> >> Ihor
> >>
> >>
> >>
> >>
> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
> >>
> >> > I tried use debug-on-entry on:
> >> >   + org-agenda-list(nil)
> >> >     - org-agenda-mode()
> >> >       + org-agenda-set-mode-name()
> >> >         - org-update-dblock
> >> >           + org-dblock-write:clocktable
> >> >
> >> > But got no lucky, Then I followed your another suggestion, use
> profiler:
> >> >
> >> > I got a very big message log, (not suitable for paste in email, so I
> >> paste
> >> > it on Gist)
> >> >
> >> > - CPU profiler report: https://www.pastery.net/gststf/
> >> > - Memory profiler report:
> https://www.pastery.net/gststf+qzyxaf/#qzyxaf
> >> >
> >> > The very deepest call stacks seems the output format is not long
> enough,
> >> so
> >> > can't display.
> >> >
> >> > Your suggestion is very useful, I can see what function is invoked
> many
> >> > times. But still can't understand what's the cause.
> >> >
> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> >> > Blog: http://stardiviner.github.io/
> >> >
> >> >
> >> > On Sat, Aug 15, 2020 at 2:02 PM Ihor Radchenko <yantar92@gmail.com>
> >> wrote:
> >> >
> >> >> >Here is the backtrace of "toggle-debug-on-quit" when I refresh
> >> org-agenda
> >> >> >but has long time suspend.
> >> >>
> >> >> That looks unreadable for me. Also, debug on quit may not show the
> >> >> problematic part depending on your luck.
> >> >>
> >> >> It would be easier to understand your problem if you provided the
> >> >> profiler report (M-x profiler-start ... M-x profiler-report).
> >> >> Then, you could debug-on-entry using the problematic part according
> to
> >> >> the profiler report.
> >> >>
> >> >> A blind guess - maybe you are modifying match data somewhere in your
> >> >> code. This might cause infinite loop in
> >> >>
> >> >> > (while (org-activate-links (point-max)) (goto-char (match-end 0)))
> >> >>
> >> >> Best,
> >> >> Ihor
> >> >>
> >> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
> >> >>
> >> >> > Thanks for replying, Ihor. I will look into this regexp.
> >> >> >
> >> >> > Here is the backtrace of "toggle-debug-on-quit" when I refresh
> >> org-agenda
> >> >> > but has long time suspend.
> >> >> >
> >> >> > ```
> >> >> > Debugger entered--Lisp error: (quit)
> >> >> >
> >> >> >
> >> >>
> >>
> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\)*[][]\\|\\\\+[^][]\\)+..."
> >> >> > 17651 t)
> >> >> >   (while (re-search-forward org-link-any-re limit t) (let* ((start
> >> >> > (match-beginning 0)) (end (match-end 0)) (visible-start (or
> >> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or
> (match-end
> >> 3)
> >> >> > (match-end 2))) (style (cond ((eq 60 (char-after start)) 'angle)
> ((eq
> >> 91
> >> >> > (char-after ...)) 'bracket) (t 'plain)))) (if (and (memq style
> >> >> > org-highlight-links) (not (string-match-p
> >> org-element-paragraph-separate
> >> >> > (match-string 0))) (not (and (eq style 'plain) (let (...) (if ...
> ...
> >> >> > ...))))) (progn (let* ((link-object (save-excursion ... ...)) (link
> >> >> > (org-element-property :raw-link link-object)) (type
> >> (org-element-property
> >> >> > :type link-object)) (path (org-element-property :path link-object))
> >> >> > (properties (list ... ... ... ... ... ... ... ... ... ... ... t)))
> >> >> > (org-remove-flyspell-overlays-in start end) (org-rear-nonsticky-at
> >> end)
> >> >> (if
> >> >> > (not (eq ... style)) (add-text-properties start end properties)
> >> >> > (remove-text-properties start end '...) (let (...)
> >> (add-text-properties
> >> >> > start visible-start hidden) (add-text-properties visible-start
> >> >> visible-end
> >> >> > properties) (add-text-properties visible-end end hidden)
> >> >> > (org-rear-nonsticky-at visible-start) (org-rear-nonsticky-at
> >> >> visible-end)))
> >> >> > (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t))))))
> >> >> >   (catch :exit (while (re-search-forward org-link-any-re limit t)
> >> (let*
> >> >> > ((start (match-beginning 0)) (end (match-end 0)) (visible-start (or
> >> >> > (match-beginning 3) (match-beginning 2))) (visible-end (or
> (match-end
> >> 3)
> >> >> > (match-end 2))) (style (cond ((eq 60 ...) 'angle) ((eq 91 ...)
> >> 'bracket)
> >> >> (t
> >> >> > 'plain)))) (if (and (memq style org-highlight-links) (not
> >> (string-match-p
> >> >> > org-element-paragraph-separate (match-string 0))) (not (and (eq
> style
> >> >> ...)
> >> >> > (let ... ...)))) (progn (let* ((link-object ...) (link ...) (type
> ...)
> >> >> > (path ...) (properties ...)) (org-remove-flyspell-overlays-in start
> >> end)
> >> >> > (org-rear-nonsticky-at end) (if (not ...) (add-text-properties
> start
> >> end
> >> >> > properties) (remove-text-properties start end ...) (let ... ... ...
> >> ...
> >> >> ...
> >> >> > ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
> >> >> >   org-activate-links(17651)
> >> >> >   (while (org-activate-links (point-max)) (goto-char (match-end
> 0)))
> >> >> >   (save-excursion (while (org-activate-links (point-max))
> (goto-char
> >> >> > (match-end 0))))
> >> >> >   (save-excursion (goto-char (point-min)) (save-excursion (while
> >> >> > (org-activate-links (point-max)) (goto-char (match-end 0)))) (if
> (eq
> >> >> > org-agenda-remove-tags t) nil (org-agenda-align-tags)) (if
> >> >> > org-agenda-with-colors nil (remove-text-properties (point-min)
> >> >> (point-max)
> >> >> > '(face nil))) (if (and (boundp 'org-overriding-columns-format)
> >> >> > org-overriding-columns-format) (progn (set (make-local-variable
> >> >> > 'org-local-columns-format) org-overriding-columns-format))) (if
> >> >> > org-agenda-view-columns-initially (progn (org-agenda-columns))) (if
> >> >> > org-agenda-fontify-priorities (progn
> (org-agenda-fontify-priorities)))
> >> >> (if
> >> >> > (and org-agenda-dim-blocked-tasks org-blocker-hook) (progn
> >> >> > (org-agenda-dim-blocked-tasks))) (org-agenda-mark-clocking-task)
> (if
> >> >> > org-agenda-entry-text-mode (progn (org-agenda-entry-text-hide)
> >> >> > (org-agenda-entry-text-show))) (if (and (featurep 'org-habit)
> >> >> > (save-excursion (next-single-property-change (point-min)
> >> 'org-habit-p)))
> >> >> > (progn (org-habit-insert-consistency-graphs))) (setq
> org-agenda-type
> >> >> > (org-get-at-bol 'org-agenda-type)) (if (or (eq
> >> >> > org-agenda-show-inherited-tags 'always) (and (listp
> >> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
> >> >> > org-agenda-show-inherited-tags)) (and (eq
> >> org-agenda-show-inherited-tags
> >> >> t)
> >> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> >> >> > org-agenda-use-tag-inheritance) (not (memq org-agenda-type
> >> >> > org-agenda-use-tag-inheritance)))))) nil (let (mrk) (save-excursion
> >> >> > (goto-char (point-min)) (while (equal (forward-line) 0) (if (setq
> mrk
> >> >> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
> >> >> > ...))))))) (setq org-agenda-represented-tags nil
> >> >> > org-agenda-represented-categories nil) (if
> >> org-agenda-top-headline-filter
> >> >> > (progn (org-agenda-filter-top-headline-apply
> >> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> >> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> >> >> > 'org-agenda-tag-filter :preset-filter) (progn
> (org-agenda-filter-apply
> >> >> (get
> >> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> >> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-category-filter 'category))) (if (get
> >> >> > 'org-agenda-category-filter :preset-filter) (progn
> >> >> (org-agenda-filter-apply
> >> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> >> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-regexp-filter 'regexp))) (if (get
> 'org-agenda-regexp-filter
> >> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> >> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-effort-filter 'effort))) (if (get
> 'org-agenda-effort-filter
> >> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> >> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> >> >> >   (let ((inhibit-read-only t)) (save-excursion (goto-char
> (point-min))
> >> >> > (save-excursion (while (org-activate-links (point-max)) (goto-char
> >> >> > (match-end 0)))) (if (eq org-agenda-remove-tags t) nil
> >> >> > (org-agenda-align-tags)) (if org-agenda-with-colors nil
> >> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if
> (and
> >> >> > (boundp 'org-overriding-columns-format)
> org-overriding-columns-format)
> >> >> > (progn (set (make-local-variable 'org-local-columns-format)
> >> >> > org-overriding-columns-format))) (if
> org-agenda-view-columns-initially
> >> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities
> (progn
> >> >> > (org-agenda-fontify-priorities))) (if (and
> >> org-agenda-dim-blocked-tasks
> >> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> >> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode
> (progn
> >> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if
> (and
> >> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
> >> >> > (point-min) 'org-habit-p))) (progn
> >> >> (org-habit-insert-consistency-graphs)))
> >> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or
> (eq
> >> >> > org-agenda-show-inherited-tags 'always) (and (listp
> >> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
> >> >> > org-agenda-show-inherited-tags)) (and (eq
> >> org-agenda-show-inherited-tags
> >> >> t)
> >> >> > (or (eq org-agenda-use-tag-inheritance t) (and (listp
> >> >> > org-agenda-use-tag-inheritance) (not ...))))) nil (let (mrk)
> >> >> > (save-excursion (goto-char (point-min)) (while (equal
> (forward-line)
> >> 0)
> >> >> (if
> >> >> > (setq mrk ...) (progn ...)))))) (setq org-agenda-represented-tags
> nil
> >> >> > org-agenda-represented-categories nil) (if
> >> org-agenda-top-headline-filter
> >> >> > (progn (org-agenda-filter-top-headline-apply
> >> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> >> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> >> >> > 'org-agenda-tag-filter :preset-filter) (progn
> (org-agenda-filter-apply
> >> >> (get
> >> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> >> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-category-filter 'category))) (if (get
> >> >> > 'org-agenda-category-filter :preset-filter) (progn
> >> >> (org-agenda-filter-apply
> >> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> >> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-regexp-filter 'regexp))) (if (get
> 'org-agenda-regexp-filter
> >> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> >> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-effort-filter 'effort))) (if (get
> 'org-agenda-effort-filter
> >> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> >> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> >> (run-hooks
> >> >> > 'org-agenda-finalize-hook))
> >> >> >   (if org-agenda-multi nil (let ((inhibit-read-only t))
> >> (save-excursion
> >> >> > (goto-char (point-min)) (save-excursion (while (org-activate-links
> >> >> > (point-max)) (goto-char (match-end 0)))) (if (eq
> >> org-agenda-remove-tags
> >> >> t)
> >> >> > nil (org-agenda-align-tags)) (if org-agenda-with-colors nil
> >> >> > (remove-text-properties (point-min) (point-max) '(face nil))) (if
> (and
> >> >> > (boundp 'org-overriding-columns-format)
> org-overriding-columns-format)
> >> >> > (progn (set (make-local-variable 'org-local-columns-format)
> >> >> > org-overriding-columns-format))) (if
> org-agenda-view-columns-initially
> >> >> > (progn (org-agenda-columns))) (if org-agenda-fontify-priorities
> (progn
> >> >> > (org-agenda-fontify-priorities))) (if (and
> >> org-agenda-dim-blocked-tasks
> >> >> > org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> >> >> > (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode
> (progn
> >> >> > (org-agenda-entry-text-hide) (org-agenda-entry-text-show))) (if
> (and
> >> >> > (featurep 'org-habit) (save-excursion (next-single-property-change
> >> >> > (point-min) 'org-habit-p))) (progn
> >> >> (org-habit-insert-consistency-graphs)))
> >> >> > (setq org-agenda-type (org-get-at-bol 'org-agenda-type)) (if (or
> (eq
> >> >> > org-agenda-show-inherited-tags 'always) (and (listp
> >> >> > org-agenda-show-inherited-tags) (memq org-agenda-type
> >> >> > org-agenda-show-inherited-tags)) (and (eq
> >> org-agenda-show-inherited-tags
> >> >> t)
> >> >> > (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let
> >> (mrk)
> >> >> > (save-excursion (goto-char (point-min)) (while (equal ... 0) (if
> ...
> >> >> > ...))))) (setq org-agenda-represented-tags nil
> >> >> > org-agenda-represented-categories nil) (if
> >> org-agenda-top-headline-filter
> >> >> > (progn (org-agenda-filter-top-headline-apply
> >> >> > org-agenda-top-headline-filter))) (if org-agenda-tag-filter (progn
> >> >> > (org-agenda-filter-apply org-agenda-tag-filter 'tag t))) (if (get
> >> >> > 'org-agenda-tag-filter :preset-filter) (progn
> (org-agenda-filter-apply
> >> >> (get
> >> >> > 'org-agenda-tag-filter :preset-filter) 'tag t))) (if
> >> >> > org-agenda-category-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-category-filter 'category))) (if (get
> >> >> > 'org-agenda-category-filter :preset-filter) (progn
> >> >> (org-agenda-filter-apply
> >> >> > (get 'org-agenda-category-filter :preset-filter) 'category))) (if
> >> >> > org-agenda-regexp-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-regexp-filter 'regexp))) (if (get
> 'org-agenda-regexp-filter
> >> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> >> > 'org-agenda-regexp-filter :preset-filter) 'regexp))) (if
> >> >> > org-agenda-effort-filter (progn (org-agenda-filter-apply
> >> >> > org-agenda-effort-filter 'effort))) (if (get
> 'org-agenda-effort-filter
> >> >> > :preset-filter) (progn (org-agenda-filter-apply (get
> >> >> > 'org-agenda-effort-filter :preset-filter) 'effort))) (add-hook
> >> >> > 'kill-buffer-hook 'org-agenda-reset-markers 'append 'local))
> >> (run-hooks
> >> >> > 'org-agenda-finalize-hook)))
> >> >> >   org-agenda-finalize()
> >> >> >   (let* ((span (org-agenda-ndays-to-span (or span
> org-agenda-span)))
> >> >> (today
> >> >> > (org-today)) (sd (or start-day today)) (ndays
> >> (org-agenda-span-to-ndays
> >> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq
> ndays
> >> >> 14))
> >> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
> >> 'ifmode))
> >> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday)
> (<
> >> >> ndays
> >> >> > 7)) sd (let* ((nt ...) (n1 org-agenda-start-on-weekday) (d ...)) (-
> >> sd (+
> >> >> > ... d))))) (day-numbers (list start)) (day-cnt 0)
> (inhibit-redisplay
> >> (not
> >> >> > debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log)
> 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) with-hour)) (let
> ((--dotimes-limit--
> >> >> (1-
> >> >> > ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers
> (cons
> >> (1+
> >> >> > (car day-numbers)) day-numbers)) (setq n (1+ n)))) (setq
> day-numbers
> >> >> > (nreverse day-numbers)) (setq clocktable-start (car day-numbers)
> >> >> > clocktable-end (1+ (or (org-last day-numbers) 0))) (set
> >> >> > (make-local-variable 'org-starting-day) (car day-numbers)) (set
> >> >> > (make-local-variable 'org-arg-loc) arg) (set (make-local-variable
> >> >> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
> >> >> > org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2
> >> (org-last
> >> >> > day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
> (org-days-to-iso-week
> >> >> > d2))) (setq s (point)) (cond ((not org-agenda-overriding-header)
> >> (insert
> >> >> > (concat ... "-agenda" ... ":\n"))) ((equal
> >> org-agenda-overriding-header
> >> >> "")
> >> >> > nil) ((stringp org-agenda-overriding-header) (insert (propertize
> >> >> > org-agenda-overriding-header ... ...) "\n")) (t (user-error
> "Invalid
> >> >> value
> >> >> > for `org-agenda-overriding-hea..." org-agenda-overriding-header))))
> >> (if
> >> >> (>
> >> >> > (point) s) (progn (add-text-properties s (1- (point)) (list 'face
> >> >> > 'org-agenda-structure 'org-date-line t))
> (org-agenda-mark-header-line
> >> >> s))))
> >> >> > (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
> >> >> > day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s
> >> >> (point))
> >> >> > (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd)))
> >> (setq
> >> >> > start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq
> >> end-pos
> >> >> > (point))))) (setq files thefiles rtnall nil) (while (setq file
> >> (car-safe
> >> >> > (prog1 files (setq files ...)))) (catch 'nextfile
> >> (org-check-agenda-file
> >> >> > file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if
> >> (member
> >> >> > :deadline* org-agenda-entry-types) (progn ...)) (if (member
> >> :scheduled*
> >> >> > org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...))
> >> (if
> >> >> > org-agenda-include-deadlines nil (setq org-agenda-entry-types ...))
> >> (cond
> >> >> > (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall
> >> (append
> >> >> > rtnall rtn)))) (if org-agenda-include-diary (progn (let
> >> >> > ((org-agenda-search-headline-for-time t)) (require 'diary-lib)
> (setq
> >> rtn
> >> >> > (org-get-entries-from-diary date)) (setq rtnall (append rtnall
> >> rtn)))))
> >> >> (if
> >> >> > (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+
> >> day-cnt))
> >> >> > (insert (if (stringp org-agenda-format-date) (format-time-string
> >> >> > org-agenda-format-date ...) (funcall org-agenda-format-date date))
> >> "\n")
> >> >> > (put-text-property s (1- (point)) 'face (org-agenda-get-day-face
> >> date))
> >> >> > (put-text-property s (1- (point)) 'org-date-line t)
> >> (put-text-property s
> >> >> > (1- (point)) 'org-agenda-date-header t) (put-text-property s (1-
> >> (point))
> >> >> > 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s ...
> ...
> >> t)))
> >> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp))
> (if
> >> >> > rtnall (progn (insert ... "\n"))) (put-text-property s (1- (point))
> >> 'day
> >> >> d)
> >> >> > (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))) (if (and
> >> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
> >> >> > ((org-agenda-files (org-agenda-files nil ...)) (p (copy-sequence
> >> >> > org-agenda-clockreport-parameter-plist)) tbl) (setq p
> >> (org-plist-delete p
> >> >> > :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p
> >> >> (plist-put
> >> >> > p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda))
> (setq
> >> tbl
> >> >> > (apply 'org-clock-get-clocktable p)) (insert tbl)))) (goto-char
> >> >> > (point-min)) (or org-agenda-multi
> (org-agenda-fit-window-to-buffer))
> >> (if
> >> >> > (or (not (get-buffer-window org-agenda-buffer-name)) (and
> >> >> > (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p
> >> >> > (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if
> (not
> >> >> > (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or
> >> >> start-pos
> >> >> > 1)) (recenter 1)))) (goto-char (or start-pos 1))
> (add-text-properties
> >> >> > (point-min) (point-max) (list 'org-agenda-type 'agenda
> 'org-last-args
> >> >> (list
> >> >> > arg start-day span) 'org-redo-cmd org-agenda-redo-command
> >> 'org-series-cmd
> >> >> > org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn
> >> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> >> >> > buffer-read-only t) (message ""))
> >> >> >   (catch 'exit (setq org-agenda-buffer-name (or
> >> >> org-agenda-buffer-tmp-name
> >> >> > (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
> >> >> > org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org
> >> >> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare "Day/Week")
> (setq
> >> >> > start-day (or start-day org-agenda-start-day)) (if (stringp
> start-day)
> >> >> > (progn (setq start-day (time-to-days (org-read-date nil t
> >> start-day)))))
> >> >> > (org-compile-prefix-format 'agenda) (org-set-sorting-strategy
> 'agenda)
> >> >> > (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span)))
> >> (today
> >> >> > (org-today)) (sd (or start-day today)) (ndays
> >> (org-agenda-span-to-ndays
> >> >> > span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq
> ndays
> >> >> 14))
> >> >> > org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil
> >> 'ifmode))
> >> >> > (files thefiles) (start (if (or (null org-agenda-start-on-weekday)
> (<
> >> >> ndays
> >> >> > 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start))
> >> >> > (day-cnt 0) (inhibit-redisplay (not debug-on-error))
> >> >> > (org-agenda-show-log-scoped org-agenda-show-log) 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) with-hour)) (let ((--dotimes-limit-- (1-
> ndays)) (n
> >> >> 0))
> >> >> > (while (< n --dotimes-limit--) (setq day-numbers (cons (1+ ...)
> >> >> > day-numbers)) (setq n (1+ n)))) (setq day-numbers (nreverse
> >> day-numbers))
> >> >> > (setq clocktable-start (car day-numbers) clocktable-end (1+ (or
> >> (org-last
> >> >> > day-numbers) 0))) (set (make-local-variable 'org-starting-day) (car
> >> >> > day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set
> >> >> > (make-local-variable 'org-agenda-current-span)
> >> (org-agenda-ndays-to-span
> >> >> > span)) (if org-agenda-compact-blocks nil (let* ((d1 (car
> day-numbers))
> >> >> (d2
> >> >> > (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2
> >> >> > (org-days-to-iso-week d2))) (setq s (point)) (cond ((not
> >> >> > org-agenda-overriding-header) (insert ...)) ((equal
> >> >> > org-agenda-overriding-header "") nil) ((stringp
> >> >> > org-agenda-overriding-header) (insert ... "\n")) (t (user-error
> >> "Invalid
> >> >> > value for `org-agenda-overriding-hea..."
> >> org-agenda-overriding-header))))
> >> >> > (if (> (point) s) (progn (add-text-properties s (1- ...) (list ...
> ...
> >> >> ...
> >> >> > t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe
> (prog1
> >> >> > day-numbers (setq day-numbers ...)))) (setq date
> >> >> > (calendar-gregorian-from-absolute d) s (point)) (if (or (setq
> todayp
> >> (= d
> >> >> > today)) (and (not start-pos) (= d sd))) (setq start-pos (point))
> (if
> >> (and
> >> >> > start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files
> >> >> thefiles
> >> >> > rtnall nil) (while (setq file (car-safe (prog1 files ...))) (catch
> >> >> > 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if
> ...
> >> >> ...)
> >> >> > (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond
> ...
> >> >> ...
> >> >> > ...)) (setq rtnall (append rtnall rtn)))) (if
> org-agenda-include-diary
> >> >> > (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...))))
> >> (if
> >> >> (or
> >> >> > rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+
> day-cnt))
> >> >> > (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face
> >> >> > (org-agenda-get-day-face date)) (put-text-property s (1- ...)
> >> >> > 'org-date-line t) (put-text-property s (1- ...)
> >> 'org-agenda-date-header
> >> >> t)
> >> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp
> (progn
> >> >> ...))
> >> >> > (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp))
> (if
> >> >> > rtnall (progn ...)) (put-text-property s (1- ...) 'day d)
> >> >> > (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and
> >> >> > org-agenda-clockreport-mode clocktable-start) (progn (let
> >> >> > ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p
> >> :block))
> >> >> > (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put
> p
> >> >> :tend
> >> >> > clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply
> >> ...
> >> >> p))
> >> >> > (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi
> >> >> > (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window
> >> >> > org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min))
> >> >> > (pos-visible-in-window-p (point-max)))) nil (goto-char (1-
> >> (point-max)))
> >> >> > (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1)))
> >> (progn
> >> >> > (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or
> start-pos
> >> 1))
> >> >> > (add-text-properties (point-min) (point-max) (list 'org-agenda-type
> >> >> 'agenda
> >> >> > 'org-last-args (list arg start-day span) 'org-redo-cmd
> >> >> > org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq
> >> >> > org-agenda-show-log-scoped 'clockcheck) (progn
> >> >> > (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq
> >> >> > buffer-read-only t) (message "")))
> >> >> >   org-agenda-list(nil nil day nil)
> >> >> >   (let nil (org-agenda-list 'nil nil 'day nil))
> >> >> >   eval((let nil (org-agenda-list 'nil nil 'day nil)))
> >> >> >   org-let(nil (org-agenda-list 'nil nil 'day nil))
> >> >> >   (if series-redo-cmd (eval series-redo-cmd) (org-let lprops
> >> redo-cmd))
> >> >> >   (let* ((p (or (and (looking-at "\\'") (1- (point))) (point)))
> (cpa
> >> (if
> >> >> > (eq all t) nil current-prefix-arg)) (org-agenda-doing-sticky-redo
> >> >> > org-agenda-sticky) (org-agenda-sticky nil) (org-agenda-buffer-name
> (or
> >> >> > org-agenda-this-buffer-name org-agenda-buffer-name))
> >> >> (org-agenda-keep-modes
> >> >> > t) (tag-filter org-agenda-tag-filter) (tag-preset (get
> >> >> > 'org-agenda-tag-filter :preset-filter)) (top-hl-filter
> >> >> > org-agenda-top-headline-filter) (cat-filter
> >> org-agenda-category-filter)
> >> >> > (cat-preset (get 'org-agenda-category-filter :preset-filter))
> >> (re-filter
> >> >> > org-agenda-regexp-filter) (re-preset (get 'org-agenda-regexp-filter
> >> >> > :preset-filter)) (effort-filter org-agenda-effort-filter)
> >> (effort-preset
> >> >> > (get 'org-agenda-effort-filter :preset-filter))
> >> >> > (org-agenda-tag-filter-while-redo (or tag-filter tag-preset)) (cols
> >> >> > org-agenda-columns-active) (line (org-current-line)) (window-line
> (-
> >> line
> >> >> > (org-current-line (window-start)))) (lprops (get
> >> 'org-agenda-redo-command
> >> >> > 'org-lprops)) (redo-cmd (get-text-property p 'org-redo-cmd))
> >> (last-args
> >> >> > (get-text-property p 'org-last-args)) (org-agenda-overriding-cmd
> >> >> > (get-text-property p 'org-series-cmd))
> >> >> (org-agenda-overriding-cmd-arguments
> >> >> > (if (eq all t) nil (cond ((listp last-args) (cons (or cpa ...) (cdr
> >> >> > last-args))) ((stringp last-args) last-args)))) (series-redo-cmd
> >> >> > (get-text-property p 'org-series-redo-cmd))) (put
> >> 'org-agenda-tag-filter
> >> >> > :preset-filter nil) (put 'org-agenda-category-filter :preset-filter
> >> nil)
> >> >> > (put 'org-agenda-regexp-filter :preset-filter nil) (put
> >> >> > 'org-agenda-effort-filter :preset-filter nil) (and cols
> >> >> (org-columns-quit))
> >> >> > (message "Rebuilding agenda buffer...") (if series-redo-cmd (eval
> >> >> > series-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
> >> >> > org-agenda-category-filter cat-filter org-agenda-regexp-filter
> >> re-filter
> >> >> > org-agenda-effort-filter effort-filter
> org-agenda-top-headline-filter
> >> >> > top-hl-filter) (message "Rebuilding agenda buffer...done") (put
> >> >> > 'org-agenda-tag-filter :preset-filter tag-preset) (put
> >> >> > 'org-agenda-category-filter :preset-filter cat-preset) (put
> >> >> > 'org-agenda-regexp-filter :preset-filter re-preset) (put
> >> >> > 'org-agenda-effort-filter :preset-filter effort-preset) (let ((tag
> (or
> >> >> > tag-filter tag-preset)) (cat (or cat-filter cat-preset)) (effort
> (or
> >> >> > effort-filter effort-preset)) (re (or re-filter re-preset))) (if
> tag
> >> >> (progn
> >> >> > (org-agenda-filter-apply tag 'tag t))) (if cat (progn
> >> >> > (org-agenda-filter-apply cat 'category))) (if effort (progn
> >> >> > (org-agenda-filter-apply effort 'effort))) (if re (progn
> >> >> > (org-agenda-filter-apply re 'regexp)))) (and top-hl-filter
> >> >> > (org-agenda-filter-top-headline-apply top-hl-filter)) (and cols
> >> >> > (called-interactively-p 'any) (org-agenda-columns)) (org-goto-line
> >> line)
> >> >> > (recenter window-line))
> >> >> >   org-agenda-redo(t)
> >> >> >   (if exhaustive (let ((--dolist-tail-- (buffer-list)) buffer)
> (while
> >> >> > --dolist-tail-- (setq buffer (car --dolist-tail--))
> >> (save-current-buffer
> >> >> > (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn
> >> >> > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr
> --dolist-tail--))))
> >> >> > (org-agenda-redo t))
> >> >> >   org-agenda-redo-all(nil)
> >> >> >   funcall-interactively(org-agenda-redo-all nil)
> >> >> >   call-interactively(org-agenda-redo-all nil nil)
> >> >> >   command-execute(org-agenda-redo-all)
> >> >> > ```
> >> >> >
> >> >> > [stardiviner]           <Hack this world!>      GPG key ID:
> 47C32433
> >> >> > IRC(freeenode): stardiviner                     Twitter:
> @numbchild
> >> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3
> 2433
> >> >> > Blog: http://stardiviner.github.io/
> >> >> >
> >> >> >
> >> >> > On Fri, Aug 14, 2020 at 1:15 PM Ihor Radchenko <yantar92@gmail.com
> >
> >> >> wrote:
> >> >> >
> >> >> >> > I want to get around this problem. So need to know how to detect
> >> >> >> currently
> >> >> >> > in logbook drawer or something else which used to record
> clocking
> >> >> note,
> >> >> >> > `org-add-note`, etc.
> >> >> >>
> >> >> >> You may try to use `org-logbook-drawer-re'.
> >> >> >>
> >> >> >> > When I toggle org-log-mode and related options in org-agenda
> >> buffer. I
> >> >> >> > found my org-link-beautify will caused long time suspend and no
> >> stop.
> >> >> >> After
> >> >> >> > debug, I found org-link-beautify text-property caused this
> problem.
> >> >> >>
> >> >> >> Could you provide more details how your text property is causing
> the
> >> >> >> problem in org-agenda? Which function in agenda is slow?
> >> >> >>
> >> >> >> Best,
> >> >> >> Ihor
> >> >> >>
> >> >> >>
> >> >> >> "numbchild@gmail.com" <numbchild@gmail.com> writes:
> >> >> >>
> >> >> >> > I have a org-mode extension:
> >> >> >> >
> >> >> >>
> >> >>
> >>
> https://github.com/stardiviner/org-link-beautify/blob/master/org-link-beautify.el#L71
> >> >> >> >
> >> >> >> > It will beautify links with text-properties.
> >> >> >> >
> >> >> >> > When I toggle org-log-mode and related options in org-agenda
> >> buffer. I
> >> >> >> > found my org-link-beautify will caused long time suspend and no
> >> stop.
> >> >> >> After
> >> >> >> > debug, I found org-link-beautify text-property caused this
> problem.
> >> >> >> >
> >> >> >> > I want to get around this problem. So need to know how to detect
> >> >> >> currently
> >> >> >> > in logbook drawer or something else which used to record
> clocking
> >> >> note,
> >> >> >> > `org-add-note`, etc.
> >> >> >> >
> >> >> >> > Or maybe org-agenda upstream can do something to work around
> this
> >> >> >> > text-properties issue?
> >> >> >> >
> >> >> >> > [stardiviner]           <Hack this world!>      GPG key ID:
> >> 47C32433
> >> >> >> > IRC(freeenode): stardiviner                     Twitter:
> >> @numbchild
> >> >> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3
> >> 2433
> >> >> >> > Blog: http://stardiviner.github.io/
> >> >> >>
> >> >>
> >>
>

[-- Attachment #2: Type: text/html, Size: 51203 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-08-17  3:14 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-14  4:46 How to detect current in logbook drawer? numbchild
2020-08-14  5:14 ` Ihor Radchenko
2020-08-15  5:12   ` numbchild
2020-08-15  6:01     ` Ihor Radchenko
2020-08-16  3:55       ` numbchild
2020-08-16  6:38         ` Ihor Radchenko
2020-08-17  0:38           ` numbchild
2020-08-17  0:46             ` numbchild
2020-08-17  1:49             ` Ihor Radchenko
2020-08-17  3:13               ` numbchild
2020-08-16  3:57       ` numbchild
2020-08-15  5:34   ` numbchild
2020-08-15  6:06     ` Ihor Radchenko

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).