(require 'cl-lib) (require 'org) (require 'org-element) (require 'org-persist) (setq org-element-use-cache t org-element-cache-persistent t) (when (getenv "SV") (setq org-element--cache-self-verify t org-element--cache-self-verify-frequency 1.0)) (defun nilbuf (buf) (with-current-buffer buf (let ((k 0)) (avl-tree-mapc (lambda (el) (unless (org-element-property :buffer el) (cl-incf k))) org-element--cache) k))) (let* ((file (make-temp-file "np-" nil ".org"))) (copy-file (expand-file-name "todo.org" default-directory) file t) (let ((real (find-file-noselect file))) (with-current-buffer real (org-element-cache-map (lambda (_) nil) :granularity 'element)) (message ">> before: nil-buffer=%d" (nilbuf real)) (message ">> MODE=%s" (getenv "MODE")) (pcase (getenv "MODE") ("writeall" (org-persist-write-all)) ("writebuf" (with-current-buffer real (org-persist-write-all-buffer))) (_ nil)) (message ">> after trigger: nil-buffer=%d" (nilbuf real)) (with-current-buffer real (goto-char (point-max)) (condition-case err (let ((inhibit-read-only t)) (insert "\n* Edit\n")) (error (message ">> RESULT: insert SIGNALLED %S" err))) (message ">> insert survived (nil-buffer=%d)" (nilbuf real)) (set-buffer-modified-p nil))) (delete-file file))