2

我使用 TAB 从 yasnippet 扩展片段,当它不扩展片段时,它通常会退回到缩进(绑定到 TAB 的默认命令),这由 yasnippets 自定义变量引用,yas-fallback-behavior它只能是call-other-commandor return-nil

我想要的功能是在点击 TAB 时:

  1. 尝试完成片段、成功或静默失败。
  2. 检查我们是否处于 PHP 模式,并php-complete-function静默调用、成功或失败。
  3. 默认为其当前的缩进命令 ( 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不会静默失败,而是会向 minibuffer 发送垃圾邮件,其中包含来自 PHP 完成的多次检查的消息。

那么有没有办法在这种情况下禁止来自该函数的消息传递,而无需进行所有相同的检查,它实际上是在我的建议中重新编程该函数?或者,有没有更好的方法来使用 yasnippet 来开始我所缺少的?

4

2 回答 2

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))))
于 2012-11-27T23:01:10.737 回答
0

You could try something like (guaranteed 100% untested):

(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))
于 2013-01-22T19:32:49.807 回答