2012-11-11 31 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