私がやりたいことは、compile
関数への文字列引数のバッファローカルデフォルト値をインテリジェントに事前設定することです。
現在、compile.el はデフォルトでコマンドとして「make」を使用しています。これは、設定で設定できますcompile-command
。その変数をバッファローカルにすることもできます。これは、常に同じ静的値が必要な場合に機能します。
compile-command
しかし、バッファの内容、バッファの名前、ファイルを含むディレクトリの内容 (存在する場合)、および月の満ち欠けに応じて、インテリジェントに選択したいと思います。基本的に、デフォルト値を制御してから、インタラクティブなユーザーがその事前設定値をオーバーライドできるようにします。
私は事前のアドバイスでこれを行うことを望んでいました。しかし、これは私が期待したように機能していません。
advice.el ファイルを読むと、なるほど
function/macro/subr/special-form に N 個の before アドバイス、M 個の around アドバイス、K 個の after アドバイスがあるとします。どのアドバイスも保護されていないと仮定すると、アドバイスされた定義は次のようになります (body-form インデックスは、そのアドバイス クラス内のそれぞれのアドバイスの位置に対応します)。
([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))
これが私に言っていることは、アドバイスされた関数がインタラクティブな場合、「call-interactively」はビフォア アドバイスまたはその他のアドバイスを呼び出す前にインタラクティブ フォームを呼び出すということです。
そして、アドバイスを に追加するとcompile
、私が観察した動作がこれを確認します。アドバイスは、インタラクティブ フォームが処理された後に呼び出されます。インタラクティブなフォームは、コンパイルに使用する文字列を提案してから、私のアドバイスがそれを推測して事前に設定する機会を得る.
そう...
- インタラクティブフォームの前にコードを実行するにはどうすればよいですか? アドバイスはこれを行うことができますか?アドバイスではない場合、何か他のものはありますか?また
compile-command
任意のバッファを動的に事前設定するにはどうすればよいですか?
アイデアを歓迎します。