Puis-je définir un fichier particulier pour accepter automatiquement et silencieusement les modifications?

9

Autrement dit, puis-je spécifier pour un fichier particulier que je ne souhaite pas qu'Emacs m'informe que le fichier a changé sur le disque et me demande si j'accepte ou non les modifications? Je ne veux pas le faire globalement, juste pour les fichiers que je connais seront souvent modifiés en dehors d'Emacs (en particulier, les fichiers Org liés au calendrier).

emacsomancer
la source

Réponses:

8

Vous pouvez le faire pour un tampon spécifique avec M-x auto-revert-mode( manuel ). Pour les tampons de fichiers, cela vérifiera toutes les auto-revert-intervalsecondes (par défaut 5) pour les changements et mettra à jour le tampon du disque automatiquement.

Votre titre indique "un fichier particulier" tandis que le corps de votre question mentionne un type de fichier (fichiers org). En fonction de votre situation, voici quelques façons de définir ce mode pour obtenir l'effet souhaité de manière persistante. Les méthodes antérieures sont sans doute plus propres et plus efficaces si elles s'appliquent à votre cas d'utilisation particulier.

Si vous savez que vous le souhaitez pour chaque fichier d'un certain type, pensez à ajouter un hook de mode à votre configuration init.

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

Si vous savez que vous le souhaitez pour tout dans un certain répertoire, envisagez de le définir dans .dir-locals.el à l'emplacement approprié, en veillant à VCS-ignorer le fichier de paramètres locaux, le cas échéant. Cet exemple s'applique à tous les tampons en mode organisation pour les fichiers sous le même répertoire (et sous-répertoires). Vous pouvez également exécuter M-x add-dir-local-variablepour qu'Emacs génère et enregistre automatiquement pour vous.

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

Si aucune des deux approches ci-dessus ne vous convient, envisagez un fichier de variables locales défini dans chaque fichier. Le moyen le plus court et le plus général de définir l'un de ces paramètres consiste à inclure les éléments suivants dans la première ligne du fichier cible:

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

Dans les fichiers source, le texte peut suivre un délimiteur de commentaire (//, #, etc.). Vous pouvez exécuter M-x add-file-local-variable-proplinepour qu'Emacs génère cela automatiquement pour vous, ou M-x add-file-local-variablepour un format qui utilise le bas de votre fichier au lieu du haut.

Utilisez cette méthode uniquement si vous ne partagez pas le fichier avec quelqu'un d'autre. Du manuel GNU :

C'est souvent une erreur de spécifier des modes mineurs de cette façon. Les modes mineurs représentent les préférences de chaque utilisateur et il peut être inapproprié d'imposer vos préférences à un autre utilisateur susceptible de modifier le fichier. Si vous souhaitez activer ou désactiver automatiquement un mode mineur en fonction de la situation, il est souvent préférable de le faire dans un hook de mode majeur.

Mian
la source
2
N'est-ce pas (auto-revert-mode 1)une manière canonique d'activer un mode mineur au lieu de setq?
mbork
1
Oui tu as raison. Nettoyer cet exemple en une seconde. Merci.
Mian
1
Je vous en prie. (Cela dit, AFAIU, les variables locales de fichier sont les mieux adaptées au cas d'utilisation d'OP.)
mbork
1
Vous pouvez avoir raison. OMI, cela dépend des détails de leur organisation de fichiers. Si les fichiers dont ils savent qu'ils seront fréquemment modifiés en dehors d'emacs sont tous des fichiers org, ou se trouvent tous au même endroit (par exemple un répertoire Dropbox), une approche basée sur un mode ou un répertoire pourrait être plus propre et plus facile, et évitera encombrant leurs fichiers en prime.
Mian
2
Pour interfacer avec ces deux méthodes, il existe add-file-local-variableet add-dir-local-variable.
Sean Allred
3

Oui. Mettez ceci à la fin de votre dossier.

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

Cela suppose le mode Org, pour les autres modes, utilisez des commentaires dans la langue utilisée comme expliqué dans le lien ci-dessous.

Remarque: voir Variables locales dans les fichiers dans le manuel pour le fond, les informations de sécurité et une mise en garde que ce n'est pas toujours une bonne idée. En outre, la section sur le rétablissement indique, par exemple, comment modifier l'intervalle par défaut de 5 secondes pour le rétablissement automatique.

mbork
la source
Faut-il absolument que ce soit à la fin? J'ai un script qui génère des fichiers .org et je l'ai fait mettre près du début - ce qui ne semble pas fonctionner ....
emacsomancer
1
Oui, voyez le lien. Et voyez d'autres réponses pour une solution de première ligne.
mbork