Hello, Yesterday, while helping someone out[0] with why their custom functions added to org-mode-hook didn't work, I asked them to reveal the value of org-mode-hook, and they presented this as the default value of org-mode-hook once Org was loaded:
===== '(org-mode-hook (quote (#[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-show-block-all append local] 5] #[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes))) ===== Going down the rabbit hole, I discovered many places in Org source where lambdas were added to org-mode-hook. I propose to replace such lamba functions with named functions. Here's an example of diff on maint branch, after making one such change: ===== diff --git a/lisp/org.el b/lisp/org.el index 2cc9b6a1c..9f28502d4 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -7429,10 +7429,10 @@ a block. Return a non-nil value when toggling is successful." (when (eq (overlay-get ov 'invisible) 'org-hide-block) (delete-overlay ov)))))))) -;; Remove overlays when changing major mode -(add-hook 'org-mode-hook - (lambda () (add-hook 'change-major-mode-hook - 'org-show-block-all 'append 'local))) +(defun org--unfold-all-blocks-on-major-mode-change () + "Remove overlays when changing major mode." + (add-hook 'change-major-mode-hook #'org-show-block-all 'append 'local)) +(add-hook 'org-mode-hook #'org--unfold-all-blocks-on-major-mode-change) ;;; Org-goto ===== If there is no objection to this, I can fix this everywhere in maint, and then merge that into master. Comments? -- Kaushal Modi [0]: https://www.reddit.com/r/emacs/comments/9l1aji/org_mode_hooks_dont_work/e73awsc/