Xterm.js: 'рдХрд░реНрд╕рд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ' рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд▓реЗрдХрд┐рди рдкрд╛рда рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╣реАрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЬреВрди 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: xtermjs/xterm.js

рдореБрдЭреЗ рдХреБрдЫ VT100 рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ:

  • рдХрд░реНрд╕рд░ рд╕рд╣реЗрдЬреЗрдВ (рдИрдПрд╕рд╕реА 7) (рдбреАрдИрд╕реАрдПрд╕рд╕реА)
  • рдХрд░реНрд╕рд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рдИрдПрд╕рд╕реА 8) (рдбреАрдИрд╕реАрдЖрд░рд╕реА)

рдЖрдорддреМрд░ рдкрд░, рдПрдХ VT100 рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП ,
рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХрд░реНрд╕рд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рд╡рд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рд╣реЗрдЬреА рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди рд╡рд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдирд╣реАрдВ ред

рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рдереЗ, рдореИрдВрдиреЗ рдЕрдиреНрдп VT100 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╕реЗрд╡/рд░рд┐рд╕реНрдЯреЛрд░ рдПрд╕реНрдХреЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ:

рдореИрдВ рдиреАрдЪреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рджреВрдВрдЧрд╛, рдФрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЛ!

рд╡рд┐рд╡рд░рдг

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг: рдХреНрд░реЛрдорд┐рдпрдо: рд╕рдВрд╕реНрдХрд░рдг ремреи.реж.рейреирежреи.реореп (рдбреЗрд╡рд▓рдкрд░ рдмрд┐рд▓реНрдб) рдбреЗрдмрд┐рдпрди рдмрд╕реНрдЯрд░/рд╕рд┐рдб рдкрд░ рдирд┐рд░реНрдорд┐рдд, рдбреЗрдмрд┐рдпрди рдмрд╕реНрдЯрд░/рд╕рд┐рдб (ремрек-рдмрд┐рдЯ) рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ
  • рдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг: рдбреЗрдмрд┐рдпрди рдмрд╕реНрдЯрд░/рд╕рд┐рдб
  • 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>"

рдПрдХ рдмреИрд╢ рдореЗрдВ, "рд░рдВрдЧреАрди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рд░рдВрдЧреАрди рдирд╣реАрдВ рд╣реЛрдЧрд╛

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 рд░рдВрдЧ, bg рд░рдВрдЧ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрд╡рдЬ рдореЛрдб: рдмреЛрд▓реНрдб, рдЗрдЯреИрд▓рд┐рдХ, рдирдХрд╛рд░рд╛рддреНрдордХ, ..) 'рдЯрд░реНрдорд┐рдирд▓' рд╡рд░реНрдЧ рдХреА 'curAttr' рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕рд╣реЗрдЬрдирд╛ рд╕рднреА рд╡рд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрджрд┐ рдирд╣реАрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреАрдЬреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рд╕рднреА рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╢рд╛рдпрдж ICursorState рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреИрд╕реЗ рдХреБрдЫ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рд╡реАрдЯреАрдИ рднреА рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реБрдЖ рдХрд░рддреА рдереА; рд╢рд╛рдпрдж рдЖрдкрдХреЛ VTE 731205 рдореЗрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдЯреНрд╕

@ 7PH рдЪреВрдВрдХрд┐ рдЖрдк рд╡реИрд╕реЗ рднреА DECSC рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╢рд╛рдпрдж рдЖрдк https://vt100.net/docs/vt510-rm/DECSC.html рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЕрднреА рднреА рдЧрд╛рдпрдм рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рднреА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдирд╣реАрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреАрдЬреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рд╕рднреА рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╢рд╛рдпрдж ICursorState рд╕реНрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреИрд╕реЗ рдХреБрдЫ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреАрдЖрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдФрд░ рдмрд╛рдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ https://github.com/xtermjs/xterm.js/issues/1526 рдкрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛

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