get-buffer-window-list
ошибки, только если буфер не существует. Если буфер существует, но не отображается ни в одном окне, функция возвращается nil
.
Вы можете проверить существование буфера, используя get-buffer
.
Итак, что вы хотите:
(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*"))
Обратите внимание, что для списков foo
форм
(if foo ...)
а также
(if (< 0 (length foo)) ...)
эквивалентны, но первый не пересекает список (и, следовательно, быстрее), а также более идиоматичен.