1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:57:35 +00:00

LibVT+Kernel: Clean up scroll API

This commit cleans up some of the `#ifdef`-ed code smell in
`Terminal`, by extending the scroll APIs to take a range of lines as a
parameter. This makes it possible to use the same code for `IL`/`DL` as
for scrolling.

Note that the current scrolling implementation is very naive, and does
many insertions/deletions in the middle of arrays, whereas swaps should
be enough. This optimization will come in a later commit.

The `linefeed` override was removed from `VirtualConsole`. Previously,
it exhibited incorrect behavior by moving to column 0. Now that we use
the method defined in `Terminal`, code which relied on this behavior
stopped working. We go instead go through the TTY layer which handles
the various output flags. Passing the input character-by-character
seems a bit excessive, so a fix for it will come in another PR.
This commit is contained in:
Daniel Bertalan 2021-06-02 15:36:31 +02:00 committed by Andreas Kling
parent 5f92790489
commit ae6bdc4e29
5 changed files with 141 additions and 113 deletions

View file

@ -58,7 +58,7 @@ protected:
TTY(unsigned major, unsigned minor);
void emit(u8, bool do_evaluate_block_conditions = false);
virtual void echo(u8) = 0;
void echo_with_processing(u8);
bool can_do_backspace() const;
void do_backspace();
@ -80,7 +80,8 @@ protected:
private:
// ^CharacterDevice
virtual bool is_tty() const final override { return true; }
inline void echo_with_processing(u8);
virtual void echo(u8) = 0;
template<typename Functor>
void process_output(u8, Functor put_char);