From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id yH7JDVWuOF/8YgAA0tVLHw (envelope-from ) for ; Sun, 16 Aug 2020 03:56:05 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id uJWtCVWuOF/vOQAAbx9fmQ (envelope-from ) for ; Sun, 16 Aug 2020 03:56:05 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 4726A9400C7 for ; Sun, 16 Aug 2020 03:56:04 +0000 (UTC) Received: from localhost ([::1]:52054 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k79m6-0003lX-1y for larch@yhetil.org; Sat, 15 Aug 2020 23:56:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k79lb-0003lR-1J for emacs-orgmode@gnu.org; Sat, 15 Aug 2020 23:55:31 -0400 Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:41991) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k79lV-0001vT-6e for emacs-orgmode@gnu.org; Sat, 15 Aug 2020 23:55:30 -0400 Received: by mail-vs1-xe2b.google.com with SMTP id q13so6604692vsn.9 for ; Sat, 15 Aug 2020 20:55:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=j82GZf68eGXUS7Ug1Nmp9RSkT1J0HZoHyo7CQ51TecQ=; b=e/wfd03wyFPo5UjgikaMCKYhWMv2QtXeAPPaPfRHSjGjnvNOQwo5wUMHxKNVMPMTaY 36eDjPjfkwz+pxIB0kC+9VDrnbmfSdfBwVDrnx/R66E9yTY8DhSWQ3P1zwjExrh3hS0L B/XRnPiFY5PA5cINs71P+W7riLgNnTJrzqUxXRet3oZAm1ShMgmtjYeB9XAcMgotDnU/ Vaz/vQYcXq/Bzoch5Gt/CNWDGF6NAfZcY4VCBepk1lfvHIWgvHlCvpu/C4F9QZj5PDLn MeTEsHZkzt5Jz0S6W4OfFmdopLgFgGET/gTDiJG2/Ekv5DR2Z9K1CTBpcxuzciBQgnu/ TD1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=j82GZf68eGXUS7Ug1Nmp9RSkT1J0HZoHyo7CQ51TecQ=; b=W8lB7Fl+mQiydTe5w6zOJeDM3MHBJfqSov/8NzZyx0YmSm/Rie/g/iKpxmqq38A3Ud KAEgjTn92+CkzwIXeKyAv4AoIzv4Xfzb5mKgDsyWGBcwtVytumEuqZT9WmayfsZECZA+ yCCgDKUCpWQCPSx0bbzcn3eeS+NsNpQJc4EpH2rYEJ2CUGo+menq0oG7MQUFKy4218dY 1PwnpMaXPcZr2JlGSQY3Nhxvt9NxVHGZjKL2K2OGzrQgG9mbeQ+KaCBu/wtEmyCSWqQw Tp4b6FVJJVyDGtNkWTOSzmkcaJz9kwbs36ZhINMmaATcsLBjH1aOfG+tddWaZRsAcgxr t3Qw== X-Gm-Message-State: AOAM532knpD6/+iX46JtVSizSjsVTJPzqyH+h/seZCYjTS1g2FwsnKW4 WdmT4kpJIGEnmxg0d5ElqrcoLmXvzQi03dLH6g== X-Google-Smtp-Source: ABdhPJyuLL3kHWNmptFxi0QxYwG9XXDKTfLIPM5EVpuZdWAB8Wl9bwDNkRpNuooe5OmXbQgCgDmgzZXMcuM4EKqMDN8= X-Received: by 2002:a67:985:: with SMTP id 127mr5548120vsj.17.1597550124013; Sat, 15 Aug 2020 20:55:24 -0700 (PDT) MIME-Version: 1.0 References: <877du1olkf.fsf@localhost> <87v9hktpko.fsf@localhost> In-Reply-To: <87v9hktpko.fsf@localhost> From: "numbchild@gmail.com" Date: Sun, 16 Aug 2020 11:55:16 +0800 Message-ID: Subject: Re: How to detect current in logbook drawer? To: Ihor Radchenko Content-Type: multipart/alternative; boundary="000000000000a71e7605acf69f3a" Received-SPF: pass client-ip=2607:f8b0:4864:20::e2b; envelope-from=numbchild@gmail.com; helo=mail-vs1-xe2b.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Org-mode Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20161025 header.b=e/wfd03w; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: 0.29 X-TUID: goSUfII4XLNe --000000000000a71e7605acf69f3a Content-Type: text/plain; charset="UTF-8" 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] 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 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" 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] 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 > 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" 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] 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/ > >> > --000000000000a71e7605acf69f3a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I tried use debug-on-entry on:
=C2=A0 + org-agenda-list= (nil)
=C2=A0 =C2=A0 - org-agenda-mode()
=C2=A0 =C2=A0 =C2=A0 + org-ag= enda-set-mode-name()
=C2=A0 =C2=A0 =C2=A0 =C2=A0 - org-update-dblock
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 + org-dblock-write:clocktable

<= /div>
But got no lucky, Then I followed your another suggestion, use profile= r:

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/


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

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


On Sat, Aug 15, 2020 at 2:02 P= M Ihor Radchenko <yantar92@gmail.c= om> wrote:
numbchild@gm= ail.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 refre= sh org-agenda
> but has long time suspend.
>
> ```
> Debugger entered--Lisp error: (quit)
>
> re-search-forward("\\(\\[\\[\\(\\(?:[^][\\]\\|\\\\\\(?:\\\\\\\\\\= )*[][]\\|\\\\+[^][]\\)+..."
> 17651 t)
>=C2=A0 =C2=A0(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-separa= te
> (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-prope= rty
> :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-prope= rties
> 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-e= nd)))
> (let ((f ...)) (if (functionp f) (progn ...))) (throw :exit t)))))) >=C2=A0 =C2=A0(catch :exit (while (re-search-forward org-link-any-re lim= it 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 ...) = 9;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 en= d)
> (org-rear-nonsticky-at end) (if (not ...) (add-text-properties start e= nd
> properties) (remove-text-properties start end ...) (let ... ... ... ..= . ...
> ...)) (let (...) (if ... ...)) (throw :exit t)))))) nil)
>=C2=A0 =C2=A0org-activate-links(17651)
>=C2=A0 =C2=A0(while (org-activate-links (point-max)) (goto-char (match-= end 0)))
>=C2=A0 =C2=A0(save-excursion (while (org-activate-links (point-max)) (g= oto-char
> (match-end 0))))
>=C2=A0 =C2=A0(save-excursion (goto-char (point-min)) (save-excursion (w= hile
> (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-habi= t-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-ta= gs 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<= br> > (get-text-property ... ...)) (progn (put-text-property ... ... ...
> ...))))))) (setq org-agenda-represented-tags nil
> org-agenda-represented-categories nil) (if org-agenda-top-headline-fil= ter
> (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<= br> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-a= pply (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-fil= ter-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-regex= p-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-effor= t-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 'l= ocal))
>=C2=A0 =C2=A0(let ((inhibit-read-only t)) (save-excursion (goto-char (p= oint-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-for= mat)
> (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-task= s
> org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn<= br> > (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-g= raphs)))
> (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-ta= gs 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<= br> > org-agenda-represented-categories nil) (if org-agenda-top-headline-fil= ter
> (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<= br> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-a= pply (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-fil= ter-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-regex= p-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-effor= t-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 'l= ocal)) (run-hooks
> 'org-agenda-finalize-hook))
>=C2=A0 =C2=A0(if org-agenda-multi nil (let ((inhibit-read-only t)) (sav= e-excursion
> (goto-char (point-min)) (save-excursion (while (org-activate-links
> (point-max)) (goto-char (match-end 0)))) (if (eq org-agenda-remove-tag= s 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-for= mat)
> (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-task= s
> org-blocker-hook) (progn (org-agenda-dim-blocked-tasks)))
> (org-agenda-mark-clocking-task) (if org-agenda-entry-text-mode (progn<= br> > (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-g= raphs)))
> (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-ta= gs t)
> (or (eq org-agenda-use-tag-inheritance t) (and ... ...)))) nil (let (m= rk)
> (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-fil= ter
> (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<= br> > 'org-agenda-tag-filter :preset-filter) (progn (org-agenda-filter-a= pply (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-fil= ter-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-regex= p-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-effor= t-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 'l= ocal)) (run-hooks
> 'org-agenda-finalize-hook)))
>=C2=A0 =C2=A0org-agenda-finalize()
>=C2=A0 =C2=A0(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-nday= s
> 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 'ifm= ode))
> (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (&l= t; 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 clocktabl= e-end
> filter) (setq org-agenda-redo-command (list 'org-agenda-list (list= 'quote
> arg) start-day (list 'quote span) with-hour)) (let ((--dotimes-lim= it-- (1-
> ndays)) (n 0)) (while (< n --dotimes-limit--) (setq day-numbers (co= ns (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<= br> > 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if
> org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-l= ast
> 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) (inse= rt
> (concat ... "-agenda" ... ":\n"))) ((equal org-age= nda-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<= br> > 'org-agenda-structure 'org-date-line t)) (org-agenda-mark-head= er-line s))))
> (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr
> day-numbers))))) (setq date (calendar-gregorian-from-absolute d) s (po= int))
> (if (or (setq todayp (=3D d today)) (and (not start-pos) (=3D 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-sa= fe
> (prog1 files (setq files ...)))) (catch 'nextfile (org-check-agend= a-file
> file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if (memb= er
> :deadline* org-agenda-entry-types) (progn ...)) (if (member :scheduled= *
> org-agenda-entry-types) (progn ...)) (if with-hour (progn ... ...)) (i= f
> org-agenda-include-deadlines nil (setq org-agenda-entry-types ...)) (c= ond
> (... ...) (org-agenda-show-log-scoped ...) (t ...))) (setq rtnall (app= end
> rtnall rtn)))) (if org-agenda-include-diary (progn (let
> ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (se= tq 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)) &qu= ot;\n")
> (put-text-property s (1- (point)) 'face (org-agenda-get-day-face d= ate))
> (put-text-property s (1- (point)) 'org-date-line t) (put-text-prop= erty 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 (an= d
> 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-delet= e p
> :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p (plis= t-put
> p :tend clocktable-end)) (setq p (plist-put p :scope 'agenda)) (se= tq 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 star= t-pos
> 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties<= br> > (point-min) (point-max) (list 'org-agenda-type 'agenda 'or= g-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 ""))
>=C2=A0 =C2=A0(catch 'exit (setq org-agenda-buffer-name (or org-agen= da-buffer-tmp-name
> (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if
> org-agenda-sticky (progn (cond (... ...) (org-keys ...) (t "*Org<= br> > Agenda(a)*")))) "*Org Agenda*")) (org-agenda-prepare &q= uot;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))) (to= day
> (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-nday= s
> 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 'ifm= ode))
> (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (&l= t; 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 d= ate d
> start-pos end-pos todayp clocktable-start clocktable-end filter) (setq=
> org-agenda-redo-command (list 'org-agenda-list (list 'quote ar= g) 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-number= s))
> (setq clocktable-start (car day-numbers) clocktable-end (1+ (or (org-l= ast
> day-numbers) 0))) (set (make-local-variable 'org-starting-day) (ca= r
> day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set > (make-local-variable 'org-agenda-current-span) (org-agenda-ndays-t= o-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-er= ror "Invalid
> value for `org-agenda-overriding-hea..." org-agenda-overriding-he= ader))))
> (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 (= =3D d
> today)) (and (not start-pos) (=3D d sd))) (setq start-pos (point)) (if= (and
> start-pos (not end-pos)) (progn (setq end-pos ...)))) (setq files thef= iles
> 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 ...)))) (i= f (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-da= te-header t)
> (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (pr= ogn ...))
> (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 :bloc= k))
> (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))) (pr= ogn
> (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos = 1))
> (add-text-properties (point-min) (point-max) (list 'org-agenda-typ= e '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 "")))
>=C2=A0 =C2=A0org-agenda-list(nil nil day nil)
>=C2=A0 =C2=A0(let nil (org-agenda-list 'nil nil 'day nil))
>=C2=A0 =C2=A0eval((let nil (org-agenda-list 'nil nil 'day nil))= )
>=C2=A0 =C2=A0org-let(nil (org-agenda-list 'nil nil 'day nil)) >=C2=A0 =C2=A0(if series-redo-cmd (eval series-redo-cmd) (org-let lprops= redo-cmd))
>=C2=A0 =C2=A0(let* ((p (or (and (looking-at "\\'") (1- (p= oint))) (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-filte= r
> :preset-filter)) (effort-filter org-agenda-effort-filter) (effort-pres= et
> (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 (- l= ine
> (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-filte= r nil)
> (put 'org-agenda-regexp-filter :preset-filter nil) (put
> 'org-agenda-effort-filter :preset-filter nil) (and cols (org-colum= ns-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-filt= er
> org-agenda-effort-filter effort-filter org-agenda-top-headline-filter<= br> > 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))
>=C2=A0 =C2=A0org-agenda-redo(t)
>=C2=A0 =C2=A0(if exhaustive (let ((--dolist-tail-- (buffer-list)) buffe= r) (while
> --dolist-tail-- (setq buffer (car --dolist-tail--)) (save-current-buff= er
> (set-buffer buffer) (if (derived-mode-p 'org-agenda-mode) (progn > (org-agenda-redo t)))) (setq --dolist-tail-- (cdr --dolist-tail--))))<= br> > (org-agenda-redo t))
>=C2=A0 =C2=A0org-agenda-redo-all(nil)
>=C2=A0 =C2=A0funcall-interactively(org-agenda-redo-all nil)
>=C2=A0 =C2=A0call-interactively(org-agenda-redo-all nil nil)
>=C2=A0 =C2=A0command-execute(org-agenda-redo-all)
> ```
>
> [stardiviner]=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<Hack this wo= rld!>=C2=A0 =C2=A0 =C2=A0 GPG key ID: 47C32433
> IRC(freeenode): stardiviner=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Twitter:=C2=A0 @numbchild
> Key fingerprint =3D 9BAA 92BC CDDD B9EF 3B36=C2=A0 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 det= ect
>> currently
>> > in logbook drawer or something else which used to record cloc= king 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 pr= oblem.
>>
>> Could you provide more details how your text property is causing t= he
>> problem in org-agenda? Which function in agenda is slow?
>>
>> Best,
>> Ihor
>>
>>
>> "num= bchild@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 pr= oblem.
>> >
>> > I want to get around this problem. So need to know how to det= ect
>> currently
>> > in logbook drawer or something else which used to record cloc= king note,
>> > `org-add-note`, etc.
>> >
>> > Or maybe org-agenda upstream can do something to work around = this
>> > text-properties issue?
>> >
>> > [stardiviner]=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<Hac= k this world!>=C2=A0 =C2=A0 =C2=A0 GPG key ID: 47C32433
>> > IRC(freeenode): stardiviner=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Twitter:=C2=A0 @numbchild
>> > Key fingerprint =3D 9BAA 92BC CDDD B9EF 3B36=C2=A0 CB99 B8C4 = B8E5 47C3 2433
>> > Blog: http://stardiviner.github.io/
>>
--000000000000a71e7605acf69f3a--