Я хотел бы временно переопределить функцию kill-new. У меня есть способ, которым я хочу переопределить kill-new, который работает только в определенных контекстах, но я не хочу переопределять специальную версию kill-region. (kill-new вызывается из области kill)Переопределение функции в Emacs Lisp
Поскольку 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))))
Что должно некоторые форм-что-связывает-а-функция быть? Или я лаяю неправильное дерево?
Я думаю, что я предпочитаю это использовать flet для этой цели. Несмотря на то, что это делается с большей консультацией, это дает мне легкий доступ к существующей реализации kill-new. – kes
Возможно, вы захотите удалить совет с помощью защиты от размотки, чтобы нелокальные выходы также удалили совет. Просто используйте flet. – jrockway
@kes Если вы хотите получить доступ к исходному определению 'kill-new', просто' flet' до 'old-kill-new'. –