Cuando trabajo en un proyecto bajo control de versiones con git, a menudo quiero hacer algunas cosas en un shell que afectan a muchos de mis archivos abiertos, y luego revertir cada búfer que tengo abierto para asegurarme de no bloquear accidentalmente la nueva versión con lo que tenga abierto. Sé que magitpuede ser útil aquí, pero estoy acostumbrado a mi flujo de trabajo en el shell y me gustaría mantenerlo por ahora. Entonces, en cambio, me gustaría revertir todos los búferes abiertos, y tal vez cerrar cualquiera que haya dejado de existir (por ejemplo, debido a git checkoutuna rama que ya no tiene ese archivo).
Tengo el siguiente fragmento de elisp que tomé de una búsqueda en 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"))
Pero esto rompe si se realiza un error en una de mis archivos abiertos, es decir, cuando se restituyan B1, B2, B3, ..., Bnun error al tratar de revertir B2previene B3- Bnse revirtió a partir.
¿Cómo puedo decirle a emacs que ignore cualquier error que aparezca en este caso? No quiero usar global-auto-revert-modeporque cada reversión desencadena algunas cosas pesadas como mi autocompletado y el verificador de sintaxis que vuelven a analizar el archivo, colgando emacs por un segundo más o menos.
C-x s
"file no longer exists".. aha! mi versión corrige eso :) Lo publicaré en breve.
B2búfer en su ejemplo? Utilizo una función muy similar (muy probablemente derivada de este fragmento) y ha funcionado bien.