我有一个功能:
(defun alternate-narrow-to-region (start end)
(message "Hi!")
(narrow-to-region start end))
除了这个函数体中的那个之外,我希望所有使用narrow-to-region来调用alternate-narrow-to-region(如此窄到defun,narrow-to-page,直接调用narrow)到区域,最终调用alternate-narrow-to-region)。
我该怎么做?
答案 0 :(得分:1)
要保存原始定义(位于问题标题中但不在文本中),请使用defalias
:
(defalias'ORIGINAL-narrow-to-region(符号功能'窄到区域) “我的文档字符串关于此。”)
请注意,在这种情况下,你 不 想要使用它:
(defalias'FOREVER-narrow-to-region'从狭窄到区域 “我的文档字符串关于此。”)
您要做的是在给定时间点复制功能定义。后者使用defalias
会将FOREVER-narrow-to-region
指向narrow-to-region
的当前定义。如果您重新定义narrow-to-region
,那么它将指向新定义,在这种情况下可能不是您想要的定义。
至于你的文字隐含的问题,答案是你不能。您不能让Emacs始终使用您的函数而不是narrow-to-region
。这在您的other question:代码中进行了解释,该代码调用narrow-to-region
并且编译后将继续(实际上)调用原始narrow-to-region
。 (它根本没有被调用。它的代码被有效地内联。)
如果您希望Emacs仅在交互式调用时使用替换命令,您当然可以将原始命令的键绑定重新映射到替换。但这似乎并非如此。