Como saber o status visível / focado do meu buffer?

16

Estou escrevendo uma extensão que fala com um processo externo; portanto, é possível diminuir a quantidade de pedidos de 'ei, o que está acontecendo' quando meu buffer não está focado.

Então, qual é a melhor maneira de reconhecer:

  1. Quando meu buffer está visível e focado
  2. Quando meu buffer está visível, mas não está focado
  3. Quando meu buffer não é visível nem focado
Łukasz Gruner
fonte
Pergunta esclarecedora: você quer dizer "como o processo externo reconhece" essas características?
Dan
@ Dan Acho que ele tem uma função sendo executada como um timer ocioso e precisa saber dessa função.
Malabarba

Respostas:

24
  • window-buffer retorna o buffer atualmente exibido por uma determinada janela.

  • get-buffer-window, pelo contrário, retorna uma janela atualmente exibindo o buffer fornecido (ou, nilse não houver essa janela; brinque com o segundo argumento opcional para dizer como se comportar nos casos em que você possui vários quadros).

Com esses dois ingredientes, você poderá discriminar todos os seus casos:

;; my-buffer is supposed to be the buffer you are looking for
(cond ((eq my-buffer (window-buffer (selected-window)))
       (message "Visible and focused"))
      ((get-buffer-window my-buffer)
       (message "Visible and unfocused")) 
      (t
       (message "Not visible")))
ffevotte
fonte