2012-11-11 27 views
3

Emacs bzr中的最近(几天)更改在使用defadvice的代码中触发了一个非常奇怪的错误,该错误与以前版本的Emacs一起使用。通常要加载的例如Emacs快照上的建议失败

(defadvice rename-file (around sync-ectags-rename-file (file newname &optional ok-if-already-exists) activate) 
    "Update ectags for renaming of FILE to NEWNAME." 
    (ectags-unregister-tag-file file) 
    ad-do-it 
    (ectags-register-tag-file newname)) 

但是评估使用上述C-x C-e工作正常表达的编译版本,当我得到例如

Debugger entered--Lisp error: (wrong-type-argument symbolp #[(file newname &optional ok-if-already-exists) 
... 
ad-activate(rename-file nil) 

。我试了好几个小时才弄清楚什么是错,但没有运气。在我建议功能的其他几种情况下也会出现类似的问题。

+7

为什么要使用StackOverflow提出有关从源代码控制构建的快照的错误报告? 'M-x report-emacs-bug' – phils

+0

我当然完全同意phils,并补充说我鼓励人们现在使用'emacs-24'分支,以帮助我们修复24.3版本之前的错误。 – Stefan

+0

该错误已在更新的版本中修复。我不会再为这些东西使用stackoverflow。谢谢。啊哈! –

回答

1

这是一个上游漏洞。看看讨论here。据我所知,现在有很多内部变化正在进行,因为Emacs 24.3将从各种建议切换到包装挂钩。

+0

啊!有趣。什么是挂钩? –

+0

看看他们的文档。 C-h v'with-wrapper-hooks'。基本上它是更好的替代周围的建议。 –

+0

@BozhidarBatsov:新的通知机制让人想起'with-wrapper-hook'(当与':around'一起使用时),这不是从“around advice”到“with-wrapper-hook”的转变。这只是一个新的轻量级建议库,它也恰好使'with-wrapper-hook'过时。 – Stefan