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

Re: [sup-devel] [PATCHv2] idle and unidle updates



This is a problematic place for this logic to go, since it appears as if 
the idle update does not fire when shelled to the editor, and instead fires 
immediately upon returning.  Which ironically is exactly when you're 
becoming unidle.

I'm thinking of an IdleManager with a single public method #ping that can 
be called here where no_keystrokes_since is being updated.  It has a thread 
that does the threshold checking and relays the updates.  This way it's not 
in the main thread and doesn't block when shelled.

Thoughts?

Excerpts from Eric Sherman's message of Thu Jan 14 10:45:54 -0500 2010:
> ---
>  bin/sup |   17 +++++++++++++++++
>  1 files changed, 17 insertions(+), 0 deletions(-)
> 
> diff --git a/bin/sup b/bin/sup
> index 19b2a87..0d90d00 100755
> --- a/bin/sup
> +++ b/bin/sup
> @@ -260,6 +260,10 @@ begin
>      SearchResultsMode.spawn_from_query $opts[:search]
>    end
>  
> +  IDLE_THRESHOLD = 60
> +  no_keystrokes_since = Time.now
> +  idle = false
> +
>    until Redwood::exceptions.nonempty? || $die
>      c = begin
>        Ncurses.nonblocking_getch
> @@ -274,9 +278,22 @@ begin
>          debug "redrawing screen on sigwinch"
>          BufferManager.completely_redraw_screen
>        end
> +
> +      if !idle and Time.now.to_i - no_keystrokes_since.to_i >= IDLE_THRESHOLD
> +        UpdateManager.relay self, :idle, Time.at(no_keystrokes_since)
> +        idle = true
> +      end
> +
>        next
>      end
>  
> +    if idle
> +      UpdateManager.relay self, :unidle, Time.at(no_keystrokes_since)
> +      idle = false
> +    end
> +
> +    no_keystrokes_since = Time.now
> +
>      if c == 410
>        ## this is ncurses's way of telling us it's detected a refresh.
>        ## since we have our own sigwinch handler, we don't do anything.
_______________________________________________
Sup-devel mailing list
Sup-devel@rubyforge.org
http://rubyforge.org/mailman/listinfo/sup-devel