Quello che mi piacerebbe fare è impostare in modo intelligente un valore predefinito locale del buffer per l'argomento stringa alla funzione compile
.Emacs/Emacs Lisp: posso inserire un consiglio prima del modulo interattivo? o come impostare in modo intelligente il comando di compilazione?
In questo momento compile.el utilizza per impostazione predefinita "make" come comando. Posso impostarlo impostando compile-command
. Posso persino rendere quella variabile buffer-local. Funziona se voglio lo stesso valore statico, sempre.
Ma mi piacerebbe selezionare in modo intelligente lo compile-command
a seconda del contenuto del buffer, del nome del buffer, del contenuto della directory contenente il file (se presente) e della fase lunare. Fondamentalmente voglio controllare il valore predefinito e quindi consentire all'utente interattivo di sovrascrivere quel valore preimpostato.
Speravo di fare questo prima di un consiglio. Ma questo non funziona come mi aspettavo.
Lettura del file advice.el, vedo
Supponiamo che una speciale forma di funzione/macro/subr/ha N pezzi di prima consulenza, M pezzi di circa consulenza e K pezzi di dopo consigli. Supponendo che nessuno dei consigli è protetto, la sua definizione consigliato sarà simile a questa (indici di corpo a forma corrispondono alla posizione del rispettivo consiglio in quella classe consulenza):
([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))
Che cosa questo mi dice è che quando la funzione consigliata è interattiva, `call-interattively 'richiama il modulo interattivo prima di invocare il consiglio precedente o qualsiasi consiglio.
E, quando aggiungo un avviso a compile
, il comportamento che osservo lo conferma. Il suggerimento viene invocato dopo il il modulo interattivo viene elaborato. Il modulo interattivo suggerisce la stringa da utilizzare per la compilazione, prima del, il mio consiglio ha la possibilità di indovinare a cosa dovrebbe essere e di pre-impostarlo.
Quindi ...
- Come posso ottenere il mio codice da eseguire prima di un formulario interattivo? può consiglio fare questo? Se non consiglio, qualcos'altro? oppure
- come è possibile preimpostare dinamicamente
compile-command
per qualsiasi buffer?
Idee apprezzate.
Il comportamento ha un senso se si considera che tutti i consigli ha accesso ai valori degli argomenti che la funzione è stata richiamata con, e che, al fine di determinare i valori in un contesto interattivo, di un formulario interattivo deve essere valutata in anticipo. (Chiunque fosse interessato dovrebbe fare riferimento alla risposta di Trey, che dimostra come consigliare il modulo interattivo.) – phils