On Fri, Oct 5, 2018, 6:42 AM Nicolas Goaziou <address@hidden> wrote:
Kaushal Modi <address@hidden> writes:
> I propose to replace such lamba functions with named functions.
> Here's an example of diff on maint branch, after making one such change:
>
> -;; 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)
If that's a function added to `org-mode-hook', it is not useful to
add "on major mode change".
Certainly it's useful. Or at least in general it's a common *pattern*
for a major mode to add a function to `change-major-mode-hook' so that
if the user changes from that major mode to some other major mode, the
function will be called and can put the buffer into a sensible state
before the replacement mode function is called.
The only curious thing about it to me is that this code is being run
via `org-mode-hook' rather than in the `org-mode' body; but maybe
there's some reason for that.
Regarding the general issue:
Grep shows me all of the following instances in the master branch
(commit d215c3a8c0b4c027), where a lambda is added to a hook variable
(a few of them in the form of commented suggestions to the user).
It's never a good idea; all of these should be changed to use named
functions, IMO.
-Phil
-*- grep -*-
./ob-core.el:1429:(add-hook 'org-mode-hook
./ob-haskell.el:66: (add-hook 'inferior-haskell-hook
./ol-w3m.el:171:(add-hook
./ol-w3m.el:176:(add-hook
./org-agenda.el:2246: (add-hook 'filter-buffer-substring-functions
./org-agenda.el:2935: (add-hook
./org-attach.el:697:;; (add-hook
./org-compat.el:813: (add-hook 'imenu-after-jump-hook
./org-compat.el:817: (add-hook 'org-mode-hook
./org-compat.el:880: (add-hook 'speedbar-visiting-tag-hook
./org-crypt.el:144: (add-hook 'auto-save-hook
./org-crypt.el:267: (add-hook
./org-ctags.el:196:(add-hook 'org-mode-hook
./org-ctags.el:59:;; (add-hook 'org-mode-hook
./org-indent.el:188: (add-hook 'filter-buffer-substring-functions
./org-mouse.el:1085:(add-hook 'org-agenda-mode-hook
./org-mouse.el:856:(add-hook 'org-mode-hook
./org-src.el:745: (add-hook \\='org-src-mode-hook
./org.el:15697: (add-hook 'after-save-hook
./org.el:18978:(add-hook 'occur-mode-find-occurrence-hook
./org.el:21221:(add-hook 'org-mode-hook ;remove overlays when
changing major mode
./org.el:2916: (add-hook \\='org-capture-mode-hook