A veces, accidentalmente mato un búfer y quiero volver a abrirlo, al igual que CSt para deshacer la pestaña cerrada en Firefox, pero no hay un comando incorporado en Emacs, defun undo-kill-buffer
en http://www.emacswiki.org/RecentFiles :
(defun undo-kill-buffer (arg)
"Re-open the last buffer killed. With ARG, re-open the nth buffer."
(interactive "p")
(let ((recently-killed-list (copy-sequence recentf-list))
(buffer-files-list
(delq nil (mapcar (lambda (buf)
(when (buffer-file-name buf)
(expand-file-name (buffer-file-name buf)))) (buffer-list)))))
(mapc
(lambda (buf-file)
(setq recently-killed-list
(delq buf-file recently-killed-list)))
buffer-files-list)
(find-file
(if arg (nth arg recently-killed-list)
(car recently-killed-list)))))
no funciona en absoluto Si conoce elisp, ¿cómo resolver este problema?
Si puede mostrar una lista de los buffers cerrados y puedo elegir uno de ellos para reabrir, sería mejor.
buffers
undo
kill-buffer
CodyChan
fuente
fuente
Respuestas:
Aquí hay otra alternativa simple que no requiere
recentf
. Conectando la primera funciónkill-buffer-hook
empujará el nombre de archivo asociado con el búfer a una lista. (Tenga en cuenta que, si elimina un búfer que no está visitando un archivo, se ha ido para siempre). La última función saca ese archivo de la lista y lo visita:Tenga en cuenta que
killed-file-list
es una lista, por lo que podría, por ejemplo, escribir una función más compleja para recorrer esa lista, en lugar de la simple que se describe aquí: depende de usted cuánto desea hacer con ella.EDITAR: lo siento, me perdí la última disposición en su Q sobre querer una lista de archivos para elegir. La siguiente función es un poco más elegante que la versión anterior en la medida en que se utiliza
completing-read
para permitirle especificar cuál de los archivos eliminados desea. Si está utilizando algo como estoido
, le permitirá recorrer todos los archivos que ha eliminado en la sesión actual, por defecto al más reciente. Tenga en cuenta que supone que ya ha requeridocl-lib
:fuente
Me gustaría preguntarte: "¿De verdad quieres matarlo?". De hecho, matar un búfer es algo muy común en el mundo de Emacs, pero una vez muerto, el búfer desaparece y, como lo demuestra su pregunta, no siempre es deseable.
Sin embargo, podemos elegir otra forma, de modo que nunca necesite restaurar el búfer muerto, solo prefiera enterrar a matar. Eche un vistazo al paquete Kill o Bury Alive , está disponible a través de MELPA .
De la descripción del paquete:
fuente
Utilizo esta solución de esta publicación SO y funciona bien.
La solución es elegante pero no perfecta; almacena una lista de buffers activos y devuelve el primer archivo de la listaf reciente que no pertenece a la lista de buffers activos.
fuente
Necesitas encenderlo
recentf-mode
. Para hacer eso, correM-x recentf-mode
. Entonces, la función podría no funcionar hasta que abra o elimine algunos buffers nuevos; No creo que lo hayasrecentf-list
completado.Si desea que esto esté habilitado cuando se inicie Emacs, colóquelo en su archivo de inicio:
Luego puede poner el
defun
que encontró allí y vincularlo a una clave, si lo desea.Una desventaja de este modo parece ser que el modo reciente está diseñado para rastrear
opened
archivos, no archivos matados. Entonces, si ejecuta la función dos veces, no volverá a abrir su segundo archivo eliminado más recientemente.fuente
(recentf-mode 1)
con el argumento explícito, de modo que alguien que reevalúe su archivo de inicio en Emacs 23 no termine desactivando el modo nuevamente.ErgoEmacs tiene una función
close-current-buffer
que en particular mantiene una lista de buffers cerrados recientemente:Por lo tanto, usar estos puede volver a abrir este búfer cerrado de sesión con
fuente
Bueno, no soy un veterano de Emacs, y tal vez esto posiblemente esté disponible solo en versiones recientes. Sé que vendré algunos años después, pero tal vez pueda ser útil para otros, ya que mi búsqueda me trajo aquí.
Estoy en Emacs v25.2.1,
recentf
ya está disponible aquí y tiene una función lista que hace lo que necesita. Ya lo activé en el pasado en versiones anteriores, así que.emacs
tengo:Y esto funcionó perfectamente para mí. Por supuesto, cambie el atajo para lo que más le agrade.
fuente