get-buffer-window-list
erros somente se o < em> buffer não existe.
Se o buffer existir, mas não for exibido em nenhuma janela, a função retornará nil
.
Você pode verificar a existência de buffer usando get-buffer
.
Assim, o que você quer é:
(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*"))
Observe que, para listas foo
, os formulários
(if foo ...)
e
(if (< 0 (length foo)) ...)
são equivalentes, mas o primeiro não percorre a lista (e, portanto, é mais rápido) e também é mais idiomático.