get-buffer-lista-de-janelas lança erro no Emacs 24 se nome não for encontrado

1

Eu tenho código que procura por uma janela aberta com um dos três nomes comumente usados, "* shell *", "* stata *", "stata".

Estou executando o seguinte código elisp para verificar cada nome:

(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)

Isso funcionou anteriormente, mas a primeira linha agora dispara um erro se uma janela com o nome shell não for encontrada. Como posso testar a existência de uma janela aberta que corresponde a um nome sem acionar um erro se o nome não for encontrado?

    
por pnj 11.09.2013 / 21:10

1 resposta

0

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.

    
por 11.09.2013 / 22:05

Tags