我使用TAB从yasnippet扩展片段,当它不扩展片段时,它通常会回退到缩进(默认命令绑定到TAB),这由yasnippets自定义变量yas-fallback-behavior
引用。只能是call-other-command
或return-nil
。
我想要的功能就是点击TAB:
php-complete-function
,
成功,或无声地失败。indent-for-tab-command
)。它目前完美地执行1,然后是3。但是,我能够通过使用这段代码建议yas--fallback
来使其成功:
(defadvice yas--fallback (before try-php-expand (&optional arg from-trigger-key-p) activate)
(when (string-equal mode-name "PHP")
(php-complete-function)))
唯一主要问题仍然是,当尝试使用TAB缩进内容时,php-complete-function
会不无声地失败,而是使用消息阻止迷你缓冲区从它的多次检查PHP完成。
在这种情况下,是否有一种方法可以禁止来自该函数的消息传递,而不进行所有相同的检查,它基本上重新编写了我的建议中的函数?或者,有没有更好的方法来使用yasnippet来开始我缺少的那个?
答案 0 :(得分:0)
您可以通过将message-log-max
设置为nil
来启用任何表达式中的日志记录。
(defadvice yas--fallback (before try-php-expand (&optional arg from-trigger-key-p) activate)
(when (string-equal mode-name "PHP")
(let (message-log-max)
(php-complete-function))))
答案 1 :(得分:0)
您可以尝试类似的(保证100%未经测试):
(defvar my-inhibit-messages nil)
(defadvice message (around my-inhibit activate)
(unless my-inhibit-messages ad-do-it))
(defadvice php-complete-function (around my-silence-php-messages activate)
(let ((my-inhibit-messages t))
ad-do-it))