2

私は yasnippet からスニペットを展開するために TAB を使用します。スニペットを展開しない場合、通常はインデント (TAB にバインドされたデフォルトのコマンド) に戻りyas-fallback-behaviorます。call-other-commandreturn-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なく、代わりに、PHP 完了の複数のチェックからのメッセージでミニバッファーをスパムすることです。

したがって、この場合、その機能からのメッセージングを禁止する方法はありますか?同じチェックをすべて実行せずに、基本的に私のアドバイスで機能を再プログラミングしますか? あるいは、yasnippet でこれを行うより良い方法はありますか?

4

2 に答える 2

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))
于 2013-01-22T19:32:49.807 に答える
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 に答える