Wie erkenne ich den sichtbaren / fokussierten Status meines Puffers?

16

Ich schreibe eine Erweiterung, die mit einem externen Prozess kommuniziert, daher ist es selbstverständlich, die Anzahl der Anfragen zu verringern, die "Hey Whats Up" sind, wenn mein Puffer nicht fokussiert ist.

Also, was ist der beste Weg, um zu erkennen:

  1. Wenn mein Puffer sichtbar und fokussiert ist
  2. Wenn mein Puffer sichtbar, aber nicht fokussiert ist
  3. Wenn mein Puffer weder sichtbar noch fokussiert ist
Łukasz Gruner
quelle
Klärende Frage: Meinst du "wie erkennt der äußere Prozess " diese Merkmale?
Dan
@Dan Ich denke, er hat eine Funktion, die als Leerlauf-Timer ausgeführt wird, und muss diese Funktion kennen.
Malabarba

Antworten:

24
  • window-buffer Gibt den aktuell von einem bestimmten Fenster angezeigten Puffer zurück.

  • get-buffer-windowIm Gegensatz dazu wird ein Fenster zurückgegeben, in dem der angegebene Puffer gerade angezeigt wird (oder nilwenn es kein solches Fenster gibt; spielen Sie mit dem optionalen zweiten Argument, um anzugeben, wie es sich in Fällen verhält, in denen Sie mehrere Frames haben).

Mit diesen beiden Zutaten sollten Sie in der Lage sein, alle Fälle zu unterscheiden:

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