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 magit
peut ê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 checkout
d'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
, ..., Bn
une erreur en essayant de revenir B2
empêche B3
- Bn
d'ê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-mode
parce 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.
B2
tampon dans votre exemple. J'utilise une fonction très similaire (très probablement dérivée de cet extrait) et cela a bien fonctionné.