Xterm.js: 슀크둀백이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€

에 λ§Œλ“  2016λ…„ 11μ›” 17일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: xtermjs/xterm.js

총 버퍼 크기가 <viewport rows> + <scrollback> κ°€ 되기λ₯Ό μ›ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μ΄μ§€λ§Œ vscodeμ—μ„œ 10 λ˜λ„λ‘ μ—°κ²°ν•˜λ©΄ 제곡된 슀크둀백 양이 10이 μ•„λ‹ˆλ©° 2 κ°’.

ll λ₯Ό μ‹€ν–‰ν•˜μ—¬ 좜λ ₯ 덩어리λ₯Ό μ–»μœΌλ©΄ μ²˜μŒμ—λŠ” 6쀄, 두 λ²ˆμ§Έμ—λŠ” 8쀄, μ„Έ λ²ˆμ§Έμ—λŠ” 5쀄, λ„€ 번째 μ€„μ—λŠ” 7쀄이 λ‚˜μ˜΅λ‹ˆλ‹€. 맀번 μ •ν™•νžˆ 10쀄이어야 ν•©λ‹ˆλ‹€.

typbug

λͺ¨λ“  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 ing(μΆ©λΆ„νžˆ 큰 λ°°μ—΄μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  수 있음)이 μ—†κ³  scrollback κ°€ λ‹€μŒκ³Ό 같이 μ²˜λ¦¬λ©λ‹ˆλ‹€. 이전 λ°°μ—΄ ν•­λͺ©μ΄ λ¬΄μ‹œλ©λ‹ˆλ‹€.

Terminal.scrollback μ‚¬μš©ν•˜λŠ” 것이 훨씬 더 λ‚˜μ„ κ²ƒμž…λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ Terminal.scrollback κ°€ 변경될 λ•Œλ§Œ Terminal.lines 크기λ₯Ό μ‘°μ •ν•˜λ©΄ λ©λ‹ˆλ‹€( Terminal.rows κ²½μš°μ™€ λ°˜λŒ€) bufferSize λ˜λŠ” bufferLength 둜 λ³€κ²½ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

CircularList 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 μƒˆ λͺ¨λΈμ„ κ΅¬ν˜„ν•˜λŠ” WIP λΆ„κΈ°κ°€ μžˆμŠ΅λ‹ˆλ‹€. 아직 100% μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° λ‹€λ₯Έ μž‘μ—…μ— μ§‘μ€‘ν•˜κΈ° μœ„ν•΄ μž μ‹œ 보λ₯˜ν•˜κ² μŠ΅λ‹ˆλ‹€. https://github.com/Tyriar/xterm.js/tree/361_circular_list_scrollback

@Tyriar κ·€ν•˜μ˜ μ§€μ μ—μ„œ λͺ‡ 가지 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κ³  μ‹œκΈ°κ°€ πŸ†—λΌκ³  μƒκ°ν•˜μ‹œλ©΄ 기꺼이 ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜κ² μŠ΅λ‹ˆλ‹€.

ν˜„μž¬λŠ” λ„ˆλ¬΄ λ§κ°€μ Έμ„œ μ™„μ„±ν•˜λŠ”λ° μ‹œκ°„μ΄ μ’€ 걸릴 κ²ƒμž…λ‹ˆλ‹€

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

johnpoth picture johnpoth  Β·  3μ½”λ©˜νŠΈ

tandatle picture tandatle  Β·  3μ½”λ©˜νŠΈ

ghost picture ghost  Β·  4μ½”λ©˜νŠΈ

albinekb picture albinekb  Β·  4μ½”λ©˜νŠΈ

LB-J picture LB-J  Β·  3μ½”λ©˜νŠΈ