[英]Overriding a function in Emacs Lisp
我想暫時覆蓋kill-new函數。 我有一種方法可以重新實現只在某些情況下有效的kill-new,但我不想重新實現kill-region的特殊版本。 (kill-new從kill-region調用)
由於Emacs Lisp使用動態范圍,這應該是可能的,對吧? (另一方面,這似乎是一個不安全的事情來支持,它可能讓我有點緊張,知道它是可能的......)
我已嘗試使用let和fset,但到目前為止還沒有辦法讓它按預期工作。 所以,希望有人可以填寫以下偽代碼中的空白:
(defun my-kill-new (string &optional replace yank-handler)
(message "in my-kill-new!"))
(defun foo ()
(some-form-that-binds-a-function (kill-new my-kill-new)
(kill-region (point) (mark))))
什么應該是某種形式 - 綁定一個功能 ? 還是我在錯誤的樹上吠叫?
你的some-form-that-binds-a-function
稱為flet
,所以你很接近。
這是一個解決方案:
(defadvice kill-new (around my-kill-new (string &optional replace yank-handler))
(message "my-kill-new!"))
(defun foo ()
(progn (ad-enable-advice 'kill-new 'around 'my-kill-new)
(ad-activate 'kill-new)
(kill-region (point) (mark))
(ad-disable-advice 'kill-new 'around 'my-kill-new)
(ad-activate 'kill-new)))
看看advice
包,它非常擅長做所有這些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.