Comment puis-je faire ibuffer actualiser automatiquement la liste des tampons?

11
  1. M-x ibuffer
  2. Sélectionnez un tampon
  3. Tuez ce tampon

Une fois le tampon tué, le tampon ibuffer réapparaît, mais il affiche toujours le nom du tampon tué à l'étape 3.

Est-il possible que ibuffer actualise automatiquement la liste des tampons?

Kevin Wright
la source
Si vous appuyez à nouveau sur Ctrl-x Ctrl-b dans ibuffer, il est actualisé automatiquement.
ofenerci
@ofenerci Pour moi (v25.2.2) Cx Cb ouvre une fenêtre supplémentaire * Liste des tampons * avec la liste actuelle des tampons, mais le * Ibuffer * reste inchangé
user2740

Réponses:

13

L'exécution de la commande ibuffer-auto-modedans un tampon Ibuffer permet d'actualiser l'affichage après chaque commande interactive.

Il ne semble pas y avoir de moyen direct de l'activer automatiquement. Vous pouvez mettre ceci dans votre fichier init:

(add-hook 'ibuffer-mode-hook (lambda () (ibuffer-auto-mode 1)))
Gilles 'SO- arrête d'être méchant'
la source
1
Cette solution acceptée rompt la sélection dans un autre tampon. Lorsque j'active ce hook, si je fais une sélection sur n'importe quel tampon, puis que j'invoque ibuffer, la sélection est perdue.
nevhewtom
8

La bonne façon de le faire est d'introduire un support ibufferpour auto-revert-mode. Ceci peut être réalisé en définissant buffer-stale-functionpour ces tampons. Sans doute, puisque buffer-menuprend en charge cette fonctionnalité, il serait bon de l'avoir en amont ibufferégalement, mais cela ne semble pas être le cas pour l'instant.

Quoi qu'il en soit, voici une façon de le faire:

(defun my-ibuffer-stale-p (&optional noconfirm)
  ;; let's reuse the variable that's used for 'ibuffer-auto-mode
  (frame-or-buffer-changed-p 'ibuffer-auto-buffers-changed))

(defun my-ibuffer-auto-revert-setup ()
  (set (make-local-variable 'buffer-stale-function)
       'my-ibuffer-stale-p)
  (set (make-local-variable 'auto-revert-verbose) nil)
  (auto-revert-mode 1))

(add-hook 'ibuffer-mode-hook 'my-ibuffer-auto-revert-setup)

Remarque: en général, il faudrait définir une valeur pour revert-buffer-function, mais le fait ibufferdéjà (il est défini sur ibuffer-update)

Sigma
la source
1
Y a-t-il une raison de préférer cette méthode à celle-ci ibuffer-auto-mode?
nispio
1
Bien auto-revert-modeutilise des minuteries et ibuffer-auto-modeutilise post-command-hook, donc il y a une différence évidente ; mais je ne pouvais pas dire si l'un était préférable à l'autre.
phils
4
@nispio Je suppose que j'ai tendance à préférer les solutions génériques aux solutions ad hoc. Donc, dans ce sens, faire en sorte que les ibuffertampons se comportent comme les autres lorsqu'il s'agit de rafraîchir du contenu obsolète me semble plus propre. De plus, je n'aime généralement pas abuser de post-command-hookcette façon: c'est vraiment exagéré lorsque vous faites quelque chose de complètement indépendant du tampon. Enfin, si une sorte de frappe est nécessaire pour que le contenu soit actualisé, il pourrait tout aussi bien l'être g, ce qui est le moyen explicite de mettre à jour le contenu. Mais d'accord, c'est probablement un problème philosophique :)
Sigma
1
Lorsque j'utilise cette méthode, je reçois toujours un message Reverting buffer `*Ibuffer*'. Le message est intrusif car il continue de m'interrompre lorsque je travaille dans le mini-tampon. Le message s'affiche, que le ibuffertampon soit visible ou non.
nispio
1
@nispio (setq auto-revert-verbose nil), potentiellement localement
Sigma