Как узнать видимый / сфокусированный статус моего буфера?

16

Я пишу расширение, которое взаимодействует с внешним процессом, поэтому рекомендуется уменьшать количество запросов типа «эй, что случилось», когда мой буфер не сфокусирован.

Итак, как лучше распознать:

  1. Когда мой буфер виден и сфокусирован
  2. Когда мой буфер виден, но не сфокусирован
  3. Когда мой буфер не виден и не сфокусирован
Лукаш Грюнер
источник
Уточняющий вопрос: имеете ли вы в виду «как внешний процесс распознает» эти характеристики?
Дан
@ Дэн, я думаю, у него есть функция, запускаемая как таймер простоя, и ему нужно знать об этой функции.
Малабарба

Ответы:

24
  • window-buffer возвращает буфер, отображаемый в данный момент данным окном.

  • get-buffer-window, Наоборот, возвращается в окно , отображающее в настоящее время данный буфер (или , nilесли нет такого окна, игра с дополнительным 2 - й аргумент , чтобы сказать ему , как вести себя в тех случаях , когда у вас есть несколько кадров).

Используя эти два компонента, вы сможете различать все ваши случаи:

;; 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")))
Франсуа Февотт
источник