## Incremental computation

We would like to avoid redrawing all row(s) when an event occurs.
Currently, we redraw all row(s) except when:
  * a character is inserted at the end of input (and there is no hint and no `highlight_char`),
  * only the cursor is moved (input is not touched and no `highlight_char`).

Ideally, we would like to redraw only impacted row(s) / cell(s).

### Observable values

Currently, we assume that highlighting does not impact layout / rendered text size.
So only the following observables impact layout:
  * prompt (interactive search, [input mode indicator](https://github.com/kkawakam/rustyline/pull/369)),
  * [input mode](https://github.com/kkawakam/rustyline/pull/369),
  * line(s) buffer,
  * cursor position,
  * hint / input validation message,
  * screen size (line wrapping),
  * [prompt continuation](https://github.com/kkawakam/rustyline/pull/372)s,
  * row/wrap count.

Some other values may impact layout but they are/should be constant:
  * tab stop,

### Line wrapping and highlighting

Currently, there is no word wrapping (only grapheme wrapping).
But we highlight the whole input at once.
So there is no issue: for example, even if a keyword is wrapped, style is preserved.

With [prompt continuation](https://github.com/kkawakam/rustyline/pull/372)s,
we (will) interleave user input with continuations.
So we need to preserve style.

TODO How prompt_toolkit handle this problem ?
Maybe using ANSI sequence directly was a bad idea. If `Highlighter` returns style ranges,
applying style on input slice is easy (and also supporting styles on Windows < 10). 

### Impacts

Current granularity:
 * PUSH_CHAR at end of input
 * BEEP
 * MOVE_CURSOR
 * REFRESH whole input / rows
 * CLEAR_SCREEN (+REFRESH)

Wanted additional granurality:
  * PUSH_STRING at end of input
  * REFRESH_DIRTY only rows / cells

