Lorsque je travaille sur un projet sous contrôle de version avec git, je veux souvent faire certaines choses dans un shell qui affectent un grand nombre de mes fichiers ouverts, puis rétablir tous les tampons que j'ai ouverts pour m'assurer que je n'encombre pas accidentellement la nouvelle version avec tout ce que j'avais ouvert. Je sais que cela magitpeut être utile ici, mais je suis habitué à mon flux de travail dans le shell et je voudrais le garder pour l'instant. Donc, à la place, j'aimerais rétablir tous les tampons ouverts, et peut-être fermer ceux qui ont cessé d'exister (par exemple à cause git checkoutd'une branche qui n'a plus ce fichier).
J'ai l'extrait de code Elisp suivant que j'ai extrait d'une recherche Google:
(defun revert-all-buffers ()
"Refreshes all open buffers from their respective files"
(interactive)
(let* ((list (buffer-list))
(buffer (car list)))
(while buffer
(when (and (buffer-file-name buffer)
(not (buffer-modified-p buffer)))
(set-buffer buffer)
(revert-buffer t t t))
(setq list (cdr list))
(setq buffer (car list))))
(message "Refreshed open files"))
Mais cette pause si elle frappe une erreur dans l' un de mes fichiers ouverts, à savoir quand revenir B1, B2, B3, ..., Bnune erreur en essayant de revenir B2empêche B3- Bnd'être inversé.
Comment puis-je dire à emacs d'ignorer les erreurs qui apparaissent dans ce cas? Je ne veux pas l'utiliser global-auto-revert-modeparce que chaque retour déclenche des tâches lourdes comme mon vérificateur de saisie automatique et de syntaxe réanalysant le fichier, suspendant emacs pendant une seconde environ.
C-x s
"file no longer exists".. aha! ma version corrige cela :) Je le publierai sous peu.
B2tampon dans votre exemple. J'utilise une fonction très similaire (très probablement dérivée de cet extrait) et cela a bien fonctionné.