如何在咖啡模式上覆盖prelude模块挂钩?

时间:2014-05-15 13:24:38

标签: emacs elisp emacs-prelude

我已经使用prelude大约一年了,并且开发了一个很好的设置。我开始编写咖啡脚本并尝试使用prelude-coffee module。这包含以下行:

(setq coffee-command "~/dev/coffee")

在我的机器上不正确。我想把它改成:

(setq coffee-command "coffee")

现在很明显我可以简单地改变这一行并完成它但我喜欢将所有更改保存在personal文件夹中,以便于更新并使我的dotfiles在我的所有机器上保持同步。

我试图通过以下方式覆盖它:

(setq coffee-mode "coffee")
(eval-after-load 'coffee-mode
  (setq coffee-command "coffee"))

(add-hook 'prelude-coffee-mode-hook (setq coffee-command "coffee"))
(add-hook 'coffee-mode-hook (setq coffee-command "coffee"))

但这些都不起作用。需要在另一个似乎与eval-after-load一起运行的文件之后运行更改。

EXTRA INFO 我将在此处重现prelude-coffee.el文件,以确保完整性:

(require 'prelude-programming)

(eval-after-load 'coffee-mode
  '(progn
     (defun prelude-coffee-mode-defaults ()
       "coffee-mode-defaults"

       ;; CoffeeScript uses two spaces.
       (setq coffee-tab-width 2)

       ;; If you don't have js2-mode
       (setq coffee-js-mode 'javascript-mode)

       ;; If you don't want your compiled files to be wrapped
       (setq coffee-args-compile '("-c" "--bare"))

       ;; *Messages* spam
       (setq coffee-debug-mode t)

       ;; Emacs key binding
       (define-key coffee-mode-map [(meta r)] 'coffee-compile-buffer)

       ;; Riding edge.
       (setq coffee-command "~/dev/coffee")

       ;; Compile '.coffee' files on every save
       (and (buffer-file-name)
            (file-exists-p (buffer-file-name))
            (file-exists-p (coffee-compiled-file-name (buffer-file-name)))
            (coffee-cos-mode t)))

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

     (add-hook 'coffee-mode-hook (lambda ()
                                   (run-hooks 'prelude-coffee-mode-hook)))))
(provide 'prelude-coffee)

总之,如何覆盖coffee-mode-hook上发生的事情?

1 个答案:

答案 0 :(得分:1)

哦,那个人太可怕了。我会提出前奏问题。至少它 应在设置coffee-command之前检查是否存在。

此行已关闭

(add-hook 'prelude-coffee-mode-hook (setq coffee-command "coffee"))

试试这个:

(add-hook 'prelude-coffee-mode-hook (lambda () (setq coffee-command "coffee")))

我发现了prelude-coffee.el的其他问题:

您无法在挂钩上使用setq,只需擦除之前添加的所有挂钩。那是不文明的。