2016-06-08 15 views
0

Ich habe vor einiger Zeit emacs aktualisiert (jetzt Debian 24.5 + 1-6 + b2), und ich bemerkte, dass das Verhalten von Cx Cb (Listen-Puffer) geändert wurde Zwei Fenster sind aktiv: Vorher würde es immer die Liste der Puffer im anderen Fenster anzeigen (das, in dem sich der Cursor gerade nicht befindet). Jetzt zeigt es nur die Liste der Puffer in dem anderen Fenster an, wenn sich die Puffer auf dieselbe Datei beziehen. Wenn sie auf verschiedene Dateien verweisen, zeigt sie die Liste der Puffer im selben Fenster an (dasjenige, in dem sich der Cursor gerade befindet).Altes Verhalten für List-Buffer (Cx Cb) mit zwei Fenstern

Das ist wirklich irritierend, wie ich das alte Verhalten gewohnt bin. Wie kann ich das alte Verhalten zurückbekommen? (Und das ist ein Fehler, und wenn nicht, was war der Grund für die Änderung?)

+0

Anstelle der Verwendung von '(defun list-Puffer (& optional arg) "(interactive" P ") (display-buffer (list-buffers-nosect arg)))' bedenke das Hinzufügen eines 't' wie folgt:' (defn list-buffers (& optional arg) "Dok-string..." "(interaktiv" P ") (display-buffer (list-buffers-nosect arg) t)) 'Löst das dein Problem? – lawlist

+0

Der letzte Abschnitt der doc-Zeichenkette für 'display-buffer' im Emacs * Master-Zweig * besagt:" * Das ACTION-Argument für 'display-buffer' kann auch einen Nicht-Nil- und einen Nicht-Listen-Wert haben um den Puffer in einem anderen als dem ausgewählten Fenster anzuzeigen, auch wenn er bereits im ausgewählten Fenster angezeigt wird. Wenn er interaktiv mit einem Präfix-Argument aufgerufen wird, ist ACTION t. * " – lawlist

+0

@lawlist: Ich definiere eigentlich keine Liste- Puffer irgendwo in '.emacs', und ich änderte die Bindung nirgends. Wenn Sie mich auf die Datei hinweisen können, in der ich diese Änderung vornehmen muss, oder besser, wenn Sie mir erklären können, was ich zu meiner '.emacs' Datei hinzufügen muss, kann ich Ihren Vorschlag ausprobieren. Ich bin mit dem elisp-Zeug nicht sehr vertraut, ich will nur das alte Verhalten zurück. :-) – dirkt

Antwort

1

Die Funktion list-buffers die Funktion display-buffer von window.el nutzt, und die zweite und dritte optionale Argumente (dh ACTION und FRAME) sind nil weil für sie nichts angegeben wurde. Der letzte Absatz des Doc-Strings für display-buffer im Emacs-Master-Zweig lautet: "Das Argument ACTION zu 'display-buffer' kann auch einen Nicht-Null- und Nicht-Listen-Wert haben. Dies bedeutet, den Puffer in einem Fenster anzuzeigen andere als die, auch wenn sie bereits im ausgewählten Fenster ausgewählt angezeigt wird. wenn interaktiv mit einem Präfix Argumente genannt, ist ACTION t. "

die ursprüngliche Funktion in buff-menu.el enthält eine Zeile, die wie folgt definiert list-buffers aussieht : (display-buffer (list-buffers-noselect arg)). Was diese Antwort tut, ist ein t hinzufügen, so dass das zweite optionale Argument für display-buffer - also ACTION - nicht-null und nicht-Liste ist. Dies erreicht das in der oben erwähnten Doc-Zeichenfolge beschriebene Verhalten. Die neue Funktion wie folgt aussieht, und es kann direkt in die .emacs Datei eingefügt werden: ".. Doc-String"

(defun list-buffers (&optional arg) 
    "Display a list of existing buffers. 
The list is displayed in a buffer named \"*Buffer List*\". 
See `buffer-menu' for a description of the Buffer Menu. 

By default, all buffers are listed except those whose names start 
with a space (which are for internal use). With prefix argument 
ARG, show only buffers that are visiting files." 
    (interactive "P") 
    (display-buffer (list-buffers-noselect arg) t))