Значение и функциональные свойства данного символа являются отдельными, и поэтому предположительно make-local-variable
будет влиять только на значение , тогда как fset
работает со свойством function .
Вероятно, вам лучше описать более подробно, что именно вы хотите сделать, но одно общее решение состояло бы в том, чтобы использовать "совет по принципу", чтобы обернуть оригинальную функцию своим собственным кодом.
(defadvice foo (around my-foo-wrapper)
(if (not (and (boundp 'use-my-foo) 'use-my-foo))
ad-do-it
(message "Not done:(")))
(ad-activate 'foo)
;; in special buffer
(set (make-local-variable 'use-my-foo) t)
РЕДАКТИРОВАТЬ: (относительно дополнительных комментариев карты ключей)
Возможно, тогда вы захотите определить второстепенный режим для использования в вашем специальном буфере. Карты ключей младшего режима имеют приоритет над картами основного режима, поэтому вам просто нужно определить ту же привязку в карте вспомогательного режима. Смотри define-minor-mode
.