Desidero sovrascrivere temporaneamente la funzione kill-new. Ho un modo in cui voglio reimplementare kill-new che funziona solo in determinati contesti, ma non voglio reimplementare una versione speciale di kill-region in aggiunta. (kill-new viene chiamato da kill-region)Sovrascrittura di una funzione in Emacs Lisp
Poiché Emacs Lisp utilizza lo scope dinamico, questo dovrebbe essere possibile, giusto? (D'altra parte, sembra che sarebbe una cosa non sicura da supportare, e potrebbe rendermi un po 'nervoso sapendo che è possibile ...)
Ho sperimentato usando let e fset, ma così lontano non hanno trovato modo di farlo funzionare come previsto. Così, si spera che qualcuno può riempire il vuoto nel seguente pseudocodice:
(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))))
Cosa dovrebbe qualche forma-che-lega-a-funzione di essere? O sto abbaiando sull'albero sbagliato?
Penso che preferisco usare questo flet per questo scopo. Sebbene ci sia più certezza nel farlo usando i consigli, mi dà un facile accesso all'attuazione esistente di kill-new. – kes
Probabilmente vorrai rimuovere il consiglio con una protezione di svolgimento, in modo che anche le uscite non locali rimuova il consiglio. Basta usare il flet. – jrockway
@kes Se si desidera accedere alla definizione originale di 'kill-new', basta' flet' it a 'old-kill-new'. –