Xterm.js: рд╕реНрдХреНрд░реЙрд▓рдмреИрдХ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдирд╡ре░ 2016  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: xtermjs/xterm.js

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрд▓ рдмрдлрд░ рдЖрдХрд╛рд░ <viewport rows> + <scrollback> рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдмрдирд╛рдо рдХреЛрдб рдореЗрдВ 10 рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реНрдХреНрд░реЙрд▓рдмреИрдХ рдХреА рдорд╛рддреНрд░рд╛ 10 рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмреАрдЪ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ 2 рдорд╛рдиред

рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ll рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдХреНрд░реЙрд▓рдмреИрдХ рдХреА 6 рд▓рд╛рдЗрдиреЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рджреВрд╕рд░реА рдмрд╛рд░ 8, рддреАрд╕рд░реА рдмрд╛рд░ 5, рдЪреМрдереА рдмрд╛рд░, рдЖрджрд┐ред рдпрд╣ рд╣рд░ рдмрд╛рд░ рдареАрдХ 10 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░реНрдХ рдХреЗ рдХрд╛рд░рдг 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 рдореБрдЭреЗ рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рдкрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордп рд╣реИред

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

zhangjie2012 picture zhangjie2012  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pfitzseb picture pfitzseb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Tyriar picture Tyriar  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

goxr3plus picture goxr3plus  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Tyriar picture Tyriar  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ