Ferme tous les tampons en plus de celui en cours dans Emacs

Comment puis-je fermer tout le tampon sauf Emacs actuel? Semblable à la fonction “Fermer les autres tabs” dans les navigateurs Web modernes?

Pour une approche plus manuelle, vous pouvez répertorier tous les tampons avec Cx Cb , marquer les tampons dans la liste pour les supprimer avec d , puis utiliser x pour les supprimer.

Je recommande également de remplacer les tampons de liste par un ibuffer plus avancé: (global-set-key (kbd "Cx Cb") 'ibuffer) . Ce qui précède fonctionnera avec ibuffer, mais vous pouvez également le faire:

m (marquez le tampon que vous souhaitez conserver)
t (marques de bascule)
D (tue tous les tampons marqués)

J’utilise également cet extrait du wiki d’Emacs, ce qui rationaliserait davantage 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: Killing Buffers :

 (defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (remove-if-not 'buffer-file-name (buffer-list))))) 

Edit : mis à jour avec les commentaires de Gilles

Il n’y a pas de moyen directement dans emacs pour faire cela.

Vous pourriez écrire une fonction pour ce faire. Ce qui suit fermera tous les tampons:

 (defun close-all-buffers ()
   (interactif)
   (mapc 'kill-buffer (liste tampon)))

Il y a une commande intégrée mx kill-some-buffers (j’utilise 24.3.50) Dans mon interface graphique nextstep (pas essayé dans un terminal mais je suis sûr que c’est similaire), vous pouvez ensuite approuver les tampons à tuer.

  (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 prévu.

Et après avoir lu la réponse de @ Starkey, je pense que ce sera mieux:

 (defun only-current-buffer () (interactive) (mapc 'kill-buffer (cdr (buffer-list (current-buffer))))) 

(buffer-list (current-buffer)) renverra une liste contenant tous les tampons existants, avec le tampon actuel en tête de la liste.

Ceci est ma première réponse sur StackOverflow. J’espère que cela aide 🙂

J’ai trouvé cette solution la plus simple. Cela supprime tous les tampons sauf celui en cours. Vous devez append ce code à votre fichier .emacs

 (defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (buffer-list)))) 

Bien sûr, vous l’utilisez avec Mx kill-other-buffers RET ou vous collez le code suivant dans le fichier .emacs et appuyez simplement sur Cx Cb

 (global-set-key (kbd "Cx Cb") 'kill-other-buffers) 

Vous pouvez aussi aimer celui-ci – tuez tous les tampons sauf celui en cours, * Messages * et * scratch * (ce qui est pratique, je les appelle “toolkit”), fermez également les fenêtres redondantes et vivez quelle fenêtre courante tampon.

 (defun my/kill-all-buffers-except-toolbox () "Kill all buffers except current one and toolkit (*Messages*, *scratch*). Close other windows." (interactive) (mapc 'kill-buffer (remove-if (lambda (x) (or (ssortingng-equal (buffer-name) (buffer-name x)) (ssortingng-equal "*Messages*" (buffer-name x)) (ssortingng-equal "*scratch*" (buffer-name x)))) (buffer-list))) (delete-other-windows))