Parfois, je tue accidentellement un tampon et souhaite le rouvrir, tout comme CSt pour annuler l'onglet fermé dans Firefox, mais il n'y a pas de commande intégrée dans Emacs, defun undo-kill-buffer
dans 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)))))
ne fonctionne pas du tout. Si vous connaissez elisp, comment résoudre ce problème?
S'il peut afficher une liste des mémoires tampons fermées et que je peux en choisir un pour les rouvrir, ce serait mieux.
buffers
undo
kill-buffer
CodyChan
la source
la source
Réponses:
Voici une autre alternative simple qui ne nécessite pas
recentf
. Accrocher la première fonction enkill-buffer-hook
poussera le nom de fichier associé au tampon dans une liste. (Notez que si vous supprimez un tampon qui ne visite pas un fichier, il disparaît définitivement.) Cette dernière fonction supprime ce fichier de la liste et le visite:Notez qu’il
killed-file-list
s’agit d’une liste. Vous pouvez, par exemple, écrire une fonction plus complexe pour parcourir cette liste, plutôt que la simple décrite ici: c’est à vous de décider combien vous voulez en faire.EDIT: désolé, j'ai raté la dernière disposition de votre Q sur le fait de vouloir une liste de fichiers parmi lesquels choisir. La fonction suivante est légèrement plus sophistiquée que la version ci-dessus dans la mesure où elle
completing-read
vous permet de spécifier le fichier que vous souhaitez supprimer. Si vous utilisez quelque chose du genreido
, cela vous permettra de parcourir tous les fichiers que vous avez supprimés au cours de la session en cours, les plus récents par défaut. Notez que cela suppose que vous avez déjà requiscl-lib
:la source
Je voudrais vous demander: "Voulez-vous vraiment le tuer?". En effet, tuer un tampon est une chose tellement courante dans le monde Emacs, mais une fois tué, le tampon est parti, et comme votre question le démontre, ce n'est pas toujours souhaitable.
Cependant, nous pouvons choisir une autre méthode, pour que vous n'ayez jamais besoin de restaurer la mémoire tampon tuée - préférez simplement enterrer à tuer. Jetez un coup d'œil au paquet Kill ou Bury Alive , il est disponible via MELPA .
De la description du paquet:
la source
J'utilise cette solution depuis ce poste SO et cela fonctionne bien.
La solution est élégante mais pas parfaite. il stocke une liste des tampons actifs et renvoie le premier fichier de la liste recentf qui n'appartient pas à la liste des tampons actifs.
la source
Vous devez allumer
recentf-mode
. Pour ce faire, lancezM-x recentf-mode
. Ensuite, la fonction risque de ne pas fonctionner tant que vous n'avez pas ouvert ou supprimé de nouveaux tampons. Je ne pense pas que vous aurezrecentf-list
rempli.Si vous voulez que ceci soit activé quand Emacs démarre, mettez ceci dans votre fichier init:
Vous pouvez ensuite mettre le que
defun
vous avez trouvé dedans et le lier à une clé, si vous le souhaitez.Un inconvénient de ce mode semble être que le mode recentf est conçu pour suivre les
opened
fichiers, pas ceux qui ont été tués. Ainsi, si vous exécutez la fonction deux fois, elle ne rouvrira pas votre deuxième fichier récemment tué.la source
(recentf-mode 1)
avec l'argument explicite, de sorte que quelqu'un réévaluant son fichier init sous Emacs 23 ne finisse pas par désactiver le mode.ErgoEmacs a une fonction
close-current-buffer
qui garde notamment une liste des tampons récemment fermés:Donc, en utilisant ceux-ci, on peut rouvrir ce tampon fermé de session avec
la source
Eh bien, je ne suis pas un vétéran d’Emacs, et peut-être que cela n’est peut-être devenu disponible que dans les versions récentes. Je sais que j'arrive quelques années plus tard, mais peut-être que cela peut être utile pour les autres, car ma recherche m'a amené ici.
Je suis sur Emacs v25.2.1,
recentf
est déjà disponible ici et a une fonction prête qui fait ce dont vous avez besoin. Je l'avais déjà activé par le passé sur les anciennes versions, alors j'ai.emacs
:Et cela a parfaitement fonctionné pour moi. Bien sûr, changez le raccourci pour ce qui vous plait le plus.
la source