[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