Posso impostare un determinato file per accettare automaticamente e silenziosamente le modifiche?


9

Cioè, posso specificare per un determinato file che non voglio che Emacs mi informi che il file è stato modificato sul disco e che mi chiede se voglio accettare le modifiche o no? Non voglio farlo a livello globale, solo per i file che so verranno spesso modificati al di fuori di Emacs (in particolare, i file Org relativi al calendario).

Risposte:


8

È possibile farlo per un buffer specifico con M-x auto-revert-mode( manuale ). Per i buffer di file, questo controllerà ogni auto-revert-intervalsecondo (il valore predefinito è 5) per le modifiche e aggiornerà automaticamente il buffer dal disco.

Il tuo titolo dice "un determinato file" mentre il corpo della domanda menziona un tipo di file (file org). A seconda delle circostanze, ecco alcuni modi in cui è possibile impostare questa modalità per ottenere l'effetto desiderato in modo persistente. I metodi precedenti sono probabilmente più puliti ed efficienti se si applicano al tuo caso d'uso specifico.

Se sai di volerlo per ogni file di un certo tipo, prendi in considerazione l'aggiunta di un hook di modalità alla tua configurazione di init.

(add-hook 'org-mode-hook (lambda () (auto-revert-mode 1)))

Se sai di volerlo per tutto in una determinata directory, considera di impostarlo in .dir-locals.el nella posizione pertinente, assicurandoti di ignorare il file delle impostazioni locali, se appropriato. Questo esempio si applica a tutti i buffer in modalità org per i file nella stessa directory (e sottodirectory). Puoi anche eseguire M-x add-dir-local-variableEmacs per generare e salvarlo automaticamente.

(
  (org-mode . ((auto-revert-mode . 1)))
 )

Se nessuno dei due approcci precedenti funziona bene per te, considera una variabile locale di file impostata in ciascun file. Il modo più breve e generale per impostare uno di questi è includere quanto segue nella prima riga del file di destinazione:

-*- eval: (auto-revert-mode 1); -*-

Nei file di origine, il testo può seguire un delimitatore di commento (//, #, ecc.). Puoi eseguire M-x add-file-local-variable-proplineEmacs per generare questo automaticamente o M-x add-file-local-variableper un formato che utilizza la parte inferiore del file anziché la parte superiore.

Usa questo metodo solo se non condividi il file con nessun altro. Dal manuale GNU :

Spesso è un errore specificare le modalità secondarie in questo modo. Le modalità minori rappresentano le preferenze dei singoli utenti e potrebbe essere inappropriato imporre le tue preferenze a un altro utente che potrebbe modificare il file. Se si desidera abilitare o disabilitare automaticamente una modalità minore in modo dipendente dalla situazione, è spesso meglio farlo in modalità hook principale.


2
Non è (auto-revert-mode 1)un modo canonico per attivare una modalità minore anziché setq?
mbork,

1
Sì hai ragione. Ripulendo quell'esempio in un secondo. Grazie.
Mian,

1
Prego. (Detto questo, AFAIU, le variabili locali del file sono più adatte al caso d'uso di OP.)
mbork

1
Potresti avere ragione. IMO dipende dai dettagli della loro organizzazione dei file. Se i file che sanno che vengono cambiati frequentemente al di fuori di emacs sono tutti i file dell'organizzazione, o tutti si trovano nello stesso posto (ad esempio una directory Dropbox), un approccio basato sulla modalità o sulla directory potrebbe essere più semplice e pulito, ed eviterà ingombrando i loro file come bonus.
Mian,

2
Per interfacciarsi con entrambi questi metodi, ci sono add-file-local-variablee add-dir-local-variable.
Sean Allred,

3

Sì. Metti questo alla fine del tuo file.

* COMMENT Config
Local Variables:
eval: (auto-revert-mode 1)
End:

Ciò presuppone la modalità Org, per altre modalità utilizzare i commenti nella lingua utilizzata, come spiegato nel collegamento indicato di seguito.

Nota: vedere Variabili locali nei file nel manuale per lo sfondo, le informazioni sulla sicurezza e un avvertimento che questa potrebbe non essere sempre una buona idea. Inoltre, la sezione sul ripristino dice ad esempio come modificare l'intervallo predefinito di 5 secondi per il ripristino automatico.


Questo deve assolutamente essere alla fine? Ho uno script che sta generando file .org e ce l'ho messo quasi all'inizio - il che non sembra funzionare ....
emacsomancer

1
Sì, vedi il link. E vedi altre risposte per una soluzione di prima linea.
mbork,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.