Jak poznać status widocznego / skoncentrowanego bufora?

16

Piszę rozszerzenie, które komunikuje się z procesem zewnętrznym, więc jest dane, aby zmniejszyć liczbę żądań „hej, co jest”, gdy mój bufor nie jest skoncentrowany.

Jaki jest najlepszy sposób na rozpoznanie:

  1. Kiedy mój bufor jest widoczny i skoncentrowany
  2. Gdy mój bufor jest widoczny, ale nie jest skoncentrowany
  3. Gdy mój bufor nie jest ani widoczny, ani skupiony
Łukasz Gruner
źródło
Pytanie wyjaśniające: czy masz na myśli „jak proces zewnętrzny rozpoznaje” te cechy?
Dan
@ Czy myślę, że ma funkcję uruchomioną jako bezczynny licznik czasu i powinien wiedzieć o tej funkcji.
Malabarba

Odpowiedzi:

24
  • window-buffer zwraca bufor aktualnie wyświetlany przez dane okno.

  • get-buffer-windowWręcz przeciwnie, zwraca się okno komunikatu wyświetlające dany bufor (lub niljeśli nie ma takiego okna; zabaw z opcjonalnym 2nd argumentu, aby poinformować go, jak zachowywać się w przypadku, gdy masz wiele ramek).

Dzięki tym dwóm składnikom powinieneś być w stanie odróżnić wszystkie swoje przypadki:

;; 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")))
François Févotte
źródło