我想做的是智能地为compile
函数的字符串参数预先设置一个缓冲区本地默认值。
现在 compile.el 默认使用“make”作为命令。我可以通过设置来设置compile-command
。我什至可以使该变量成为局部缓冲区。如果我想要相同的静态值,那总是有效的。
但我想compile-command
根据缓冲区的内容、缓冲区的名称、文件包含目录的内容(如果有)和月相来智能地选择。基本上我想控制默认值,然后允许交互式用户覆盖该预设值。
我希望通过事先的建议来做到这一点。但这并没有像我预期的那样工作。
阅读advice.el文件,我明白了
假设一个函数/宏/subr/特殊形式有 N 条前通知,M 条环绕通知和 K 条后通知。假设没有任何建议受到保护,其建议定义将如下所示(主体形式索引对应于该建议类中相应建议的位置):
([macro] lambda <arglist>
[ [<advised-docstring>] [(interactive ...)] ]
(let (ad-return-value)
{<before-0-body-form>}*
....
{<before-N-1-body-form>}*
{<around-0-body-form>}*
{<around-1-body-form>}*
....
{<around-M-1-body-form>}*
(setq ad-return-value
<apply original definition to <arglist>>)
{<other-around-M-1-body-form>}*
....
{<other-around-1-body-form>}*
{<other-around-0-body-form>}*
{<after-0-body-form>}*
....
{<after-K-1-body-form>}*
ad-return-value))
这对我说的是,当建议函数是交互式的时,“交互式调用”会在调用之前的建议或任何建议之前调用交互式表单。
而且,当我向 中添加建议时compile
,我观察到的行为证实了这一点。在处理交互式表单后调用建议。在我的建议有机会猜测它应该是什么并预先设置之前,交互式表单会建议用于编译的字符串。
所以...
- 如何让我的代码在交互式表单之前运行?可以建议吗?如果不是建议,还有别的吗?或者
- 如何
compile-command
为任何缓冲区动态预设?
想法赞赏。