Quisiera anular temporalmente la función kill-new. Tengo una forma en la que quiero volver a implementar kill-new que funciona solo en ciertos contextos, pero no quiero volver a implementar una versión especial de kill-region encima de eso. (kill-new se llama desde kill-region)Reemplazando una función en Emacs Lisp
Dado que Emacs Lisp utiliza el alcance dinámico, esto debería ser posible, ¿no? (Por otro lado, parece que sería inseguro apoyar esto, y podría ponerme un poco nervioso sabiendo que es posible ...)
He experimentado con el uso de let y fset, pero entonces Hasta ahora no han encontrado la forma de hacerlo funcionar como se esperaba. Por lo tanto, es de esperar que alguien puede llenar el espacio en blanco en el siguiente pseudocódigo:
(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))))
Lo que debe alguna forma-que-une-a-función ser? ¿O estoy ladrando el árbol equivocado?
Creo que prefiero usar flet para este propósito. Aunque hay más ceremonias al hacerlo usando consejos, me da fácil acceso a la implementación existente de matar-nuevo. – kes
Probablemente desee eliminar el consejo con un desenrollar-proteger, para que las salidas no locales también eliminen el consejo. Solo usa flet. – jrockway
@kes Si desea acceder a la definición original de 'kill-new', simplemente' flet' it 'old-kill-new'. –