Что я ' d like to do - разумно предварительно установить значение по умолчанию в локальном буфере для строкового аргумента функции compile
.
Прямо сейчас compile.el по умолчанию использует "make" в качестве команды. Я могу установить это, установив команду компиляции
. Я даже могу сделать эту переменную буфером локальной. Это работает, если мне всегда нужно одно и то же статическое значение.
Но я бы хотел разумно выбрать команду компиляции
в зависимости от содержимого буфера, имени буфера, содержимого содержащего каталога файла (если есть) и фаза луны. В основном я хочу контролировать значение по умолчанию, а затем разрешать интерактивному пользователю переопределить это предварительно установленное значение.
Я надеялся сделать это с помощью before-advice. Но это работает не так, как я ожидал.
Читая файл advice.el, Я вижу
Предположим, что функция / макрос / subr / special-form имеет N частей перед советом, M частей вокруг совета и K частей после совета. Предполагая, что ни один из советов не защищен, его рекомендуемое определение будет выглядеть следующим образом (индексы формы тела соответствуют положению соответствующего совета в этом классе рекомендаций):
([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
для любого буфера? Идеи приветствуются.