Terminal: [Conpty] рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдлрд╝рд░ре░ 2019  ┬╖  48рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/terminal

рдЪрд╛рд▓реВ: Microsoft Windows [Version 10.0.17763.134]

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдореЗрдВ conpty рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ:
https://github.com/wez/wezterm

рдореИрдВ target\debug\wezterm.exe рдЬреИрд╕реЗ cmd.exe powershell.exe рдФрд░ bash рдЬреИрд╕реЗ рдХрдВрд╕реЛрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдЬреЛ рдореБрджреНрджрд╛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рдмреИрд╢ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╛ рддреЛ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ cmd.exe рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рд╕реАрдзреЗ рдмреИрд╢ рд▓реЙрдиреНрдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, conpty рдорд╛рдЙрд╕ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рдирд┐рдЧрд▓рдиреЗ рд▓рдЧрддрд╛ рд╣реИ; рдореИрдВ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ vim рдХреЗ рд╕рд╛рде рд╡рд┐рдиреНрдпрд╕реНрдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХреЛрдИ рдкреНрд░рднрд╛рд╡реА рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рд╣рд╛рд╕рд┐рд▓ рд╣реИ set mouse=a ред

wsl-terminal рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди WSL рдЗрдВрд╕реНрдЯрд╛рд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдорд╛рдЙрд╕ рд╕рдкреЛрд░реНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ wezterm рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдЙрд╕ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдореЗрд░рд╛ рджреИрдирд┐рдХ рдбреНрд░рд╛рдЗрд╡рд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ vim рдФрд░ рдкрд╛рд░реНрд╕рд░ wezterm ред

рдореИрдВрдиреЗ рд╢реЗрд▓ рд╕реЗ рдорд╛рдЙрд╕ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП echo -e "\e[?1000h" рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ; рдЖрдо рддреМрд░ рдкрд░ (рд▓рд┐рдирдХреНрд╕ рдкрд░ рдФрд░ рдбрдмреНрд▓реВрдПрд╕рдПрд▓-рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдпрд╣ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХреНрд▓рд┐рдХ рдХреЛ рдЦреЛрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдЬреЛ рдХрдЪрд░рд╛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЬрдм рдореЗрд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ conpty рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рднреА рдирд┐рдЧрд▓ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЕрдкрдиреЗ рдкреАрдЯреА рдореЗрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реВрдВ?

рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ:
https://github.com/wez/wezterm/blob/master/src/winpty.rs
рдкреНрд░рд╡рд╛рд╣ CreatePipe рдкрд╛рдЗрдк рдХреА рдПрдХ рдЬреЛрдбрд╝реА, CreatePseudoConsole , рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдереНрд░реЗрдбрдкреНрд░реЛрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕реНрдкреЙрдиреНрдб рдмрдЪреНрдЪреЗ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдордПрд╕рдбреАрдПрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдирдореВрдиреЗ рдФрд░ рдпрд╣ рд░реЗрдкреЛ рднреА рдХрд░рддреЗ рд╣реИрдВред

Area-Interop Issue-Feature Product-Conpty

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

рдХрд┐рд╕реА рднреА рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ FYI рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ (/cc @SamuelEnglar!) рд╣рдордиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╡ рдЯреАрдо рдкрд░ рдХрд╛рдо рдмреБрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдкрдХреЗ рдкреИрд░ рдХреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдХрджрдо рдирд╣реАрдВ рдЙрдард╛ рд░рд╣реЗ рд╣реИрдВ!

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

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

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

рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдпреВрдбреЛрдХреЛрдирд╕реЛрд▓ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рдЯреНрд░реИрдХрд┐рдВрдЧ: рдПрдордПрд╕рдПрдлрдЯреА: 20469462

@ DHowett-MSFT рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЯрдкрдЯрд╛ рд╣реИ рдХрд┐ рдорд╛рдЙрд╕ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдкреАрдЯреА рд╕рд╛рдорд╛рди рдЕрдм рд╕рдВрднрд╡ рд╣реИ!

рдореЗрд░реЗ рдкрд╛рд╕ ConPTY рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рдЪрд╛рд╣рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред alacritty рдХреЗ рд╕рд╛рде рдЕрдм alacritty + ssh + tmux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ConPTY рд╕рдорд░реНрдерди рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд▓рд┐рдирдХреНрд╕ рдЯрд░реНрдорд┐рдирд▓ рд╣реИ, рдЕрдм рдХреЗрд╡рд▓ рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рдХреА рдХрдореА рд╣реИред

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

рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, vim рдФрд░ tmux рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреЗ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯ рднреЗрдЬрдирд╛ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдорд░реНрдерди рдпрд╣рд╛рдБ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдБ, рд╕рд╛рде рд╣реА рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдВрджрд░реНрдн рднреАред рдкрд┐рдЫрд▓реЗ рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рдореИрдВрдиреЗ рджреЛрд╣рд░реА рдмреВрдЯрд┐рдВрдЧ рдмрдВрдж рдХрд░ рджреА рд╣реИ рдФрд░ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ 10 рдЗрдирд╕рд╛рдЗрдбрд░ рдмрд┐рд▓реНрдб "рдлрд╛рд╕реНрдЯ" рд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЙрд╕ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ wsl2 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, x410 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЯрд░реНрдорд┐рдирд▓ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб wsl2 рдЗрдВрдЯрд░рдСрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ explorer.exe рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдЯрд┐рдХрдЯ рдмрд╣реБрдд рд╣реА рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рд╣реИ рдЬреЛ рдореБрдЭреЗ wsl2/рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рднрд╛рдЬрди/рд╡рд┐рдХрд╛рд╕ рдмреЙрдХреНрд╕ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕реНрдкреЙрдЯ рдУрдкрди рд╕реЛрд░реНрд╕ рд╣реИрдВ, рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдорд╛рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдирдкреБрдЯ рдХреЛ рдХрд╣реАрдВ рд╕реЗ /dev рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдмрд╕ рдХрд╕рдХрд░ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд╕рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдБ рдЕрдиреНрдпрдерд╛ :)

рдпрд╣ рдХрд╣рдиреЗ/рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡реЛрдЯ рдХрд┐ рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рдЗрддрдирд╛ рдкреНрдпрд╛рд░рд╛ рд╣реЛрдЧрд╛, рдФрд░ tmux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдмрд╣реБрдд рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдХреГрдкрдпрд╛ рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ

@ DHowett-MSFT, рдирд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреЗрдж рд╣реИ, рдХреНрдпрд╛ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ? рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рд▓реЗрдмрд▓/рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рджреЗрдЦрдирд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рджред

@damnskippy рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рд╕реМрдВрдкреА рдЬрд╛ рд░рд╣реА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЗрди-рдмреЙрдХреНрд╕ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХрдВрд╕реЛрд▓ рд╣реЛрд╕реНрдЯ (рдЖрдВрддрд░рд┐рдХ рдмрдЧ рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг) рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ _рд╡рд┐рд╢рд╛рд▓_ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ (рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреИрдорд╛рдиреЗ рдкрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдФрд░ рдЬрдмрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ v1.0 рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдЖрдЬ рдЗрд╕ рдкрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ "рдареАрдХ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ - рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред

рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╣рдореЗрдВ рдорд╛рдЙрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдорд┐рд▓рддрд╛, рд╣рдореЗрдВ рдЗрд╕ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рд╣рд░рд╛рддреЗ рд╣реБрдП, рдЗрд╕ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдорд┐рдбрдирд╛рдЗрдЯ рдХрдорд╛рдВрдбрд░ рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕рдореБрджрд╛рдп рдореЗрдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдбреЙрд╕рдмреЙрдХреНрд╕ рдРрдб-рдЗрди рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рднрд╛рд░реА рд╡рд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВ; рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореБрдЭреЗ рдорд╛рдЙрд╕ рд╕рдкреЛрд░реНрдЯ рдХреА рдпрд╛рдж рдЖрддреА рд╣реИ

рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА @ рджрд╛рд▓рдЪреАрдиреА-рдПрдордПрд╕рдПрдлрдЯреА рдмреНрд▓реЙрдЧ рдЕрдкрдбреЗрдЯ рдкрдврд╝рд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдо рдЗрд╕ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рддрдХ 1.0 рдХрд╛ рд▓рдХреНрд╖реНрдп рдмрдирд╛

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рддрдХ рдорд╛рдЙрд╕ рд╕рдкреЛрд░реНрдЯ рдорд┐рд▓реЗрдЧрд╛?

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдХрдард┐рди рдХрд╛рдо рдирд╣реАрдВред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдХрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, P==NP рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрддрдирд╛ рд╣реА рдХрдард┐рди рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЯрд░реНрдорд┐рдирд▓ 1.0-рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдЕрднреА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ?

рдлрд┐рд▓рд╣рд╛рд▓ рдирд╣реАрдВред рдХрд┐рд╕реА рдХреЛ рднреА рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЬрдм рдЯреАрдо рдореЗрдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИ рддреЛ рд╡реЗ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реМрдВрдк рджреЗрддреЗ рд╣реИрдВред

рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдХреНрдпрд╛ рдпрд╣рд╛рдБ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖реА (рдкрдврд╝реЗрдВ: рдкрд╛рдЧрд▓) рдбреЗрд╡рд▓рдкрд░ рдЗрд╕реЗ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЬрд╝рд░реВрд░, рдХреЛрдИ рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖реА рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЖрдЬрд╝рдорд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?

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

InputStateMachineEngine.cpp рдкрд░ рдПрдХ рдирдЬрд╝рд░ InputStateMachineEngine conpty рдкрд░ рднреЗрдЬреЗ рдЧрдП рдЗрдирдкреБрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ INPUT_RECORD s рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдПрдХ рдЙрджреНрдпрдореА рдпреБрд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ рддрд╛рдХрд┐ рд╡рд╣ рдЙрди рдорд╛рдЙрд╕ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рднреА рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХреЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ INPUT_RECORD s рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░ рд╕рдХреЗред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ INPUT_RECORD s рд╣реЛ, рддреЛ InteractDispatch::WriteInput рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣ рдЙрди INPUT_RECORD s рдХреЛ рдЗрдирдкреБрдЯ рдмрдлрд░ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рд╡реЗ рдЗрдирдкреБрдЯ рдмрдлрд░ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрдВрд╕реЛрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЬрд┐рди рдЪреАрдЬрд╝реЛрдВ рдкрд░ рдореИрдВ рдирдЬрд╝рд░ рд░рдЦреВрдВрдЧрд╛:

  • рдЬрдм рддрдХ рд╣рдо рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдореЛрдб рдореЗрдВ рди рд╣реЛрдВ рддрдм рддрдХ conhost рдорд╛рдЙрд╕рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдмрдлрд░ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЗрди рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдВред
  • VT рд╕реЗ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЗ рдРрдкреНрд╕ рдХреЛ INPUT_RECORD s рдХреА рд╕реНрдЯреНрд░реАрдо рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░реАрдо рдорд┐рд▓реЗрдЧреАред рдХреЙрдирд╣реЛрд╕реНрдЯ рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░, рд╣рдо рдЙрди рдорд╛рдЙрд╕ INPUT_RECORD s рдХреЛ рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╕рдВрд▓рдЧреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди VT рдорд╛рдЙрд╕ рдореЛрдб рдореЗрдВ рд╣реИред рдпрджрд┐ рд╣рдо рд╡рд╣ рдЕрдиреБрд╡рд╛рдж _before_ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯ рдмрдлрд░ рдореЗрдВ рд╣реИрдВ, рддреЛ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдп рдХрд░рдирд╛ VT рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдкрдврд╝реЗрдВ: wsl )ред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдорд╛рдЙрд╕ INPUT_RECORD рд╕реЗ VT-рдПрдиреНрдХреЛрдбреЗрдб рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ InputStateMachineEngine рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    • рдЗрд╕ рдкрд░ рдФрд░ рдЧреМрд░ рдХрд░реЗрдВ рддреЛ рдорд╛рдорд▓рд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╡рд┐рдВрдбреЛ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдереЗред рдпрд╣ рдХреЛрдб рджреЗрдЦреЗрдВ:

      https://github.com/microsoft/terminal/blob/2c8b3243dca0c48dd05ecd7b420a7a03b3e19c93/src/interactivity/win32/windowio.cpp#L113 -L129

      terminalMouseInput.HandleMouse рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡реАрдЯреА рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛ рдкреНрд░реЛ рд╕реЗ рд╣реА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ InputStateMachineEngine рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ( InteractDispatch рдкрд░ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдФрд░ рдпрджрд┐ рд╡рд╣ рд╡рд┐рдзрд┐ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрдЪрд┐рдд INPUT_RECORD рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ

    • рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрдирдкреБрдЯрдмрдлрд░ рдХреЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп terminalMouseInput.HandleMouse рдХреЙрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди INPUT_RECORD s рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдХреНрдпрд╛ рд▓реЗрдирд╛-рджреЗрдирд╛? рдорд╛рдЙрд╕ рдкреНрд░рд╛рдЪреАрди рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдпрд╣ рдареАрдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рддрдм рддрдХ рдореБрдЭреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛?

рдпрджрд┐ рдЖрдкрдХреЛ VT рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рдБред

рдХрд┐рд╕реА рднреА рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ FYI рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ (/cc @SamuelEnglar!) рд╣рдордиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╡ рдЯреАрдо рдкрд░ рдХрд╛рдо рдмреБрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдкрдХреЗ рдкреИрд░ рдХреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдХрджрдо рдирд╣реАрдВ рдЙрдард╛ рд░рд╣реЗ рд╣реИрдВ!

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдирд╛ рд╕рдордп рдЗрддрдирд╛ рд╕рд╣реА рдирд╣реАрдВ рдмреБрдХ рдХрд░ рдкрд╛рдпрд╛!

рдореИрдВ рдмрд╕ рджреВрд░рд╕реНрде рд╡рд┐рдХрд╛рд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде VSCode рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рдерд╛ рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХреАрдХреГрдд рдЯрд░реНрдорд┐рдирд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ tmux рдореЗрдВ рдорд╛рдЙрд╕ рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ! рдкреИрдирд▓ рдЪрдпрди, рд╡рд┐рдВрдбреЛ рдЪрдпрди, рдкреИрдирд▓ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛ рдФрд░ рд╕реНрдХреНрд░реЙрд▓ рд╡реНрд╣реАрд▓ рд╕рднреА рдХрд╛рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЯрд░реНрдорд┐рдирд▓ рдУрдкрди рд╕реЛрд░реНрд╕ рд╡реАрдПрд╕ рдХреЛрдбрд┐рдпрдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ... рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ

рдХрд┐рд╕реА рднреА рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ FYI рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ (/cc @SamuelEnglar!) рд╣рдордиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╡ рдЯреАрдо рдкрд░ рдХрд╛рдо рдмреБрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдкрдХреЗ рдкреИрд░ рдХреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдХрджрдо рдирд╣реАрдВ рдЙрдард╛ рд░рд╣реЗ рд╣реИрдВ!

@ DHowett-MSFT @zadjii-msft @bitcrazed рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдпрд╣рд╛рдВ рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рдЖрдкрдХрд╛ рд╕рдВрдЪрд╛рд░ рд╢рд╛рдирджрд╛рд░ рд░рд╣рд╛ рд╣реИ; рдпрд╣ рдЖрдкрдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЖрдкрдХреА рдЯреАрдо (рдУрдВ) (рдХрдВрд╕реЛрд▓/рдбрдмреНрд▓реВрдПрд╕рдПрд▓/рдПрдордПрд╕рдПрдлрдЯреА-рд▓рд┐рдирдХреНрд╕) рдореЗрд░реЗ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ (рдЧреИрд░-рдирд┐рдХреНрд╕) рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИрдВред рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рд░реНрдп рдЬрд╛рд░реА рд░рдЦреЗрдВ

@thinkjrs рдЖрдкрдХреА рддрд░рд╣ рдХреЗ рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

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

рд╣рдо рдордЬрд╛рдХ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рдереЗ рдЬрдм рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ WSL тАЛтАЛрдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдорд╛рдЙрдЬрд╝ рд╣реИрдВ? рдпрд╛рдиреА tmux рдкреИрдирд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ, weechat рдФрд░ irssi рдореЗрдВ рдЪреИрдирд▓/рд╕рд░реНрд╡рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, (n)vim рдХреНрд▓рд┐рдХ, aptitude рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, htop рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, рдЖрджрд┐ред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ WSL тАЛтАЛрдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдорд╛рдЙрдЬрд╝ рд╣реИрдВ? рдпрд╛рдиреА tmux рдкреИрдирд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ, weechat рдФрд░ irssi рдореЗрдВ рдЪреИрдирд▓/рд╕рд░реНрд╡рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, (n)vim рдХреНрд▓рд┐рдХ, aptitude рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, htop рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, рдЖрджрд┐ред

@dmxt рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ wsltty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рднреА рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЧрдд рд░рд╣рд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ WSL тАЛтАЛрдореЗрдВ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдорд╛рдЙрдЬрд╝ рд╣реИрдВ? рдпрд╛рдиреА tmux рдкреИрдирд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ, weechat рдФрд░ irssi рдореЗрдВ рдЪреИрдирд▓/рд╕рд░реНрд╡рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, (n)vim рдХреНрд▓рд┐рдХ, aptitude рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, htop рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, рдЖрджрд┐ред

@dmxt рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ wsltty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рднреА рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЧрдд рд░рд╣рд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред

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

рдореИрдВрдиреЗ I/O рдореЗрдВ рдереЛрдбрд╝реА рд╡рд┐рд▓рдВрдмрддрд╛ рджреЗрдЦреА рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ WSL1 рд╕рд┐рд╕реНрдЯрдо рдХреА рдЕрдбрд╝рдЪрди рд╣реИред рдореИрдВ рдмреЗрдпрд░-рдореЗрдЯрд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╣реВрдВ рдФрд░ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде 0ms рд▓реЗрдЯреЗрдВрд╕реА рд╣реИред

@dmxt @offero рдореБрдЭреЗ XShell (рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди, рдпрд╛ WSL тАЛтАЛрдореЗрдВ ssh) рдХреЗ рд╕рд╛рде рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ - рдЗрд╕рдореЗрдВ рдорд╛рдЙрд╕ рд╕рдкреЛрд░реНрдЯ рдЖрджрд┐ рд╣реИ, рдмрд╕ FYI рдХрд░реЗрдВред рд╕рд╛рде рд╣реА рдЬрд┐рди рдРрдкреНрд╕ рдХреЛ рдорд╛рдЙрд╕ рд╕рдкреЛрд░реНрдЯ рдХреА рдмреБрд░реА рддрд░рд╣ рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рд╡реЗ рд╣реИрдВ рдорд┐рдбрдирд╛рдЗрдЯ рдХрдорд╛рдВрдбрд░ рдФрд░ рдорд╛рдЗрдХреНрд░реЛ рдПрдбрд┐рдЯрд░

рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕реЗ ConEmu . рдореЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдЗрд╕реЗ рдХрдм рддрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░реЛрдбрдореИрдк рдпрд╛ рдЯрд╛рдЗрдорд▓рд╛рдЗрди? рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдП рдмрд┐рдирд╛ v1.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХрд╛ рдЖрдЬрдХрд▓ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдВрдбреЛрдЬ рдЯрд░реНрдорд┐рдирд▓ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХреЗ рдирд╡реАрдирддрдо рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕реНрдЯреЛрд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ @kvnxiao рд╕рдорд░реНрдерд┐рдд рд╣реИ (рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдо рдореЗрдВ), рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ

@ fat0troll рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдо рдореЗрдВ рднреА set mouse=a , рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдкреБрд░рд╛рдиреЗ рдХреЙрдирд╣реЛрд╕реНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдЯрд░реНрдорд┐рдирд▓ 1.0.1401.0 рдкрд░ рдирд╣реАрдВред

set nocompatible
syntax on
set number
set mouse=a
set backspace=indent,eol,start

рдЙрд╕ рд╡рд┐рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдореИрдВ рд╡рд┐рдо рдХреА рд╡рд┐рдВрдбреЛ рдХреЗ рдЕрдВрджрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдХрд░реНрд╕рд░ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рд╣реИред 1.0.1401.0, рд╡рд┐рдВрдбреЛрдЬрд╝ рдмрд┐рд▓реНрдб 18368.836 (рдпрджрд┐ рдЗрд╕рдХрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ)ред

@kvnxiao рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк OpenSSH_For_Windows_7.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ (8.x рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдЬреЛ рдЗрд╕реЗ рдорд╛рдЙрд╕ рдореЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

рд╣рдордиреЗ рдЗрд╕реЗ рд╕рднреА рд╡реАрдЯреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХрд╛ рдЖрдЬрдХрд▓ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдирд┐рд░реНрджрдпреА рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

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

"рдкреВрд░реНрдг" рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рд░реЛрдбрдореИрдк рдореЗрдВ рдХреНрдпрд╛ рдЫреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЙрдирд╣реЛрд╕реНрдЯ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИ?

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

@niklaskorz рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдКрдкрд░ рдЙрдард╛рдиреЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдЬрдм рдореЗрд░реЗ рдЬреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рд╢реНрди рд╣реИрдВ, рдЬреЛ рдЕрднреА рднреА рдЕрдирд╕реБрд▓рдЭреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ?

рдЖрдк рдмрд┐рд▓рдХреБрд▓ рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╡рд░реНрдХрдЖрдЗрдЯрдо, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдХрд┐рд╕реА рднреА рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдорд╛рдЙрд╕ рдЗрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ Win32 рдХрдВрд╕реЛрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рд╣реИ, "рдЯрд░реНрдорд┐рдирд▓ 1.x" (рдореАрд▓ рдХрд╛ рдкрддреНрдерд░) рдХреЗ рд▓рд┐рдП рд╕реНрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрднреА рдФрд░ 2.0 рдХреЗ рдмреАрдЪ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд╣реИред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдереЛрдбрд╝рд╛ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрдХрдЖрдЗрдЯрдо 1.0 рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдмреЗрд╕рдмреНрд░реА рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрдм рд╣реЛрдЧрд╛, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

FIWW, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереА, рддреЛ рдирдпрд╛ Powershell Out-ConsoleGridView (https://github.com/PowerShell/GraphicalTools) рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рддреНрдпрд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╣реИред рд╡рд╣рд╛рдВ рдорд╛рдЙрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреНрд░реИрдХрд┐рдВрдЧ рдмрдЧ рджреЗрдЦреЗрдВ: https://github.com/PowerShell/GraphicalTools/issues/95

рдЗрд╕реЗ Terminal.Gui (https://github.com/tig/gui.cs) рдХреЗ рдКрдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЕрднреА-рдЕрднреА Terminal.Gui рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирдореВрдирд╛ рдРрдк рдмрдирд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдорд╛рдЙрд╕ рд╕рдорд░реНрдерди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ WT рдореЗрдВ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд░рд╣реЗрдЧреА!

рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрд╣ Terminal.Gui (https://github.com/tig/gui.cs) рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд┐рдд GUI рдХрдВрд╕реЛрд▓ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдорд░ рд╣реИред

@kvnxiao рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк OpenSSH_For_Windows_7.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ (8.x рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдЬреЛ рдЗрд╕реЗ рдорд╛рдЙрд╕ рдореЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

рд╣рдордиреЗ рдЗрд╕реЗ рд╕рднреА рд╡реАрдЯреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХрд╛ рдЖрдЬрдХрд▓ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдирд┐рд░реНрджрдпреА рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдмрд┐рд▓реНрдб-рдЗрди рдУрдкрдирд╢ рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреИрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

@kvnxiao рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк OpenSSH_For_Windows_7.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ (8.x рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдЬреЛ рдЗрд╕реЗ рдорд╛рдЙрд╕ рдореЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред
рд╣рдордиреЗ рдЗрд╕реЗ рд╕рднреА рд╡реАрдЯреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХрд╛ рдЖрдЬрдХрд▓ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдирд┐рд░реНрджрдпреА рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдмрд┐рд▓реНрдб-рдЗрди рдУрдкрдирд╢ рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреИрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ (рдЪреЙрдХрд▓реЗрдЯ рд╕реЗ рдУрдкрдирд╢ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ ):

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк OpenSSH_For_Windows_7.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ (8.x рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдЬреЛ рдЗрд╕реЗ рдорд╛рдЙрд╕ рдореЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

рд╣рдордиреЗ рдЗрд╕реЗ рд╕рднреА рд╡реАрдЯреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@DHowett рдЗрд╕ рд╕рдВрджрд░реНрдн рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ OpenSSH_for_Windows_8.0p1, LibreSSL 2.6.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдПрдЧреА?

рдореИрдВ tmux рдорд╛рдЙрд╕ рдореЛрдб рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдПрдХ Ubuntu рдорд╢реАрди рдХреЗ рд▓рд┐рдП SSH рдХреЗ рдЯрд░реНрдорд┐рдирд▓ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдЕрднреА рднреА рдХреЗрд╡рд▓ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ 8.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖред

рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдЙрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реА рд╣реИ?

рдЖрд╣, 8.x рдореЗрдВ x 1 рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ 8.0 рдмрд┐рд▓реНрдб рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИред

рдЖрд╣, 8.x рдореЗрдВ x 1 рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ 8.0 рдмрд┐рд▓реНрдб рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╢реЙрдЯ рджреВрдВрдЧрд╛ред

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЕрджреНрднреБрдд, рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрдиреЗ рд▓рдЧрд╛ред

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

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ ReadConsoleInputW рдФрд░ PeekConsoleInputW рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛
рд╡рд┐рдВрдбреЛрдЬ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВред

SetConsoleMode(hin,  ENABLE_VIRTUAL_TERMINAL_INPUT);
SetConsoleMode(hout, ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
char *vt_mouse_input_enable_cmd  = "\x1b[?1000h\x1b[?1003h\x1b[?1006h";
DWORD written;
WriteConsoleA(hout, vt_mouse_input_enable_cmd, strlen(vt_mouse_input_enable_cmd), &written, NULL);

рдлрд┐рд░, рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХреЛ VT рдПрд╕реНрдХреЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ (sgr-1006) (рдЬреИрд╕реЗ \x1b[<0;10;20M ) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди, рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЖ рдЧрдИред

рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЗрдирдкреБрдЯ (рдЬреИрд╕реЗ рддреАрд░ рдХреБрдВрдЬрд┐рдпрд╛рдБ) рдХреЛ VT рдПрд╕реНрдХреЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ (рдЬреИрд╕реЗ \x1b[A ) рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрди рдЕрд╡рд╛рдВрдЫрд┐рдд VT рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдо рдХреЛ win32 API рдХреА рдкреНрд░рдореБрдЦ рдШрдЯрдирд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА,
рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзреВрд░рд╛ рд╣реИред
(рд╡рд░реНрдЪреБрдЕрд▓ рдХреБрдВрдЬреА рдХреЛрдб рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рд╕реНрдХреИрди рдХреЛрдб рдЖрдХрд╕реНрдорд┐рдХ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрджрд┐)

рдореЗрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИред
https://gist.github.com/Hamayama/6add968870269f2426716fad79724b31
( PDC_read_console_input_w рдФрд░ PDC_peek_console_input_w рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВред)

рдореИрдВ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╡реАрдЯреА рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

char *vt_key_input_disable_cmd = "\x1b[?9XXXl";
DWORD written;
WriteConsoleA(hout, vt_key_input_disable_cmd, strlen(vt_key_input_disable_cmd), &written, NULL);

рдпрд╛

SetConsoleMode(hin, ENABLE_VIRTUAL_TERMINAL_MOUSE_INPUT_ONLY);

рд▓реЗрдХрд┐рди, рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ...

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ src/terminal/parser/InputStateMachineEngine.cpp: 391 (SGR VT-рдЕрдиреБрдХреНрд░рдореЛрдВ рдХрд╛ INPUT_RECORD s рдореЗрдВ рдЕрдиреБрд╡рд╛рдж) рдореЗрдВ рдорд╛рдЙрд╕ рдХреА рдЧрддрд┐ рдХреА рдХреЛрдИ рдЯреНрд░реИрдХрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЯрд░реНрдорд┐рдирд▓ ConPTY рдХреЗ рд▓рд┐рдП VT-рдЕрдиреБрдХреНрд░рдо рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ConPTY рдХреЗрд╡рд▓ рдорд╛рдЙрд╕ рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИред рдорд╛рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

src/terminal/parser/InputStateMachineEngine.cpp: 391 :

success = _UpdateSGRMouseButtonState(id, firstParameter, buttonState, eventFlags);
success = success && _WriteMouseEvent(parameters.at(1), parameters.at(2), buttonState, modifierState, eventFlags);

рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде, рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИред

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

src/terminal/parser/InputStateMachineEngine.hpp: 172 :

+ size_t _mouseColumn = 0;
+ size_t _mouseLine = 0;

src/terminal/parser/InputStateMachineEngine.cpp: 391 :

- success = success && _WriteMouseEvent(parameters.at(1), parameters.at(2), buttonState, modifierState, eventFlags);
+ auto mouseColumn = parameters.at(1).value_or(0);
+ auto mouseLine = parameters.at(2).value_or(0);
+ auto isMoved = mouseColumn! = _mouseColumn || mouseLine! = _mouseLine;
+ if (isMoved)
+ {
+     _mouseColumn = mouseColumn;
+     _mouseLine = mouseLine;
+ }
+ success = (success || isMoved) && _WriteMouseEvent(mouseColumn, mouseLine, buttonState, modifierState, eventFlags);

рдиреЛрдЯ: рдХреНрд▓рд╛рд╕рд┐рдХ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрд╕рдЬреАрдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдорд╛рдЙрд╕ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

рд╡рд┐рдВрдбреЛрдЬ рдкрд╛рд╡рд░рд╢реЗрд▓

PS C:\Users> [char]0x1b + "[?1003;1004;1006h"

рд╕рд╣реА рдХрдорд╛рдгреНрдб

C:\Users> echo Ctrl+[ [?1003;1004;1006h

рдорд╛рдкрджрдВрдбреЛрдВ
  • 1003 - рдХреЛрдИ рднреА_EVENT_MOUSE_MODE
  • 1004 - рдХрд┐рд╕реА рднреА рдЕрд╕рдорд░реНрдерд┐рдд рдореЛрдб (рдЬреИрд╕реЗ 1001 рдпрд╛ 9999 ) рдХреЛ ConPTY рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рд╣реА рдЕрдиреБрдХреНрд░рдо рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  • 1006 - SGR_EXTENDED_MODE

рдирддреАрдЬрддрди, рдЯрд░реНрдорд┐рдирд▓ рдорд╛рдЙрд╕ рдЗрд╡реЗрдВрдЯ рдХреЛ ConpTY рдХреЛ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдЬреЛ рдХреНрд▓рд╛рд╕рд┐рдХ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП INPUT_RECORD s рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

рдЕрдЪреНрдЫреА рдкрдХрдбрд╝ред рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ: рдореБрд╕реНрдХрд╛рди:

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

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

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

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

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

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

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