Emacs 24.4 поставляется с новой системой рекомендаций. NEWS
Файл говорит:
** Новый пакет
nadvice.el
предлагает более легкие консультации. Это слоистый как:***
add-function
/remove-function
, который можно использовать для добавления / удаления кода в любом месте выполнения функций, например, в процессных фильтрах или<foo>-function
хуках.***
advice-add
/advice-remove
добавить / удалить совет по именованной функции, так же как иdefadvice
делает.
Вопрос: Каковы практические преимущества и последствия этого нового пакета?
Меня особенно интересуют ответы на следующие вопросы:
Если я использую только советы по настройке Emacs (в отличие от написания дополнительных пакетов), мне нужно переключиться на новую систему? Это заменит старую систему в некоторый момент?
Что именно я могу сделать с новой системой, с которой я не могу справиться
defadvice
?Какое значение имеет способность «добавлять / удалять код в любом месте, несущем функцию»?
:around
советы (или:filter-args
или:filter-result
совет) , чтобы получить тот же эффект.Одним из явных преимуществ советов, являющихся обычными функциями, является то, что вы можете перейти к определению с помощью
find-function
.В настоящее время при просмотре справки для рекомендованной функции (в новом стиле) она предоставляет ссылку на справку для функции совета и оттуда ссылку на источник (как обычно для справки по функции).
Старая система предоставляла встроенный совет docstring, но не было никакого способа увидеть код (я обычно прибегал к нему
rgrep
).(Лично я хотел бы увидеть сочетание старых и новых подходов к отображению справки, поскольку мне нравилось иметь встроенную строку документации, но я уверен, что это возможно в будущем.)
источник
defadvice
делает. Смотрите этот отчет об ошибках Emacs . Это недостаток.Из заголовка файла:
Насколько я понимаю, основная цель - быть проще, чем старая система рекомендаций, а не иметь больше возможностей. Читая документы, кажется, что он
advice-add
содержит подмножествоdefadvice
функциональных возможностей, в то же времяadd-function
содержит некоторые полезные функции для консультирования нетрадиционных функций, таких как фильтры процессов (что, вероятно, было возможно сdefadvice
, но я не уверен, как).Насколько я знаю,
defadvice
это официально не рекомендуется, так что вы можете свободно использовать его сейчас (и если вы автор пакета, вы, вероятно, захотите продолжать использовать его до тех пор, пока 24.4 не станет более широко распространенным). Однако, похоже, что авторы Emacs хотят полностью перейти на новую систему, так что, вероятно, имеет смысл медленно переключаться.источник
defadvice
там (и будет продолжать).Одна вещь , которую я не видел , упомянутые здесь - хотя в некоторых отношениях это связано с более простой подход (лучше модульности и «клей») «новой» системы советов, которые уже были упомянуты в других ответах - это: гораздо проще добавить, объединить, удалить, изменить порядок и т. д.
Это даже возможно сделать интерактивно, динамически, хотя nadvice нуждается в небольшой помощи, чтобы облегчить это. Я не знаю другого использования nadvice таким образом (интерактивная композиция советов), но есть по крайней мере одно такое приложение. Я использую его в Isearch + , чтобы вы могли добавлять и удалять комбинации произвольных предикатов (фильтров) фильтра Isearch во время поиска.
Точно так же, как вы постепенно меняете шаблон поиска, так вы можете уточнить поиск на лету, используя несколько фильтров.
Фильтрация по поиску осуществляется с помощью переменной
isearch-filter-predicate
, которая уже давно доступна. И все же фильтры Isearch определяются не часто. Они обычно статичны и предопределены для данного контекста (например, Wdired). Пользователям не очень легко определить и использовать их, по крайней мере, в интерактивном режиме.Существует только одна переменная,
isearch-filter-predicate
, поэтому изменение фильтрации действительно означает изменение в единый предикат фильтра, который составляет сочинял функции, совмещая предикаты, чтобы детализировать, расширить или иным образом модифицируют поиск.Но это именно то, что nadvice хорош в. В общем, nadvice настолько удобен для объединения функций, что позволяет легко улучшить интерактивную фильтрацию поиска. (См. Dynamic Isearch Filtering для получения дополнительной информации об этом.)
источник