рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдЬреЛ рд╡рд┐рдлрд▓ рд░рд╣рд╛


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

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



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


рдмреЗрд╢рдХ, рд▓реЗрдЦ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдПрдХ рдЧрдВрднреАрд░ рд╕реНрдкреЙрдЗрд▓рд░ рдерд╛ред :)

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

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

рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ:


рдирд┐рд╖реНрдХрд░реНрд╖, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЖрдХрд╛рд░ рдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрдХреНрд░реЛрд▓рддрд╛рд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рдм рдХреБрдЫ рдЫрд╛рдирдиреЗ рдФрд░ рдлрд╕рд▓ рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдКрдВрдЧрд╛ :


рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджреЗрд╢ рд╣реИрдВ ... рдареАрдХ рд╣реИ, рд╢рд╛рдпрдж рддрдм рдмрдлрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рд╣реИ?


рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реБрдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ:

V501 ред рдмрд╛рдИрдВ рдУрд░ рдФрд░ '-' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ: рдмрдлрд░рд╣рд╛рдЗрдЯ - рдмрдлрд░рд╣рд╛рдЗрдЯ рдЯрд░реНрдордХрдВрдЯреНрд░реЛрд▓.cpp 592

bool TermControl::_InitializeTerminal()
{
  ....
  auto bottom = _terminal->GetViewport().BottomExclusive();
  auto bufferHeight = bottom;

  ScrollBar().Maximum(bufferHeight - bufferHeight); // <=  
  ScrollBar().Minimum(0);
  ScrollBar().Value(0);
  ScrollBar().ViewportSize(bufferHeight);
  ....
}

рдпрд╣ рдХреЛрдб рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рд╣реИ: "рд╕реНрдХреНрд░реЙрд▓рд╡реНрдпреВрдЕрд░ рдХреА рдКрдВрдЪрд╛рдИ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЬрд┐рд╕ рдЧреНрд░рд┐рдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдКрдВрдЪрд╛рдИ рдХреЛ рдирдХрд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВред"

рд╕реНрдХреНрд░реЙрд▓ рдКрдБрдЪрд╛рдИ рдХрд╛ рдЕрдиреБрдХрд░рдг, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдзрд┐рдХрддрдо рдкрд░ 0 рдХреНрдпреЛрдВ рдбрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ? рдкреНрд░рд▓реЗрдЦрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реБрдП , рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдХреЛрдб рдмрд╣реБрдд рд╕рдВрджрд┐рдЧреНрдз рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ: рд╕реНрд╡рдпрдВ рд╕реЗ рдПрдХ рдЪрд░ рдХреЛ рдШрдЯрд╛рдирд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдПрдХ рд╢реВрдиреНрдп рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдзрд┐рдХрддрдо рдлрд╝реАрд▓реНрдб рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди (1) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ :


рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:



рдЕрдЧрд░ рдХреБрдЫ рднреА, рддреЛ рдореИрдВ clamped 30 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП <Enter> рдЬрд╛рд╣рд┐рд░ рд╣реИ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓реЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдерд╛, рдХреА рдЬрдЧрд╣ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣реИрдВред BufferHeight - bufferHeight 0 рдХреЗ рд╕рд╛рде:

bool TermControl::_InitializeTerminal()
{
  ....
  auto bottom = _terminal->GetViewport().BottomExclusive();
  auto bufferHeight = bottom;

  ScrollBar().Maximum(0); // <=   
  ScrollBar().Minimum(0);
  ScrollBar().Value(0);
  ScrollBar().ViewportSize(bufferHeight);
  ....
}

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

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

рдЗрди рджреЛ рдЖрджрд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдмрдлрд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╣рдореЗрдВ рдмрд╕ рдХрд╣реАрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдорд╕реНрдпрд╛ рдЗрд╕рдореЗрдВ рд╣реИред

рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдкрдиреЗ рд╡реАрд░ рд╡рд╛рдж-рд╡рд┐рд╡рд╛рдж рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдереЛрдбрд╝рд╛ рдШреВрдордиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛:

// This event is explicitly revoked in the destructor: does not need weak_ref
auto onReceiveOutputFn = [this](const hstring str) {
  _terminal->Write(str);
};
_connectionOutputEventToken = _connection.TerminalOutput(onReceiveOutputFn);

рд╣рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░реЙрд▓рдкрдЯреНрдЯреА рдКрдкрд░ , рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдХреЙрд▓рдмреИрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд __connection.Start () рд╣рдорд╛рд░реЗ рдирдП рдорддрд▓рдм рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдПред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЙрдкрд░реЛрдХреНрдд рд▓рдВрдмреЛрджрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╣реИ рдЬрдм рд╣рдо рдмрдлрд░ рдХреЛ рдХреБрдЫ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рд╕реЗ рдЕрдкрдирд╛ рдбрд┐рдмрдЧ рд╢реБрд░реВ рдХрд░реЗрдВред

рд╣рдо рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ _terminal рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ :



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

рдЕрдм <F5> рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ... рдареАрдХ рд╣реИ, рддреЛ рдЪрд▓реЛ рджрд░реНрдЬрдиреЛрдВ рдмрд╛рд░ <Enter> рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рд╣рд┐рдЯ рдХрд░реЗрдВред рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, _buffer рдкрд░ рд╣рдо рдмрд╣реБрдд рд╣реА рд▓рд╛рдкрд░рд╡рд╛рд╣реА рд╕реЗ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ _viewport , рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдмрдлрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛ рд░рд╣рд╛, рдЬреЛ рдЖрдХрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдмрдврд╝рд╛ред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред_viewport ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХреЛрдб рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдЯреБрдХрдбрд╝реЗ рдкрд░ рдЙрдареЗ:

void Terminal::_AdjustCursorPosition(const COORD proposedPosition)
{
  ....
  // Move the viewport down if the cursor moved below the viewport.
  if (cursorPosAfter.Y > _mutableViewport.BottomInclusive())
  {
    const auto newViewTop =
      std::max(0, cursorPosAfter.Y - (_mutableViewport.Height() - 1));
    if (newViewTop != _mutableViewport.Top())
    {
      _mutableViewport = Viewport::FromDimensions(....); // <=
      notifyScroll = true;
    }
  }
  ....
}

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

void Terminal::_AdjustCursorPosition(const COORD proposedPosition)
{
  ....
  // Move the viewport down if the cursor moved below the viewport.
  if (cursorPosAfter.Y + 1 > _mutableViewport.BottomInclusive())
  {
    const auto newViewTop =
      std::max(0, cursorPosAfter.Y + 1 - (_mutableViewport.Height() - 1));
    if (newViewTop != _mutableViewport.Top())
    {
      _mutableViewport = Viewport::FromDimensions(....); // <=
      notifyScroll = true;
    }
  }
  ....
}

рдФрд░ рд▓реЙрдиреНрдЪ рдкрд░рд┐рдгрд╛рдо:


рдЪрдорддреНрдХрд╛рд░! рдореИрдВрдиреЗ ne рдорд╛рддреНрд░рд╛ рдФрд░ рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рдЪ рд╣реИ, рдЬрдм рддрдХ рд╣рдо рдХреБрдЫ рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рдХрд░рддреЗ ... рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ gif рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛:


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рдПрдХ рдирдИ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреВрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдЗрдП рдлрд┐рд░ X рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рдХреЗрд╡рд▓ X рдХреЛ 0 рд╣реЛрдиреЗ рдкрд░ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ

void Terminal::_AdjustCursorPosition(const COORD proposedPosition)
{
  ....
  if (   proposedCursorPosition.X == 0
      && proposedCursorPosition.Y == _mutableViewport.BottomInclusive())
  {
    proposedCursorPosition.Y++;
  }

  // Update Cursor Position
  ursor.SetPosition(proposedCursorPosition);

  const COORD cursorPosAfter = cursor.GetPosition();

  // Move the viewport down if the cursor moved below the viewport.
  if (cursorPosAfter.Y > _mutableViewport.BottomInclusive())
  {
    const auto newViewTop =
      std::max(0, cursorPosAfter.Y - (_mutableViewport.Height() - 1));
    if (newViewTop != _mutableViewport.Top())
    {
      _mutableViewport = Viewport::FromDimensions(....);
      notifyScroll = true;
    }
  }
  ....
}

рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЯреБрдХрдбрд╝рд╛ рдХрд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП Y рд╕рдордиреНрд╡рдп рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ ред рдлрд┐рд░ рд╣рдо рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ... рдХреНрдпрд╛ рд╣реБрдЖ?



рдмреЗрд╢рдХ, рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдкреЙрдЗрдВрдЯ рдХреЛ рд╢рд┐рдлреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрдлрд░ рдХреЛ рд╢рд┐рдлреНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реА рдХрдорд╛рдВрдб рдХреЗ рджреЛ рдХреЙрд▓ рджреЗрдЦрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред :)

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВрдиреЗ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд▓реМрдЯ рдЖрдпрд╛ рдЬрд┐рд╕ рдкрд░ рдореИрдВрдиреЗ рдбрд┐рдмрдЧ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛:

// This event is explicitly revoked in the destructor: does not need weak_ref
auto onReceiveOutputFn = [this](const hstring str) {
  _terminal->Write(str);
};
_connectionOutputEventToken = _connection.TerminalOutput(onReceiveOutputFn);

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


рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдореЗрдВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ str рд╕реНрдЯреНрд░рд┐рдВрдЧ рджрдмрд╛рдПрдБ рдЬрдм рдореИрдВ <Enter>?

  1. рд╕реНрдЯреНрд░рд┐рдВрдЧ "рд▓рдореНрдмреА рд╡рд░реНрдгрди" ред
  2. рдкреВрд░рд╛ рдмрдлрд░ рдЬреЛ рдЕрдм рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВред
  3. рд╕рдВрдкреВрд░реНрдг рдмрдлрд░, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ред

рдореИрдВ рдирд╣реАрдВ рдорд┐рдЯрд╛рдКрдВрдЧрд╛ - рд╕рдВрдкреВрд░реНрдг рдмрдлрд░, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ред рдФрд░ рдпрд╣ рдПрдХ рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдареАрдХ рдЗрд╕реА рд╡рдЬрд╣ рд╕реЗ рд╣реИ рдХрд┐ рд╣рдо рдЗрддрд┐рд╣рд╛рд╕, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд┐рдВрджреБрд╡рд╛рд░ рдЦреЛ рд░рд╣реЗ рд╣реИрдВред рдирдИ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░рд╛ рдорджрдж рдЖрдЙрдЯрдкреБрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ :


рдПрдХ рддреАрд░ рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕реНрдерд╛рди рдХреЛ рдЪрд┐рдиреНрд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╣рд╛рдБ "LONG DESCRIPTOIN" рдерд╛ ред рд╢рд╛рдпрдж рдлрд┐рд░ рдПрдХ рд▓рд╛рдЗрди рдХреА рднрд░рдкрд╛рдИ рдХреЗ рд╕рд╛рде рдмрдлрд░ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдВ? рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рдЗрд╕ рдХреЙрд▓рдмреИрдХ рдХреЛ рд╣рд░ рдЫреАрдВрдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ред

рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рддреАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдЬрдм рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ,

  • рдЬрдм рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд░реНрдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ;
  • рдЬрдм рд╣рдо рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ;
  • рдЬрдм рд╣рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдмрдлрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ <Enter> рджрд░реНрдЬ рдХрд░реЗрдВред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЪрд┐рддреНрд░ рез 18


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

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

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╛рдардХ рдХреЛ рдирд┐рд░рд╛рд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╢реЛрдз рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рд╕рд╛рде рдШреВрдордирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рдореБрдЖрд╡рдЬреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ #WindowsTerminal рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдПрдХ рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рддреБрд░рдВрдд рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИред рдмрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдкреГрд╖реНрда рдкрд░ "рд╕рдВрджреЗрд╢" рдлрд╝реАрд▓реНрдб рдореЗрдВ "#WindowsTerminal" рджрд░реНрдЬ рдХрд░реЗрдВ ред

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


рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдореИрдХреНрд╕рд┐рдо рдЬрд╝реЗрд╡рд┐рдЧреЗрдВрдЯрд╕реЗрд╡ред рд▓рд┐рдЯрд┐рд▓ рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдЬреЛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ ред

All Articles