рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрд▓ рдмрдлрд░ рдЖрдХрд╛рд░ <viewport rows> + <scrollback>
рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдмрдирд╛рдо рдХреЛрдб рдореЗрдВ 10
рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реНрдХреНрд░реЙрд▓рдмреИрдХ рдХреА рдорд╛рддреНрд░рд╛ 10 рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмреАрдЪ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ 2 рдорд╛рдиред
рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ll
рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдХреНрд░реЙрд▓рдмреИрдХ рдХреА 6 рд▓рд╛рдЗрдиреЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рджреВрд╕рд░реА рдмрд╛рд░ 8, рддреАрд╕рд░реА рдмрд╛рд░ 5, рдЪреМрдереА рдмрд╛рд░, рдЖрджрд┐ред рдпрд╣ рд╣рд░ рдмрд╛рд░ рдареАрдХ 10 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░реНрдХ рдХреЗ рдХрд╛рд░рдг scroll
:
if (++this.ybase === this.scrollback) {
this.ybase = this.ybase / 2 | 0;
this.lines = this.lines.slice(-(this.ybase + this.rows) + 1);
}
рдпрд╣рд╛рдВ рдХреБрдЫ рдЕрд╡рд▓реЛрдХрди/рдкреНрд░рд╢реНрди рджрд┐рдП рдЧрдП рд╣реИрдВ:
| 0
)scrollback
рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИscroll
рдкрд░ рдХреНрдпреЛрдВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдХреНрдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм this.lines
рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП?slice
рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдИ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рддреНрдпрд╛рдЧ рджреЗрддрд╛ рд╣реИрдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рдЬрд╣рд╛рдВ Terminal.lines
рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рдо рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕рд░рдгреА рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рджреВрд░ рдХрд░рддреЗ рд╣реИрдВ? рддреЛ рдПрдХ рд╕рд░рдгреА рд╣рдореЗрд╢рд╛ рдЖрдХрд╛рд░ рдХрд╛ рд╣реЛрддрд╛ рд╣реИ Terminal.rows + Terminal.scrollback
, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рд░рдгреА рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рд╣реИ рдпрд╛ shift
рдЖрдИрдПрдирдЬреА (рдЬрд┐рд╕рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝реЗ рд╕рд░рдгреА рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ) рдФрд░ scrollback
рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдкреБрд░рд╛рдиреА рд╕рд░рдгреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╢рд╛рдпрдж рдХреЗрд╡рд▓ Terminal.scrollback
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдЗрд╕ рддрд░рд╣ Terminal.lines
рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрдм Terminal.scrollback
рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ (рдЬрдм Terminal.rows
рд╡рд┐рдкрд░реАрдд bufferSize
рдпрд╛ bufferLength
рдмрджрд▓рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдбрдмреНрд▓реНрдпреВрдЖрдИрдкреА рд╢рд╛рдЦрд╛ рд╣реИ рдЬреЛ CircularList
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдирдП рдореЙрдбрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдпрд╣ рдЕрднреА рддрдХ 100% рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдХ рд░рд╣рд╛ рд╣реВрдВред https://github.com/Tyriar/xterm.js/tree/361_circular_list_scrollback
@Tyriar рдореБрдЭреЗ рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рдкрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордп рд╣реИред
рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛