Что я хотел бы сделать, так это интеллектуально предварительно установить локальное значение буфера для строкового аргумента по умолчанию для функции compile
.
Прямо сейчас compile.el по умолчанию использует "make" в качестве команды. Я могу установить это, установив compile-command
. Я даже могу сделать эту переменную буфера локальным. Это работает, если я хочу одно и то же статическое значение, всегда.
Но я бы хотел разумно выбрать compile-command
в зависимости от содержимого буфера, имени буфера, содержимого каталога, в котором находится файл (если есть), и фазы луны. По сути, я хочу контролировать значение по умолчанию, а затем позволить интерактивному пользователю переопределить это предварительно установленное значение.
Я надеялся сделать это с предварительным советом. Но это не работает, как я ожидал.
Читая файл 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-интерактивно 'вызывает интерактивную форму перед вызовом предварительного совета или какого-либо совета.
И, когда я добавляю совет к compile
, наблюдаемое мной поведение подтверждает это. Рекомендация вызывается после обработки интерактивной формы. Интерактивная форма предлагает строку, которую нужно использовать для компиляции, за до мой совет получает возможность угадать, какой она должна быть, и предварительно установить ее.
Итак ...
- как мне заставить мой код работать до интерактивной формы? может совет сделать это? Если не совет, что-то еще? или
- как я могу динамически предварительно установить
compile-command
для любого буфера?
Идеи приветствуются.