Ich glaube, es gibt zwei Möglichkeiten, dieses Problem zu lösen.
Der erste ist der Haken ` 'compilation-finish-Funktionen', zu verwenden, die ist:
[Eine Liste von f] unktion, wenn ein Übersetzungsvorgang beendet zu nennen. Jede Funktion wird mit zwei Argumenten aufgerufen: dem Kompilierungspuffer, und einer Zeichenfolge, die beschreibt, wie der Prozess beendet wurde.
, die zu einer Lösung wie diese führt:
(add-hook 'compilation-finish-functions 'my-compilation-finish-function)
(defun my-compilation-finish-function (buffer resstring)
"Shrink the window if the process finished successfully."
(let ((compilation-window-height (if (string-match-p "finished" resstring) 5 nil)))
(compilation-set-window-height (get-buffer-window buffer 0))))
Das einzige Problem, das ich mit dieser Lösung sind, dass es geht davon aus, dass der Erfolg von der Suche nach der Zeichenfolge bestimmt werden kann „fertig“ in der Ergebniszeichenfolge.
Die andere Alternative ist zu beraten 'compilation-handle-exit
- die erhält den exit-Status explizit übergeben. Ich schrieb diesen Ratschlag, der das Fenster verkleinert, wenn der Ausgangsstatus nicht Null ist.
(defadvice compilation-handle-exit (around my-compilation-handle-exit-shrink-height activate)
(let ((compilation-window-height (if (zerop (car (ad-get-args 1))) 5 nil)))
(compilation-set-window-height (get-buffer-window (current-buffer) 0))
ad-do-it))
Hinweis: Wenn das Fenster *compilation*
noch sichtbar ist, wenn Sie Ihre zweite Kompilierung tun, wird es nicht bei einem Ausfall der Größe verändert größer werden. Wenn Sie die Größe ändern möchten, müssen Sie anstelle von nil
eine Höhe angeben. Vielleicht wäre dies nach Ihrem Geschmack sein (das erste Beispiel zu ändern):
(if (string-match-p "finished" resstring) 5 (/ (frame-height) 2))
Die nil
mit (/ (frame-height) 2)
ersetzt wurde