Add a simple form of output rate limiting by counting the number of

certain C0 sequences (linefeeds, backspaces, carriage returns) and if it
exceeds a threshold (current default 50/millisecond), start to redraw
the pane every 100 milliseconds instead of making each change as it
comes. Two configuration options - c0-change-trigger and
c0-change-interval.

This makes tmux much more responsive under very fast output (for example
yes(1) or accidentally cat'ing a large file) but may not be perfect on
all terminals and connections - feedback very welcome, particularly
where this change has a negative rather than positive effect (making it
off by default is a possibility).

After much experimentation based originally on a request Robin Lee
Powell (which ended with a completely different solution), this idea
from discussion with Ailin Nemui.
This commit is contained in:
Nicholas Marriott
2012-03-20 11:01:00 +00:00
parent bf9e7a1c68
commit f59971276a
6 changed files with 93 additions and 5 deletions

18
tmux.1
View File

@ -2463,6 +2463,24 @@ It may be switched off globally with:
set-window-option -g automatic-rename off
.Ed
.Pp
.It Ic c0-change-interval Ar interval
.It Ic c0-change-trigger Ar trigger
These two options configure a simple form of rate limiting for a pane.
If
.Nm
sees more than
.Ar trigger
C0 sequences that modify the screen (for example, carriage returns, linefeeds
or backspaces) in one millisecond, it will stop updating the pane immediately and
instead redraw it entirely every
.Ar interval
milliseconds.
This helps to prevent fast output (such as
.Xr yes 1
overwhelming the terminal).
The default is a trigger of 50 and an interval of 100.
A trigger of zero disables the rate limiting.
.Pp
.It Ic clock-mode-colour Ar colour
Set clock colour.
.Pp