[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Detect window switches?

From: Dan Espen
Subject: Re: Detect window switches?
Date: Fri, 27 Sep 2013 11:27:36 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)

Eli Zaretskii <address@hidden> writes:

>> From: Dan Espen <address@hidden>
>> Date: Thu, 26 Sep 2013 16:15:52 -0400
>> Eli Zaretskii <address@hidden> writes:
>> >> From: Dan Espen <address@hidden>
>> >> Date: Thu, 26 Sep 2013 15:22:58 -0400
>> >> 
>> >> Eli Zaretskii <address@hidden> writes:
>> >> 
>> >> >> From: Dan Espen <address@hidden>
>> >> >> Date: Thu, 26 Sep 2013 14:22:15 -0400
>> >> >> 
>> >> >> My mode line changes color when a buffer changes from active/inactive.
>> >> >> Isn't that what the OP is looking for?
>> >> >
>> >> > That's done on the C level, and Lisp programs cannot hook into this.
>> >> 
>> >> Hmm, starting to sound like a bug.
>> >> Here's an event that Emacs acts on but doesn't make the
>> >> event visible to ELisp.
>> >
>> > No, Emacs doesn't act on this as an event.  What happens is that the
>> > next redisplay after a window switch redraws the mode line in a
>> > different face.  The redisplay isn't triggered by an event (because
>> > there is no such event), it is triggered by other means, mostly
>> > because Emacs becomes idle.  That could happen many seconds after the
>> > switch, if Emacs becomes busy calculating something, for example.
>> I only meant event with the meaning that something happens.
> But that's just it: nothing happened, as far as Emacs is concerned.
> As part of routine redisplay, Emacs displays the mode line of the
> selected window differently than it does with other windows.  It
> doesn't track whether a particular window was selected earlier and
> became non-selected now, so it doesn't know that "something's
> happened".  It just reflects the current state of affairs on the
> screen.
>> Here Emacs sees a buffer become active or inactive
> No, it doesn't know a buffer _became_ active, it just _finds_ it to be
> current or not current.
>> Well, it also changes the physical appearance of the keyboard cursor.
>> Mine goes from 3 pixels wide to 1.
> More of the same.

I think I understand.

Switching buffers tells Emacs to redraw everything.
Something else set the state flag to active or inactive
and the redraw routines just see the new flag.

So the place the hook is needed is where that state flag
is set.  And Emacs may need to add a test while setting
that state flag to see if it's a change in state so it
could run the new hook.

Dan Espen

reply via email to

[Prev in Thread] Current Thread [Next in Thread]