Je laisse Emacs fonctionner toute la journée, et je vais souvent faire beaucoup de manipulation du système de fichiers sur les fichiers ouverts dans les tampons Emacs. Par exemple, je pourrais passer à une branche différente dans Git qui a une structure de répertoires très différente.
Malheureusement, cela me laisse un tas de tampons ouverts qu'Emacs enregistre maintenant en tant que tampons "modifiés" faisant référence à de "nouveaux" fichiers. À moins que je ne fasse attention à les fermer manuellement chaque fois que je le fais, il est facile d'enregistrer par réflexe ces tampons, ce qui entraîne alors des fichiers parasites, probablement en double dans mon projet. Je ne peux même pas fermer emacs sans répondre à la question "enregistrer ce tampon" pour chacun.
Existe-t-il un moyen de fermer automatiquement les tampons non modifiés lorsque le fichier sous-jacent disparaît? Similaire dans l'esprit à global-auto-revert-mode
celui qui gère également lorsqu'un fichier est entièrement supprimé?
Réponses:
Je pense que quelque chose dans ce sens pourrait fonctionner:
La
buffer-backed-by-file-p
fonction vérifie si le fichier est sauvegardé par un fichier - sinon, retourne vrai, sinon retourne si le fichier de sauvegarde existe. Nous prenons ensuite la liste des tampons, filtrant tout sauf ceux qui devraient avoir un fichier de sauvegarde, mais le fichier n'existe pas, puis les tuons.Nécessite dash.el pour -remove, parce que j'étais trop paresseux pour trouver un intégré pour réaliser la même chose.
J'espère que cela t'aides!
la source
mapc
commande chaque fois que vous souhaitez supprimer les tampons non sauvegardés par des fichiers, n'est-ce pas? Ce n'est donc pas entièrement automatique. Pour une automatisation complète, vous devez soit vous assurer qu'ilmapc
s'exécute de manière répétée, soit utiliser quelque chose commeinotify
pour l'exécuter à votre place lorsqu'un fichier est réellement supprimé.(run-with-timer 60 60 (lambda () (mapc 'kill-buffer (-remove 'buffer-backed-by-file-p (buffer-list)))))
est ce que j'utiliserais comme première approximation.