ZModem рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо lrzsz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд/рднреЗрдЬ рд╕рдХреЗрдВ? рдХреНрдпрд╛ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ 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 рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╡реИрд╕реЗ рднреА рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдбреЗрдореЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬреЛ рдХреБрдЫ рднреА рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
^^ рдХреНрдпрд╛ рдореБрдЭреЗ рдпрд╣рд╛рдБ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ? 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
рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдорддрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдЕрдЪреНрдЫрд╛, рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)ред
рдмрд╕ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:
rz
рдирд┐рд░рд╕реНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИредrz/sz
рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рд╕реНрдерд┐рддрд┐ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред@jerch
1) рд╣рд╛рдВ, рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдЗрдирд┐рдЯ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣реА "ZMODEM рд╕рддреНрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ" рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рд╣реИ: рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИред
2) рдЕрднреА рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
3) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ FileReader API рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ progress
рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЛрдо progress
рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рджреЗ рд░рд╣рд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдХреЛ Chrome рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
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
рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ xterm рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рджреЛ рд╕реЗрдВрдЯ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ: рдореИрдВ рдПрдХ рдпреВрдЖрдИ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдШрдЯрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдб рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдорд╛рдиред рдХреБрдЫ рдЗрд╕ рддрд░рд╣
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ UI рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред