Die get-buffer-window-list gibt einen Fehler in Emacs 24 aus, wenn der Name nicht gefunden wurde

515
pnj

Ich habe Code, der nach einem offenen Fenster mit einem der drei gebräuchlichen Namen "* shell *", "* stata *", "stata" sucht.

Ich verwende den folgenden elisp-Code, um jeden Namen zu überprüfen:

(setq stata-win (get-buffer-window-list "*shell*")) (if (eq (length stata-win) 0) (setq stata-win (get-buffer-window-list "*stata*"))) (if (eq (length stata-win) 0) (setq stata-win (get-buffer-window-list "stata")))  (car stata-win) 

Dies funktionierte zuvor, aber die erste Zeile löst jetzt einen Fehler aus, wenn kein Fenster mit der Namen- Shell gefunden wird. Wie kann ich prüfen, ob ein geöffnetes Fenster mit einem Namen übereinstimmt, ohne einen Fehler auszulösen, wenn der Name nicht gefunden wird?

1

1 Antwort auf die Frage

0
sds

get-buffer-window-listFehler werden nur ausgegeben, wenn der Puffer nicht vorhanden ist. Wenn der Puffer existiert, aber in keinem Fenster angezeigt wird, kehrt die Funktion zurück nil.

Sie können das Vorhandensein von Puffer mit überprüfen get-buffer.

Was Sie also wollen, ist:

(defun get-buffers-window (buffer-names) (let (found buf) (while (and (null found) (setq buf (pop buffer-names))) (setq found (and (get-buffer buf) (car (get-buffer-window-list buf))))) found)) (get-buffers-window '("*shell*" "stata" "*stata*")) 

Beachten Sie, dass für die Listen foodie Formulare angezeigt werden

(if foo ...) 

und

(if (< 0 (length foo)) ...) 

sind gleichwertig, aber erstere durchläuft die Liste nicht (und damit auch schneller) und ist auch idiomatischer.

Ausgezeichnet. Der Emacs-Versionsschalter war ein roter Hering; Ich habe es aus der Frage entfernt. pnj vor 11 Jahren 0