Xterm.js: ZModem рд╕рдорд░реНрдерди?

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

ZModem рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо lrzsz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд/рднреЗрдЬ рд╕рдХреЗрдВ? рдХреНрдпрд╛ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ?

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

рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ xterm рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рджреЛ рд╕реЗрдВрдЯ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ: рдореИрдВ рдПрдХ рдпреВрдЖрдИ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдШрдЯрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдб рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдорд╛рдиред рдХреБрдЫ рдЗрд╕ рддрд░рд╣

term.on('transfer', (transfer) => {

  // accept or reject the transfer
  transfer.accept();

  // listen for progress
  transfer.on('progress', ...);

  // data chunks arrive
  transfer.on('data', ...);

  // transfer has finished
  transfer.once('end', ...);

  // cancel transfer
  transfer.abort();

});

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ UI рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ xterm.js рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдореИрдВ рдмреИрд╢ (рдПрдХ рдкреВрд░реНрдг-рд╕реБрд╡рд┐рдзрд╛ рдмреИрд╢) рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП xterm.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмреИрд╢ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ rz/sz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб/рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

рдЕрдЧрд░ рдореИрдВ SecureCRT/Xshell рдХреЗ рд╕рд╛рде рдорд╢реАрди рдХреЗ рд╢реЗрд▓ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ rz / sz рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб/рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдорд╢реАрди рдХреЗ рд╢реЗрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП zterm.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ rz / sz рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб/рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

Zmodem PTY рд╕рд┐рд╕реНрдЯрдо рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реАрд░рд┐рдпрд▓ рд▓рд╛рдЗрди рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдХреА рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА xterm.js рдореЗрдВ zssh рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред xterm.js рд╣реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ PTY рдХреЗ рдорд╛рд╕реНрдЯрд░ IO рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рдЙрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ xterm.js рд╕рд░реНрд╡рд░ рдкрд╛рд░реНрдЯ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рдЙрд╕реА рдорд╢реАрди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИ рдЬреИрд╕реЗ рд╕рд┐рдХреНрдпреЛрд░рд╕реАрдЖрд░рдЯреА рдХрд░рддрд╛ рд╣реИред

рддреЛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ - рдЖрдк рдХрд┐рд╕ рдорд╢реАрди рд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╛рдЗрд▓ рдХреЛ рдХрд┐рд╕ рдорд╢реАрди рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдореЗрдВ xterm.js рдХреЗ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд░реНрдорд┐рдирд▓ рдЪреИрдирд▓ рдирд╣реАрдВ рд╣реИ)ред

|       local machine               |
|   +----------------------------+  |
|   |       browser              |  |
|   |   +-------------------+    |  |               +---------------------------+          +------------------------+
|   |   |                   |    |  |               |   proxy                   |          |                        |
|   |   |   web terminal    >----------------------->   server part of xterm.js >----------| romote machine terminal|
|   |   |                   |    |  |               +---------------------------+          +------------------------+
|   |   |                   |    |  |
|   |   +-------------------+    |  |
|   +----------------------------+  |
+-----------------------------------+

рдореИрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рд╕реЗ рджреВрд░рд╕реНрде рдорд╢реАрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд░рд┐рдореЛрдЯ рдорд╢реАрди рдХреЛ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдирд╣реАрдВ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдореЗрдВ xterm.js . рдХреЗ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд░реНрдорд┐рдирд▓ рдЪреИрдирд▓ рдирд╣реАрдВ рд╣реИ

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрдИ рдпреБрдХреНрддрд┐ рд╣реИ?

рд╡реИрд╕реЗ рдЖрдк рдкреНрд░реЙрдХреНрд╕реА рд╕реЗ zssh (zmodem рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде), sftp рдпрд╛ scp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рддрдХ рдХреЛрдИ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддрдм рддрдХ рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╡реЗрдмрдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рд╕реАрдзреЗ рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдк/рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореЙрдбреЗрдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рдПрдХреНрд╕рдореЛрдбреЗрдо рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ), рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдмрд╣реБрдд рд╕реАрдорд┐рдд рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд╣реБрдВрдЪ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рддрд╛ рд╣реВрдВред рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдбрд╛рдЙрдирд▓реЛрдб рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ (рдЪреВрдВрдХрд┐ рдбреЗрдЯрд╛ рд╕реАрдзреЗ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрддрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЗрдПрд╕ рдХреЛ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рддрдм рддрдХ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред)

рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ rz/sz рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА FS рд╕реАрдорд╛рдУрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдореЙрдбреЗрдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ 'rz\r' рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рдФрд░ рдкрд╛рд░реНрд╕рд░ рдХреЛ рд╣реБрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ ZMODEM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ xterm.js рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдмрдлрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред :( рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реИ, рдФрд░ рдпрд╣ рддрдм рддрдХ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдмрд╣реБрдд рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реЛрдВред рдЕрдкрд▓реЛрдб FileReader рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб <a> рддрддреНрд╡реЛрдВ рдХреА "рдбрд╛рдЙрдирд▓реЛрдб" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред

рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ ZMODEM рдПрдХреАрдХрд░рдг рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ xterm.js рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреА рд╣реИ?

@FGasper рдирд╛рдЗрд╕ :) рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдиреЛрдб рдХреЗ рд╕реНрдЯреНрд░реАрдо рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдкреНрд░реЙрдХреНрд╕реА рдХрд░рддрд╛ рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдордВрдЪ-рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред (рд▓рдХрдбрд╝реА рдкрд░ рджрд╕реНрддрдХред)

@FGasper рд╕рд╛рдл-

рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ zmodem рдПрдбрдСрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЬрд╝рдореЛрдбреЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреНрдпрд╛ рд╣реИрдВ?

рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯрд░реНрдорд┐рдирд▓ рд╕рддреНрд░ рдХреЗ рднреАрддрд░/рдЕрдкрдиреЗ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рд╕реЗ рдлрд╛рдЗрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЖрдкрдХреЛ scp/sftp рдпрд╛ рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

iTerm2 рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣:
https://github.com/mmastrac/iterm2-zmodem

@parrisk X/Y/Z-MODEM рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реАрдзреЗ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдЯрд░реНрдорд┐рдирд▓ рдХрдиреЗрдХреНрд╢рди рдХрд╛ "рджреБрд░реБрдкрдпреЛрдЧ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╕рддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред POSIX рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП rz / sz рдЯреВрд▓ рд╣реИрдВред

рд╡реИрд╕реЗ xterm.js рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЖрджрд░реНрд╢ рдРрдбрдСрди рд╣реИ, рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рд░реНрд╡рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХреЛрдВ рдХреЗ рд▓рд┐рдП xterm.js рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛ред :+1:

NB: XMODEM рдФрд░ YMODEM рджреЛрдиреЛрдВ рдореЗрдВ рджреВрд╕рд░реА рддрд░рдл "рд╕рдВрдХреЗрдд" рдирд╣реАрдВ рджреЗрдиреЗ рдХрд╛ рджреЛрд╖ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рддреИрдпрд╛рд░ рд╣реИред (рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИрдВ!)

ZMODEM рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ "рдореИрдЬрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ" рднреЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдлрд┐рд░ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ, тАЬZMODEM рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛; рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВ?" рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рддреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░/рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЗрд╖рдХ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

xterm.js рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбреНрд░реИрдЧ'рдПрди рдбреНрд░реЙрдк рдХрд░рдирд╛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣реЛрдЧрд╛ - рдорд╛рди рд▓реЗрдВ рдХрд┐ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдЯрд░реНрдорд┐рдирд▓ рд╢реЗрд▓ рдкрде рдкрд░ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЬрдм рддрдХ рдХрд┐ xterm.js рджреВрд░рд╕реНрде рд╢реЗрд▓ рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдбрд╝рдк рдирд╣реАрдВ рд╕рдХрддрд╛ред рд╡рд╣реА рдкреАрдЫреЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ - рдпрджрд┐ ls рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЛ рджреВрд░рд╕реНрде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдбреНрд░реИрдЧ'рдПрди рдбреНрд░реЙрдк рдЖрдЙрдЯ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣реЛрдЧрд╛ред рдЕрдЪреНрдЫрд╛ рдмрд╕ рд╕рдкрдирд╛ рджреЗрдЦрдирд╛ :рдкрд▓рдХрдирд╛ :

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬрд╝рдореЛрдбреЗрдо рд╕рддреНрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж rz рдХреЛ рдбреНрд░реИрдЧ/рдбреНрд░реЙрдк рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

1) рдЕрдкрдиреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ rz рдЯрд╛рдЗрдк рдХрд░реЗрдВред
2) рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдВрджрд░ рдЦреАрдВрдЪреЗрдВ/рдЫреЛрдбрд╝реЗрдВред
3) рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд░реЗрдВред

рдкреНрд░рд╢реНрди: xterm.js рдЕрднреА рднреА IE рд╕рдорд░реНрдерди рдкрд░ рдХрд┐рддрдирд╛ рд╕реЗрдЯ рд╣реИ?

https://github.com/sourcelair/xterm.js/pull/938 рдХреЗ рдХрд╛рд░рдг v3 рдореЗрдВ рдХреЛрдИ рдФрд░ IE рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╡реИрд╕реЗ рднреА рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдбреЗрдореЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

image
^^ рдХреНрдпрд╛ рдореБрдЭреЗ рдпрд╣рд╛рдБ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ? npm install рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд╣реИрдВ ...

felipe@Macintosh-4 18:00:56 ~/code/p5-Net-WebSocket/demo
> sudo npm install
npm ERR! install Couldn't read dependencies
npm ERR! Darwin 16.7.0
npm ERR! argv "/opt/local/bin/node" "/opt/local/bin/npm" "install"
npm ERR! node v8.3.0
npm ERR! npm  v2.15.12
npm ERR! path /Users/felipe/package.json
npm ERR! code ENOPACKAGEJSON
npm ERR! errno -2
npm ERR! syscall open

npm ERR! package.json ENOENT: no such file or directory, open '/Users/felipe/package.json'
npm ERR! package.json This is most likely not a problem with npm itself.
npm ERR! package.json npm can't find a package.json file in your current directory.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/felipe/code/p5-Net-WebSocket/demo/npm-debug.log

рд╢рд╛рдпрдж рдЖрдк рднреВрд▓ рдЧрдП рд╣реИрдВ git clone ... ? рдФрд░ sudo рд╕рд╛рде рдХреНрдпреЛрдВ?

@FGasper

npm ERR! package.json ENOENT: no such file or directory, open '/Users/felipe/package.json'

рдЖрдк рдЕрдкрдиреЗ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ npm install рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рд░реЗрдкреЛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдирд╣реАрдВред

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдП рдмрд╛рдЗрдирд░реА рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб-рдкреАрдЯреАрдЖрдИ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? ZMODEM рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдореЛ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ UTF-8 рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ 0x8a рдХреЛ рдпреВрдЯреАрдПрдл -8 \ufffd . рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ

рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рддреНрд╡рд░рд┐рдд рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрдк рдиреЛрдб-рдкреАрдЯреАрд╡рд╛рдИ рдХреЗ рдПрдиреНрдХреЛрдбрд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреЛ 'рдмрд╛рдЗрдирд░реА' рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ xterm.js рдкрд░ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдкрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ node-pty <---> websocket <---> xterm.js рдпреВрдЯреАрдПрдл -8 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдлреНрд▓рд╛рдИ рдкрд░ рдЬреЗрдПрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдбреАрдХреЛрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреИрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╡рд╣ binary рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╣рд╛рдВ рд╣реИ? (рдореБрдЭреЗ рдиреЛрдб-рдкреАрдЯреАрдЖрдИ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ?)

рдЬреИрд╕рд╛ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдбреЗрдЯрд╛ app.js рд╣рд┐рдЯ рд╣реЛрдиреЗ рддрдХ рдкрд╣рд▓реЗ рд╣реА рджреВрд╖рд┐рдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдиреЛрдб-рдкреАрдЯреАрдЖрдИ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

ZMODEM рдПрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рд╡рд░реНрддрдиреА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдЙрдЪреНрдЪ-рдмрд┐рдЯ рд╡рд░реНрдгреЛрдВ рд╕реЗ 7-рдмрд┐рдЯ рддрдХ рдмрдЪ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ... Forsberg рдиреЗ рд╢рд╛рдпрдж рд╕реЛрдЪрд╛ рдХрд┐ рдЗрд╕рдХреА рдХрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд▓рд╛рдЗрдиреЗрдВ 8-рдмрд┐рдЯ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рдЧрдИрдВ, рд╣реЗред :)

рдЖрдк рд╕реАрдЯреАрдЖрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ {encoding: 'binary'} рдпрд╛ рдлреНрд▓рд╛рдИ рдкрд░ .setEncoding('binary') рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдиреЛрдб-рдкреАрдЯреА рдпреВрдЯреАрдПрдл 8 рдореЛрдб рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ...

  if (info[8]->ToBoolean()->Value()) {
#if defined(IUTF8)
    term->c_iflag |= IUTF8;
#endif
}

https://github.com/Tyriar/node-pty/blob/master/src/unix/pty.cc

рд╣рдореНрдо ... рдиреЛрдб-рдкреАрдЯреАрдЖрдИ рдЬреЛ xterm.js (0.4.1) рдореЗрдВ рдЦреАрдВрдЪрддрд╛ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рд╣реИ ... рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд╣ рдзреНрд╡рдЬ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред

.setEncoding('binary') рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рддрд╛ ... рдФрд░ рди рд╣реА encoding:"binary" рдореЗрдВ pty.spawn() рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ред

рдЯрд░реНрдорд┐рдпреЛ рдХрд╛ IUTF8 рдПрдХ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣ pty рдбрд┐рд╡рд╛рдЗрд╕ (рд▓рд╛рдЗрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдорд┐рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдорд▓реНрдЯреА рдмрд╛рдЗрдЯ UTF8 рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
рд╣рдореНрдо рд╢рд╛рдпрдж рдХрдард┐рди рддрд░реАрдХрд╛ - рдПрдиреНрдХреЛрдбрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

delete ptyObj._socket._readableState.decoder;
delete ptyObj._socket._readableState.encoding;

рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ xterm.js рддрдХ рдКрдкрд░ рдХреА рдУрд░ рдЯреВрдЯрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ)ред

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдиреЛрдб-рдкреАрдЯреАрдЖрдИ 0.6.4 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдХреЗ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ null ред ( _readableState рд╕рд╛рдорд╛рди рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рдереАред) рдпрд╣ рдЕрднреА рднреА рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рд╢реЗрд▓ рд╕рддреНрд░ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╣реИ, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

рдпрд╣ рдЕрднреА рднреА рд╢реЗрд▓ рд╕рддреНрд░ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ ...

рднрд▓реЗ рд╣реА рдЖрдк рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ {encoding: null} рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ?

рд╣рд╛рдВ, {encoding: null} рдХреЗ рд╕рд╛рде рднреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдлреНрд░реЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рд╣реИред

1) рд░рд┐рдореЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ https://github.com/FGasper/xterm.js.git рд╕реЗрдЯ рдХрд░реЗрдВред
2) рдЙрд╕ рд░реЗрдкреЛ рдХреА zmodem рд╢рд╛рдЦрд╛ рджреЗрдЦреЗрдВред
3) git submodule init; git submodule update
4) npm install (рдиреАрдЪреЗ рджреЗрдЦреЗрдВред)
5) npm start , рдлрд┐рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ localhost:3000 рд▓реЛрдб рдХрд░реЗрдВред (Chrome рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред)
6) рдПрдХ рдорд╢реАрди рдХреЗ рд▓рд┐рдП ssh рдЬрд┐рд╕рдореЗрдВ lrzsz рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
7) rz рдЯрд╛рдЗрдк рдХрд░реЗрдВ, рдФрд░ рдЕрдкрдиреЗ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рд╕реЗ рд░рд┐рдореЛрдЯ рдкрд░ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рднреЗрдЬреЗрдВред
8) sz <filename1> <filename2> тАж рдПрдХ рдмреИрдЪ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдЖрдкрдХреЗ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдкрд░ рднреЗрдЬреЗрдЧрд╛ред

(рдпреВрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдиреНрдпреВрдирддрдо рд╣реИ; рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкреЙрд▓рд┐рд╢ рдХрд░реЗрдЧрд╛ред)

рдЪрд░рдг 4 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдЬрдм рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдЕрдкрдиреЗ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ node-gyp рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдорддрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдЕрдЪреНрдЫрд╛, рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)ред

рдмрд╕ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • рдХреНрдпрд╛ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдЗрдирд┐рдЯ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ)? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IMHO рдХреЛ "рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рджрд░реНрдЬ рдХрд░реЗрдВ" рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  • "ZMODEM рд╕рддреНрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ" рдмрд╛рдзрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, "рдирд╣реАрдВ" рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЫреЛрд░ рдкрд░ rz рдирд┐рд░рд╕реНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
  • рдХреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЬрд╛рд░реА рд░рд╣рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА/рд╕рдВрдХреЗрддрдХ рдЦреАрдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдлреИрдВрд╕реА рд╕рд╛рдорд╛рди, рдПрдЯреАрдПрдо rz/sz рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рд╕реНрдерд┐рддрд┐ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

@jerch

1) рд╣рд╛рдВ, рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдЗрдирд┐рдЯ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣реА "ZMODEM рд╕рддреНрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ" рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рд╣реИ: рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИред

2) рдЕрднреА рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

3) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ FileReader API рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ progress рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЛрдо progress рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рджреЗ рд░рд╣рд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдХреЛ Chrome рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
image

4) рд╕рддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдЬреАрдм рдЕрдХреНрд╖рд░ ZMODEM рдкреНрд░рд╛рдкреНрдд-рдЗрдирд┐рдЯ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рднрд╛рдЧ рд╣реИрдВ: ** + ASCII CAN + B01 + 10 рд╣реЗрдХреНрд╕ рд╡рд░реНрдг + CR + 0x8a + XONред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ рдХрд┐ рд╡реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ ZMODEM-рд╕рдордЭрджрд╛рд░ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдореЗрдВ рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдмреАрдПрд╕ рд╡рд░реНрдг рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ?

рдЪрд▓ рд░рд╣реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдЪрд▓ рд░рд╣реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рд╢рд╛рдпрдж рдпрд╣ рдРрдирдХ рд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

A ZFIN, ZABORT, or TIMEOUT terminates the session; a ZSKIP terminates the processing of
this file.

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗред рдпреБрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ ZSINIT рдХреЗ рдмрд╛рдж рднреЗрдЬреЗ рдЧрдП Attn рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЗрд╖рдХ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Attn рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ ESC8 рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде: рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ lrzsz рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, ESC8 рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИ - рдЬреЛ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯрд░реНрдо IEXTEN рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдЕрднреА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХреБрдЫ рд╕рдордп рдХреА рдХрдореА рдореЗрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЗрд╕ рдкрд░ рд▓реМрдЯрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ xterm рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рджреЛ рд╕реЗрдВрдЯ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ: рдореИрдВ рдПрдХ рдпреВрдЖрдИ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдШрдЯрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдб рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдорд╛рдиред рдХреБрдЫ рдЗрд╕ рддрд░рд╣

term.on('transfer', (transfer) => {

  // accept or reject the transfer
  transfer.accept();

  // listen for progress
  transfer.on('progress', ...);

  // data chunks arrive
  transfer.on('data', ...);

  // transfer has finished
  transfer.once('end', ...);

  // cancel transfer
  transfer.abort();

});

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ UI рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

@mofux рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗред рдореИрдВрдиреЗ рдЬреЛ UI рдШрдЯрдХ рдбреЗрдореЛ рдореЗрдВ рдбрд╛рд▓реЗ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред

@FGasper рдЕрдЪреНрдЫрд╛ рдХрд╛рдо

рдореИрдВ ttyd рдХреЗ рд▓рд┐рдП ZModem рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рдЖрдкрдХрд╛ рдПрдкреАрдЖрдИ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ (https://github.com/tsl0922/ttyd/issues/37), рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

https://www.npmjs.com/package/zmodem.js

рдореИрдВрдиреЗ zmodem.js рдХрд╛ рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕реЗ рдореИрдВ xterm.js рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗрдЦреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреЛ рдХреЛрдИ рднреА zmodem.js рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдРрд╕рд╛ рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

ZMODEM рдПрдбрдСрди рдЕрдм рдорд░реНрдЬ рд╣реЛ рдЧрдпрд╛ рд╣реИ, FYI рдХрд░реЗрдВред

win7 рд╕рд┐рд╕реНрдЯрдо

$ npm run start-zmodem

> [email protected] start-zmodem E:\test\xterm\xterm.js
> node demo/zmodem/app

App listening to http://127.0.0.1:3100

рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛?
default

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

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

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

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

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

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

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