Bagaimana cara mengetahui status fokus / fokus buffer saya?

16

Saya sedang menulis ekstensi yang berbicara dengan proses luar, jadi itu adalah diberikan untuk menurunkan jumlah permintaan 'hei ada apa' ketika buffer saya tidak fokus.

Jadi, apa cara terbaik untuk mengenali:

  1. Ketika buffer saya terlihat dan fokus
  2. Ketika buffer saya terlihat tetapi tidak fokus
  3. Ketika buffer saya tidak terlihat atau terfokus
Łukasz Gruner
sumber
Memperjelas pertanyaan: apakah maksud Anda "bagaimana proses luar mengenali" karakteristik ini?
Dan
@Dan saya pikir dia memiliki fungsi yang dijalankan sebagai timer idle, dan perlu tahu dari fungsi ini.
Malabarba

Jawaban:

24
  • window-buffer mengembalikan buffer yang saat ini ditampilkan oleh jendela yang diberikan.

  • get-buffer-window, Sebaliknya, mengembalikan sebuah jendela saat ini menampilkan buffer yang diberikan (atau niljika tidak ada jendela seperti; bermain dengan 2 argumen opsional untuk menceritakannya bagaimana berperilaku dalam kasus di mana Anda memiliki beberapa frame).

Dengan dua bahan ini, Anda harus dapat membedakan semua kasing Anda:

;; 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
sumber