O Emacs 24.4 vem com um novo sistema de aconselhamento. O NEWS
arquivo diz:
** O novo pacote
nadvice.el
oferece facilidades de aconselhamento mais leves. Está em camadas como:***
add-function
/remove-function
, que pode ser usado para adicionar / remover código em qualquer local de realização de funções, como filtros de processo ou<foo>-function
ganchos.***
advice-add
/advice-remove
para adicionar / remover um conselho sobre uma função nomeada, assim comodefadvice
faz.
P: Quais são os benefícios e implicações práticas deste novo pacote?
Estou especialmente interessado em respostas que abordem os seguintes pontos:
Se eu estiver usando apenas conselhos para personalizar o Emacs (em vez de escrever pacotes complementares), preciso mudar para o novo sistema? Ele substituirá o sistema antigo em algum momento?
O que exatamente posso fazer com o novo sistema que não consigo realizar
defadvice
?Qual é o significado de ser capaz de "adicionar / remover código em qualquer local de realização de funções"?
:around
conselhos (:filter-args
ou:filter-result
conselhos) para obter o mesmo efeito.Um dos benefícios claros de o conselho ser funções normais é que você pode visitar uma definição com
find-function
.No momento, ao visualizar a ajuda para uma função recomendada (novo estilo), ele fornece um link para a ajuda da função de aconselhamento e, a partir daí, um link para a fonte (como de costume para a ajuda da função).
O sistema antigo fornecia as orientações em linha, mas não havia como ver o código (geralmente eu recorria
rgrep
).(Pessoalmente, gostaria de ver uma combinação das abordagens antiga e nova para exibir a ajuda, pois gostei de ter a sequência de caracteres em linha, mas tenho certeza de que isso é possível).
fonte
defadvice
faz. Veja este relatório de erros do Emacs . Isso é uma falha.No cabeçalho do arquivo:
Na minha leitura, o objetivo principal é ser mais simples que o antigo sistema de aconselhamento, não ter mais recursos. Lendo os documentos, parece que
advice-add
contém um subconjunto dedefadvice
funcionalidades, enquantoadd-function
contém algumas funcionalidades interessantes para aconselhar funções não tradicionais, como filtros de processo (o que provavelmente foi possível comdefadvice
, mas não sei como).Até onde eu sei,
defadvice
não é oficialmente reprovado, portanto, você deve se sentir à vontade para continuar usando-o por enquanto (e se você é um autor de pacote, provavelmente desejará continuar usando-o até que o 24.4 se torne mais amplamente adotado). No entanto, parece que os autores do Emacs desejam migrar completamente para o novo sistema, então provavelmente faz sentido mudar lentamente.fonte
defadvice
por aí (e continuará a existir).Uma coisa que eu não vi mencionado aqui - embora em alguns aspectos, é devido à abordagem mais simples (melhor modularidade e "cola") do "novo" sistema de aconselhamento, que tem sido mencionado em outras respostas - é esta: é muito mais fácil adicionar, combinar, remover, reordenar etc. etc.
É até possível fazê-lo de forma interativa e dinâmica, embora o nadvice precise de uma pequena ajuda para facilitar isso. Não conheço outro uso do nadvice dessa maneira (composição interativa de conselhos), mas há pelo menos um desses aplicativos. Uso-o no Isearch + , para permitir que você adicione e remova combinações de predicados de filtros arbitrários do Isearch (filtros) durante a pesquisa.
IOW, assim como você altera gradualmente seu padrão de pesquisa, para refinar sua pesquisa rapidamente usando vários filtros.
A filtragem Isearch é feita usando a variável
isearch-filter-predicate
, que já está disponível há um bom tempo. No entanto, os filtros Isearch não são definidos com frequência. Eles são tipicamente estáticos e predefinidos para um determinado contexto (por exemplo, Wdired). Não é muito fácil para os usuários defini-los e usá-los, pelo menos de forma interativa.Existe apenas uma variável,
isearch-filter-predicate
portanto, alterar a filtragem realmente significa alterar o predicado de filtro único, que equivale a funções de composição, combinação de predicados, para restringir, expandir ou modificar a pesquisa.Mas é exatamente nisso que nadvice é bom. Em suma, o nadvice é tão útil para combinar funções que pode facilitar o refinamento interativo da filtragem de pesquisa. (Consulte Dynamic Isearch Filtering para obter mais informações sobre isso.)
fonte