aboutsummaryrefslogtreecommitdiff
path: root/working/org-element-cache-persist-bug/refute-fontify-rearms.el
diff options
context:
space:
mode:
Diffstat (limited to 'working/org-element-cache-persist-bug/refute-fontify-rearms.el')
-rw-r--r--working/org-element-cache-persist-bug/refute-fontify-rearms.el49
1 files changed, 49 insertions, 0 deletions
diff --git a/working/org-element-cache-persist-bug/refute-fontify-rearms.el b/working/org-element-cache-persist-bug/refute-fontify-rearms.el
new file mode 100644
index 00000000..fd55194b
--- /dev/null
+++ b/working/org-element-cache-persist-bug/refute-fontify-rearms.el
@@ -0,0 +1,49 @@
+;; Does the preview buffer re-register after the let unwinds, on fontification?
+(require 'org) (require 'org-element) (require 'org-persist)
+(defvar rk-dir (make-temp-file "refute-" t))
+(setq org-persist-directory (expand-file-name "persist" rk-dir))
+(setq org-element-use-cache t org-element-cache-persistent t org-log-done nil)
+(defvar rk-file (expand-file-name "notes.org" rk-dir))
+(with-temp-file rk-file
+ (dotimes (i 20) (insert (format "* TODO task %d\nbody with src_python{1+1} inline\n" i))))
+
+(defun rk-bufs (buf)
+ (with-current-buffer buf
+ (let (s) (avl-tree-mapc (lambda (el) (push (org-element-property :buffer el) s))
+ org-element--cache)
+ (delete-dups s))))
+
+(let ((real (find-file-noselect rk-file)))
+ (with-current-buffer real
+ (org-element-cache-reset)
+ (org-element-cache-map #'ignore :granularity 'headline)
+ (goto-char (point-min)) (re-search-forward "^\\* TODO task 0") (beginning-of-line)
+ (org-todo "DONE"))
+ (message "before: %S" (rk-bufs real))
+ ;; preview WITH the fix's environment, then let it LIVE and fontify (the step my tests skip)
+ (let ((prev (get-buffer-create "*prev*")))
+ (with-current-buffer prev
+ (with-silent-modifications
+ (insert-file-contents rk-file nil 0 1048576)
+ (setq buffer-file-name rk-file))
+ (eval `(let ((inhibit-message t) (non-essential t)
+ (enable-dir-local-variables nil) (enable-local-variables :safe)
+ (org-element-use-cache nil))
+ (setq-local delay-mode-hooks t) (set-auto-mode) (font-lock-mode 1)))
+ (message "after set-auto-mode: local-cache=%S global=%S persist-hook=%S"
+ org-element-use-cache (default-value 'org-element-use-cache)
+ (and (memq 'org-persist-write-all-buffer kill-buffer-hook) t))
+ ;; THE MISSING STEP: the preview lives in a window and gets fontified
+ (font-lock-ensure)
+ (message "after fontify: persist-hook=%S cache-active=%S"
+ (and (memq 'org-persist-write-all-buffer kill-buffer-hook) t)
+ (org-element--cache-active-p)))
+ (let (kill-buffer-query-functions) (kill-buffer prev)))
+ (message "after kill: %S" (rk-bufs real))
+ (with-current-buffer real
+ (message "parse => %s"
+ (condition-case e (progn (org-element-cache-map
+ (lambda (el) (org-element-property :raw-value el))
+ :granularity 'headline) "OK")
+ (error (format "ERROR %S" e))))))
+(delete-directory rk-dir t)