5

html-mode有効になっているHTMLページがあります。関数を呼び出しsgml-validateて、マークアップエラーをチェックします。に基づいていcompilation-modeます。コンパイル出力からいくつかの警告を削除したいので、関数を作成してフックしましたcompilation-filter-hook(この変数は文書化されていませんが、compilation-filter呼び出します)。すべてが機能します。私の問題は、HTMLページで(を介して)コンパイルプロセスを開始したときにのみフィルター関数が呼び出されるようにするにはどうすればよいsgml-validateですか?

2つの方法がありますが、どれも機能しませんでした。

  • まず、の値を確認できますmajor-mode。ただし、バッファcompilation-modeで有効になっているため、常にを返します。(のソースコードで*compilation*フィルター関数を見つけましたが、の値をチェックしました。どのように正しく機能するのかわかりません。)grep+major-mode
  • もう1つのアイデアは、フィルター関数をHTMLファイルのバッファーにフックするだけでしたが、同様の理由で、コンパイルプロセスの出力が別のバッファーに送られるため、機能しませんでした。
4

2 に答える 2

1

他のすべての操作を実行する前にフィルタリングを実行するように smgl-validate にアドバイスできるようです。例えば:

(defadvice sgml-validate (fix-filtering コマンドのアクティブ化前後)
    (let ((戻り値アドドゥイット))
      (フィルタ関数の戻り値))))
于 2009-05-13T13:54:13.857 に答える
1

compilation-start一方、がオプションの引数を受け入れることがわかりましたmode。これは、コンパイル バッファーのメジャー モードになります。したがって、 から派生したメジャー モードを作成compilation-modeし、適切なバッファにフックされたフィルタ関数をそこに定義できます。

唯一の問題は、引数を onsgml-validateに設定できないことですが、それは別の問題です。modecompilation-start

(もちろん、これが究極の解決策だとは思いません。)

于 2009-05-13T11:10:41.470 に答える