5

I am studying the following code snippet taken from prelude-c.el:

;; taken from prelude-c.el

(defun prelude-makefile-mode-defaults ()
  (whitespace-toggle-options '(tabs))
  (setq indent-tabs-mode t))

(setq prelude-makefile-mode-hook 'prelude-makefile-mode-defaults)

(add-hook 'makefile-mode-hook (lambda ()
                                (run-hooks 'prelude-makefile-mode-hook)))

The author defined a function named prelude-makefile-mode-defaults, then made prelude-makefile-mode-hook an alias to it, and finally run it with lambda and run-hooks. This looks tedious to me. In my humble opinion, it can be simplified to

(defun prelude-makefile-mode-defaults ()
  (whitespace-toggle-options '(tabs))
  (setq indent-tabs-mode t))

(add-hook 'makefile-mode-hook #'prelude-makefile-mode-defaults)

Now it is much clearer, and they appears to have the same effect, but of course, the authors of prelude.el must be much more sophisticated than me, who is just a beginner. Is there any hidden advantage of writing down all these seemingly redundant code?

Drew
  • 77,472
  • 10
  • 114
  • 243
nalzok
  • 675
  • 6
  • 18
  • Good question. I much prefer your version, and I don't see why the Prelude would use the other form. – Stefan Feb 16 '19 at 14:12
  • @Stefan I'm curious is there a difference between (foo) and (run-hooks foo)? If they are equivalent, then the function run-hooks would be pointless... – nalzok Feb 16 '19 at 16:22
  • 1
    I think the intent of the author is to provide a hook that can be used for customization. Having a way to guarantee that your own hooks run close after ones from prelude might be useful. –  Feb 20 '19 at 18:46

1 Answers1

2

I believe the reason for this indirection is that it allows users of the package to override the package provided defaults by changing the value of prelude-makefile-mode-hook. The final component of the name prelude-makefile-mode-defaults is a strong hint in this direction, I think. But of course, only the original package author can give a definitive answer.

Harald Hanche-Olsen
  • 2,441
  • 13
  • 15