Xterm.js: 'μ»€μ„œ 볡원'μœ„μΉ˜λ₯Ό λ³΅μ›ν•˜μ§€λ§Œ ν…μŠ€νŠΈ 속성은 λ³΅μ›ν•˜μ§€ μ•ŠμŒ

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

일뢀 VT100 μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λ‘œ μž‘μ—…ν•˜λŠ” 데 λͺ‡ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • μ»€μ„œ μ €μž₯ (ESC 7) (DECSC)
  • 볡원 μ»€μ„œ (ESC 8) (DECRC)

일반적으둜 VT100 터미널은 μ»€μ„œ μœ„μΉ˜λ₯Ό μ €μž₯ν•΄μ•Όν•˜λ©° μ €μž₯ μ»€μ„œ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λ₯Ό μž‘μ„±ν•  λ•Œ 문자 속성도 μ €μž₯ν•΄μ•Όν•©λ‹ˆλ‹€.
볡원 μ»€μ„œλ₯Ό μ“Έ λ•Œ 문자 속성이 λ³΅μ›λ˜μ–΄μ•Όν•©λ‹ˆλ‹€.

ν˜„μž¬ μ»€μ„œμ˜ μœ„μΉ˜λŠ” μ €μž₯되고 볡원 λ˜μ§€λ§Œ 문자 속성은 μ•„λ‹™λ‹ˆλ‹€ .

λ‹€λ₯Έ VT100 κ΅¬ν˜„μ—μ„œ μ €μž₯ / 볡원 μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€μ˜ λ™μž‘μ„ ν…ŒμŠ€νŠΈν•˜μ—¬ 처리 쀑인지 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

  • κ·Έλ†ˆ 터미널
  • μ’…κ²° 자
  • hterm

μ•„λž˜μ— λͺ‡ 가지 μ„ΈλΆ€ 정보λ₯Ό μ œκ³΅ν•˜κ³  λ‚˜ μžμ‹ μ„ μœ„ν•΄ ν•„μš”ν•˜λ―€λ‘œ μ†”λ£¨μ…˜ μž‘μ—…μ„ μ‹œμž‘ν•  κ²ƒμž…λ‹ˆλ‹€.
μ•žμœΌλ‘œλ„ νž˜μ¨μ£Όμ„Έμš”!

μ„ΈλΆ€

  • λΈŒλΌμš°μ € 및 λΈŒλΌμš°μ € 버전 : Chromium : 버전 62.0.3202.89 (개발자 λΉŒλ“œ), Debian buster / sid 기반, Debian buster / sid (64 λΉ„νŠΈ)μ—μ„œ μ‹€ν–‰
  • OS 버전 : debian buster / sid
  • xterm.js 버전 : 3.4.1

μž¬ν˜„ 단계

ν…ŒμŠ€νŠΈμ— μ‚¬μš©λ˜λŠ” VT100 μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

\x1b[0m (attributes off)
\x1b[1;1f (reset origin)
\x1b[2J (clear)
\x1b7 (save cursor state)
\x1b[7m (set negative color)
                        <colored> (just some output)
\x1b8 (restore cursor state)
<should not be colored>\n\r (another output - will be printed in negative color in xtermjs)

xtermjsλ₯Ό μ‚¬μš©ν•˜λ©΄ "색이 μ§€μ •λ˜μ§€ μ•Šμ•„μ•Ό 함"이 μƒ‰μƒμœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

xterm.write('\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m                        <colored>\x1b8<should not be colored>\n\r');
// will print:
// "<should not be colored> <colored>"

bashμ—μ„œλŠ” "색이 μ§€μ •λ˜μ§€ μ•Šμ•„μ•Ό 함"이 색상이 μ§€μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

printf '\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m                        <colored>\x1b8<should not be colored>\n\r'
# will print
# "<should not be colored> <colored>"

μ–΄λ–»κ²Œ κ³ μΉ˜λŠ” 지

ν…μŠ€νŠΈ 속성이 μ—¬κΈ° μœ„μΉ˜μ™€ ν•¨κ»˜ μ €μž₯되고 λ³΅μ›λ˜μ–΄μ•Όν•œλ‹€κ³  생각
λ‹€μŒμ€ hterm이 μ €μž₯ / 볡원 μ»€μ„œλ₯Ό μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

νŽΈμ§‘ :
λͺ¨λ“  문자 속성 (fg color, bg color 및 특수 ν”Œλž˜κ·Έ λͺ¨λ“œ : bold, italic, negative, ..)은 'Terminal'클래슀의 'curAttr'속성에 μ €μž₯λ©λ‹ˆλ‹€. 이 μ†μ„±μ˜ 볡사본을 μ €μž₯ν•˜λ©΄ λͺ¨λ“  문자 속성을 ν•œ λ²ˆμ— 볡원 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

help wanted typbug

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

그렇지 μ•Šλ‹€λ©΄ λ³„λ„μ˜ 문제λ₯Ό λ§Œλ“€μ–΄μ•Όν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λ“  것을 μΊ‘μ²˜ν•˜λ €λ©΄ ICursorState μƒνƒœ κ°œμ²΄μ™€ 같은 λ°©μ‹μœΌλ‘œ μž‘μ—…μ„ μ •λ¦¬ν•΄μ•Όν•©λ‹ˆλ‹€.

λͺ¨λ“  4 λŒ“κΈ€

VTE도 버그가 λ§Žμ•˜μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ VTE 731205 μ—μ„œ λͺ‡ 가지 ν₯미둜운 뢀뢄을 찾을 μˆ˜μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

@ 7PH μ–΄μ¨Œλ“  DECSCλ₯Ό μˆ˜μ •ν•˜κ³  있기 λ•Œλ¬Έμ— https://vt100.net/docs/vt510-rm/DECSC.html을 μ‚΄νŽ΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 아직 μ²˜λ¦¬ν•΄μ•Ό ν•  터미널 속성이 더 μžˆμŠ΅λ‹ˆλ‹€.

그렇지 μ•Šλ‹€λ©΄ λ³„λ„μ˜ 문제λ₯Ό λ§Œλ“€μ–΄μ•Όν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λ“  것을 μΊ‘μ²˜ν•˜λ €λ©΄ ICursorState μƒνƒœ κ°œμ²΄μ™€ 같은 λ°©μ‹μœΌλ‘œ μž‘μ—…μ„ μ •λ¦¬ν•΄μ•Όν•©λ‹ˆλ‹€.

PR에 λ³‘ν•©ν•˜κ³  λ‚˜λ¨Έμ§€ 속성을 https://github.com/xtermjs/xterm.js/issues/1526으둜 λΆ„κΈ°ν–ˆμŠ΅λ‹ˆλ‹€.

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