Wie kann ich dafür sorgen, dass ibuffer die Liste der Puffer automatisch aktualisiert?


11
  1. M-x ibuffer
  2. Wählen Sie einen Puffer
  3. Töte diesen Puffer

Nachdem der Puffer beendet wurde, wird der ibuffer-Puffer erneut angezeigt, es wird jedoch weiterhin der in Schritt 3 getötete Puffername angezeigt.

Ist es möglich, dass ibuffer die Liste der Puffer automatisch aktualisiert?


Wenn Sie im ibuffer erneut Strg-x Strg-b drücken, wird die automatische Aktualisierung durchgeführt.
ofenerci

@ofenerci Für mich (v25.2.2) Cx Cb öffnet ein zusätzliches Fenster * Pufferliste * mit der aktuellen Liste der Puffer, aber der * Ibuffer * bleibt unverändert
user2740

Antworten:


12

Durch Ausführen des Befehls ibuffer-auto-modein einem Ibuffer-Puffer wird die Anzeige nach jedem interaktiven Befehl aktualisiert.

Es scheint keine direkte Möglichkeit zu geben, es automatisch zu aktivieren. Sie können dies in Ihre Init-Datei einfügen:

(add-hook 'ibuffer-mode-hook (lambda () (ibuffer-auto-mode 1)))

1
Diese akzeptierte Lösung unterbricht die Auswahl in einem anderen Puffer. Wenn ich diesen Hook aktiviere und eine Auswahl für einen Puffer durchführe und dann aufrufe ibuffer, geht die Auswahl verloren.
Neffe

8

Der richtige Weg, dies zu tun, besteht darin, Unterstützung ibufferfür einzuführen auto-revert-mode. Dies kann erreicht werden, indem buffer-stale-functionfür diese diese Puffer definiert werden. Da buffer-menudiese Funktion unterstützt wird, wäre es wohl gut, sie auch vorgelagert ibufferzu haben, aber das scheint vorerst nicht der Fall zu sein.

Hier ist eine Möglichkeit, dies zu tun:

(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)

Hinweis: Im Allgemeinen müsste man einen Wert für definieren revert-buffer-function, ibuffertut dies aber bereits (auf gesetzt ibuffer-update)


1
Gibt es einen Grund, diese Methode der Methode vorzuziehen ibuffer-auto-mode?
Nispio

1
Gut auto-revert-modeverwendet Timer und ibuffer-auto-modeverwendet post-command-hook, so gibt es einen offensichtlichen Unterschied ; aber ohne weiteres konnte ich nicht sagen, ob einer dem anderen vorzuziehen war.
Phils

4
@nispio Ich glaube, ich bevorzuge generische Lösungen gegenüber Ad-hoc-Lösungen. In diesem Sinne ibufferfühlt es sich für mich sauberer an , Puffer so zu gestalten, dass sie sich wie andere verhalten, wenn es darum geht, veraltete Inhalte zu aktualisieren. Außerdem mag ich es im Allgemeinen nicht post-command-hook, auf diese Weise zu missbrauchen : Es ist wirklich übertrieben, wenn Sie etwas tun, das nichts mit dem Puffer zu tun hat. Wenn zum gAktualisieren von Inhalten ein Tastendruck erforderlich ist, kann dies auch der Fall sein. Dies ist die explizite Methode zum Aktualisieren von Inhalten. Aber zugegeben, es ist wahrscheinlich ein philosophisches Problem :)
Sigma

1
Wenn ich diese Methode verwende, erhalte ich immer wieder eine Nachricht. Reverting buffer `*Ibuffer*'. Die Nachricht ist aufdringlich, weil sie mich immer wieder unterbricht, wenn ich im Minibuffer arbeite. Die Meldung wird angezeigt, ob der ibufferPuffer sichtbar ist oder nicht.
Nispio

1
@nispio (setq auto-revert-verbose nil), möglicherweise lokal
Sigma
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.