我想做的是智能地为字符串参数预先设置一个缓冲区本地默认值compile
功能。
现在compile.el默认使用“make”作为命令。我可以通过设置来设置compile-command
。我什至可以将该变量设置为本地缓冲区。如果我总是想要相同的静态值,那就有效。
但我想明智地选择compile-command
取决于缓冲区的内容、缓冲区的名称、文件包含目录的内容(如果有)以及月相。基本上我想控制默认值,然后允许交互式用户覆盖该预设值。
我希望在事先建议的情况下做到这一点。但这并没有像我预期的那样工作。
阅读advice.el文件,我明白了
假设一个函数/宏/子/特殊形式有N条before通知,M条around通知和K条after通知。假设没有任何建议受到保护,其建议定义将如下所示(主体形式索引对应于该建议类中相应建议的位置):
([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
,我观察到的行为证实了这一点。该建议被调用after交互表单已处理。交互式形式建议用于编译的字符串,before我的建议让你有机会猜测它应该是什么,并预先设定它。
So...
- 如何让我的代码在交互式表单之前运行?建议可以做到这一点吗?如果没有建议,还有别的吗?或者
- 如何动态预设
compile-command
对于任何缓冲区?
想法表示赞赏。
一种选择是设置变量compile-command http://www.gnu.org/software/emacs/manual/html_mono/emacs.html#Compilation在模式挂钩中,类似
(add-hook 'c++-mode-hook 'my-c++-set-compile-command)
(defun my-c++-set-compile-command ()
(setq (make-local-variable 'compile-command) (format "gmake %s" (buffer-file-name))))
我有时会添加专门的命令来调整当前的编译行(打开/关闭调试标志、优化标志等),然后将这些命令绑定到迷你缓冲区中方便的击键。
关于在之前添加建议interactive
形式,您需要提出建议(之前或前后)has您想要的互动形式。来自advice.el库的一个例子:
;;(defadvice switch-to-buffer (around confirm-non-existing-buffers activate)
;; "Switch to non-existing buffers only upon confirmation."
;; (interactive "BSwitch to buffer: ")
;; (if (or (get-buffer (ad-get-arg 0))
;; (y-or-n-p (format "`%s' does not exist, create? " (ad-get-arg 0))))
;; ad-do-it))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)