Emacs 如何在咖啡模式下覆盖前奏模块挂钩?
我已经使用了大约一年,并开发了一个很好的设置。我开始写咖啡剧本,并尝试使用。这包含以下行:Emacs 如何在咖啡模式下覆盖前奏模块挂钩?,emacs,elisp,emacs-prelude,Emacs,Elisp,Emacs Prelude,我已经使用了大约一年,并开发了一个很好的设置。我开始写咖啡剧本,并尝试使用。这包含以下行: (setq coffee-command "~/dev/coffee") 这在我的机器上是不正确的。我想把它改为: (setq coffee-command "coffee") 现在很明显,我可以简单地更改这一行并完成它,但我喜欢将所有更改保存在个人文件夹中,以便于在我的所有机器上轻松更新和保持我的点文件同步 我已尝试通过以下方式覆盖它: (setq coffee-mode "coffee") (ev
(setq coffee-command "~/dev/coffee")
这在我的机器上是不正确的。我想把它改为:
(setq coffee-command "coffee")
现在很明显,我可以简单地更改这一行并完成它,但我喜欢将所有更改保存在个人
文件夹中,以便于在我的所有机器上轻松更新和保持我的点文件同步
我已尝试通过以下方式覆盖它:
(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
运行
额外信息为了完整起见,我将在此处复制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命令之前,应检查是否存在
这条线很近
(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,而只是删除所有以前添加的钩子。这是不文明的。不确定这是否是问题所在,但您的
eval-after-load
引用不足。像(加载后评估“咖啡模式”(setq coffee命令“coffee”)
(在setq
之前加上一个引号)那样编写,或者如果您的Emacs足够新,则在加载后评估时使用。@legoscia谢谢。我试着像你说的那样引用这句话,但不幸的是,这没用,(谢谢你告诉我应该怎么做),我应该引用其他的话吗?编辑:引用其他行似乎没有什么作用。我想您需要将非nil第三个参数传递给addhook
,以便将此函数置于hook变量中的prelude coffee mode defaults
之后。嗯。。。这似乎对我也不起作用@莱戈西亚,你能详细解释一下你的意思吗?修复prelude的好处是,我将找出如何测试是否存在,然后将其放入PR中。默认情况下,添加钩子
在钩子变量的前面添加新钩子,在本例中,prelude咖啡模式钩子
。也就是说,prelude coffee mode defaults
将在设置正确值的函数之后执行,从而撤消其工作。如果将t
作为第三个参数传递给add hook
(即(add hook'prelude coffee mode hook(lambda()(setq coffee命令“coffee”))t
),则它将最后添加新函数,这将确保它覆盖prelude函数。@legocia Hmmm。。。这似乎也不起作用,哦,我已经对prelude做了更改,现在正在提交PR,所以我想这没什么大不了的。当然,这段代码的实际问题是有setq
是一个钩子。不知道这是怎么进入序曲的,但由于我不使用咖啡脚本,我想我在最初提交或类似的时候并没有太多注意。我会清理代码。