Xterm.js: рдЪрдпрди рдХреЛ рдЙрд▓реНрдЯрд╛ рд╣реЛрдиреЗ рджреЗрдВ

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

рдЪреВрдВрдХрд┐ рд╣рдо рдЕрдм ::selection рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдм рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реАрдПрд╕ рдХреЛрдб рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╣реИред

screen shot 2017-06-09 at 4 40 40 pm

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЪреБрдиреМрддрд┐рдпрд╛рдБ рд╣реИрдВ:

  • рдЪрдпрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкрд╛рда рдХреЗ рдиреАрдЪреЗ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреГрдердХреНрдХрд░рдг рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдЪрдпрди рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд░рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред
  • рдЪреВрдВрдХрд┐ .xterm-rows рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрддреНрд╡ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪрдпрди рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╢реБрд░реВ рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рдЪрд╛рд░:

  • рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВ рдХрд┐ рдЪрдпрди 3 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ; рд╢реАрд░реНрд╖ рдкрдВрдХреНрддрд┐, рдордзреНрдп рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдирд┐рдЪрд▓реА рдкрдВрдХреНрддрд┐ (рдЬреИрд╕реЗ https://github.com/sourcelair/xterm.js/pull/691 рдореЗрдВ)
  • .xterm-rows рднреАрддрд░ рдордзреНрдп рдкрдВрдХреНрддрд┐ рддрддреНрд╡реЛрдВ рдХреЛ xterm-invert-selection рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдЕрдЧреНрд░рднреВрдорд┐ рд░рдВрдЧреЛрдВ рдХреЛ рдЙрд▓рдЯ рджреЗрддрд╛ рд╣реИред
  • рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ z-index: 1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдКрдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрдВрдХреНрддрд┐ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЪрдпрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред aria-hidden рдХреЛ рдЕрдЪреНрдЫреЗ рдЙрдкрд╛рдп рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдкрд╛рда рдХрд╛ рджреЛрд╣рд░рд╛рд╡ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╕рд┐рд░реНрдл 2 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рд╣реИред

areselection out-of-scope typenhancement

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

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╣рдо рдмрд╣реБрдд рдХрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░рд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ mix-blend-mode рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

.xterm-selection-layer {
    mix-blend-mode: exclusion;
}

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЧреИрд░-рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЪрдпрди рд░рдВрдЧ рдХреЗ рд╕рд╛рде рднреА, рдпрд╣ рдЕрдЧреНрд░рднреВрдорд┐, рдЪрдпрди рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛ рджреЗрдЧрд╛:

.xterm-selection-layer {
    mix-blend-mode: multiply;
}

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдЬ рдПрдЯреАрдПрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

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

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

рдпрд╣ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди/рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдпрд╛ рдХреБрдЫ рднреА рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред https://github.com/sourcelair/xterm.js/issues/720 рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдИрдПрдордУ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╣рдо рдмрд╣реБрдд рдХрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░рд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ mix-blend-mode рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

.xterm-selection-layer {
    mix-blend-mode: exclusion;
}

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЧреИрд░-рдЕрдкрд╛рд░рджрд░реНрд╢реА рдЪрдпрди рд░рдВрдЧ рдХреЗ рд╕рд╛рде рднреА, рдпрд╣ рдЕрдЧреНрд░рднреВрдорд┐, рдЪрдпрди рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛ рджреЗрдЧрд╛:

.xterm-selection-layer {
    mix-blend-mode: multiply;
}

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдЬ рдПрдЯреАрдПрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

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

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