Comment fermer tout sauf le tampon actuel dans Emacs ? Similaire à la fonction "Fermer les autres onglets" des navigateurs web modernes ?
Comment puis-je revenir de ibuffer
? @phils
Comment fermer tout sauf le tampon actuel dans Emacs ? Similaire à la fonction "Fermer les autres onglets" des navigateurs web modernes ?
Pour une approche plus manuelle, vous pouvez lister tous les tampons avec C-x C-b marquer les tampons dans la liste pour la suppression avec d et ensuite utiliser x pour les enlever.
Je recommande également de remplacer les list-buffers par le plus avancé ibuffer : (global-set-key (kbd "C-x C-b") 'ibuffer)
. Ce qui précède fonctionnera avec ibuffer, mais vous pouvez aussi faire ceci :
m (marquez le tampon que vous souhaitez conserver)
t (marques de basculement)
D (tuer tous les tampons marqués)
J'utilise également cet extrait du Wiki Emacs, qui simplifie encore plus cette approche manuelle :
;; Ensure ibuffer opens with point at the current buffer's entry.
(defadvice ibuffer
(around ibuffer-point-to-most-recent) ()
"Open ibuffer with cursor pointed to most recent buffer name."
(let ((recent-buffer-name (buffer-name)))
ad-do-it
(ibuffer-jump-to-buffer recent-buffer-name)))
(ad-activate 'ibuffer)
De EmacsWiki : Tuer les tampons :
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer
(delq (current-buffer)
(remove-if-not 'buffer-file-name (buffer-list)))))
Editar : mise à jour avec les commentaires de Gilles
Les tampons désordonnés ne sont pas fixés buffer-file-name
et donc l'appel à remove-if-not
dans l'exemple ci-dessus préservera les tampons durs (ainsi que les tampons de scratch, les tampons de terme, les tampons d'aide, etc, tout ce qui ne visite pas un fichier). Je ne peux pas penser à un test facile qui fermerait à la fois les tampons de fichiers et les tampons directs, vous auriez besoin d'une seconde invocation de mapc avec un test différent pour les tampons directs.
Une simple modification pour supprimer les tampons également désordonnés (defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (remove-if-not '(lambda (x) (or (buffer-file-name x) (eq 'dired-mode (buffer-local-value 'major-mode x)))) (buffer-list)))))
(defun only-current-buffer ()
(interactive)
(let ((tobe-killed (cdr (buffer-list (current-buffer)))))
(while tobe-killed
(kill-buffer (car tobe-killed))
(setq tobe-killed (cdr tobe-killed)))))
Cela fonctionne comme vous l'aviez prévu.
Et après avoir lu la réponse de @Starkey, je pense que ceci sera mieux :
(defun only-current-buffer ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))
(buffer-list (current-buffer)) retournera une liste qui contient tous les tampons existants, avec le tampon actuel en tête de liste.
C'est ma première réponse sur StackOverflow. J'espère que cela vous aidera :)
Et c'est ainsi, mes amis, que des solutions élégantes naissent du partage des idées entre les gens.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.