私がしたいのは、compile
関数の文字列引数のバッファローカル既定値をインテリジェントに事前設定することです。Emacs/Emacs Lisp:インタラクティブフォームの前にアドバイスを挿入できますか?コンパイルコマンドをインテリジェントにプリセットする方法は?
現在、compile.elのデフォルトでは、コマンドとして「make」が使用されています。これは、compile-command
に設定することで設定できます。私はその変数をバッファローカルにすることさえできます。私は常に同じ静的な値をしたい場合、それは動作します。
しかし、バッファの内容、バッファの名前、ファイルの格納ディレクトリの内容(存在する場合)、および月の位相に応じて、compile-command
をインテリジェントに選択したいと思います。基本的には、デフォルト値を制御し、対話型ユーザーがその事前設定値をオーバーライドできるようにします。
私は事前アドバイスでこれを行うことを望んでいました。しかし、これは期待どおりに機能していません。 advice.elファイルを読み込み
は、私が見る
は、関数/マクロ/ subrの/特殊フォームはアドバイス前のN個、アドバイスした後の周りのアドバイスやK枚のM個を持っていると仮定します。アドバイスのどれもが保護されていないと仮定すると、その助言定義は(体の形指数は、そのアドバイスクラスのそれぞれの助言の位置に相当)のようになります。
([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 'はbefore adviceを呼び出す前にインタラクティブフォームを呼び出します。
そして、私が助言をcompile
に追加するとき、私が観察する動作はこれを確認します。対話形式が処理されると、の後にアドバイスが呼び出されます。対話形式では、の前にコンパイルに使用する文字列が表示されます。私のアドバイスは、それが何であるかを推測して事前に設定する機会を得ます。
そう...
- は、どのように私は私のコードは、インタラクティブフォームの前に実行するために得ることができますか?アドバイスはこれを行うことができますか?アドバイスではない場合、何か他に?または
compile-command
どのバッファに動的に事前設定できますか?
アイデアありがとうございます。
行動は理にかなっています。 (興味がある人は、Treyの答えを参照して、インタラクティブフォームにアドバイスする方法を示してください) – phils