Linenoise: рдорд▓реНрдЯреАрдмрд╛рдЗрдЯ рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЬрдире░ 2012  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: antirez/linenoise

рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдореЗрдВ рдорд▓реНрдЯреАрдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ASCII рд░реЗрдВрдЬ рд╕реЗ рдкрд░реЗ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ред рд░рд┐рдлреНрд░реЗрд╢рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдо рд╢рд┐рдлреНрдЯ рдХреА рдЧрдгрдирд╛ strlen() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рддреБрд░реНрдХреА рдореЗрдВ '┼Ю' рдЬреИрд╕реЗ 2-рдмрд╛рдЗрдЯ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП 1 рдХреЗ рдмрдЬрд╛рдп 2 рджреЗрддрд╛ рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ mbstowcs() рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрд▓рдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдКрдкрд░, рдиреАрдЪреЗ рддреАрд░, рдПрдХ рдЪрд░рд┐рддреНрд░ рдорд┐рдЯрд╛рдирд╛, рдЖрджрд┐)ред

рдФрд░ рдЪреВрдВрдХрд┐ рд╡реЗ рдлрд╝рдВрдХреНрд╢рди LC_CTYPE рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рдпрд╛ рддреЛ рдЖрдк рдпрд╛ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдХреЗрд▓ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓реЛрдХреЗрд▓ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд▓реЛрдХреЗрд▓ (LC_ALL, "") рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзрдиреНрдпрд╡рд╛рджред

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

рдореЗрд░рд╛ рдХрд╛рдВрдЯрд╛ (https://github.com/yhirose/linenoise/tree/utf8-support) рдЕрдм рдпреВрдирд┐рдХреЛрдб 11.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдВрдЯреАрд░реЗрдЬрд╝/рд▓рд╛рдЗрдиреЛрдЗрд╕ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

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

рджреЗрдЦреЗрдВ: http://www.cl.cam.ac.uk/~mgk25/unicode.html

рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, https://github.com/msteveb/linenoise , рдЬрд┐рд╕рдореЗрдВ utf-8 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореИрдВ рд╕рд╛рдорд╛рди рд╕реЗ рдХрд╛рдлреА рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреБрдЫ рдЕрдЬреАрдм рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ mbstowcs() рдХреЗ рдмрдЬрд╛рдп strlen() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдорд╛рдиреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмреИрдХрд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддреГрдд рд╡рд░реНрдгреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ ..

рдпреВрдЯреАрдПрдл -8 рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рд╕рдорд░реНрдерди рдкрд░ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рд▓реЛрдХреЗрд▓ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ uClibc рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдкрд░ utf-8 рдХрдВрд╕реЛрд▓ рдХреЛ рдЦреБрд╢реА рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдореЗрд░рд╛ рднреА рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ; рдореИрдВрдиреЗ рд╢реЗрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди-рд╢реЛрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЕрдЧрд░ рдореБрдЭреЗ рд░рдВрдЧреАрди рд╕рдВрдХреЗрдд рдЪрд╛рд╣рд┐рдП, рддреЛ рдПрд╕реНрдХреЗрдк-рдХреЛрдб рдХреЛ рд▓рдВрдмрд╛рдИ рдЧрдгрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдПрдХ рд╕рд░рд▓, рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдпрд╛ рддреЛ рд╣реИ:

1) рдкреНрд░реЙрдореНрдкреНрдЯ рдХреА рд▓рдВрдмрд╛рдИ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
2) рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ)

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

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

рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдкрд░ 'utf-8 рд╕рдкреЛрд░реНрдЯ' рд╢рд╛рдЦрд╛ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд UTF-8 рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬреЛ рдирд╡реАрдирддрдо рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг 1.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ:

  • рдорд▓реНрдЯреА-рдмрд╛рдЗрдЯ рд╡рд░реНрдг: ├╢ (U+00F6)
  • рдмрд╣реБ-рдХреЛрдб рд╡рд░реНрдг: o╠И (U+006F U+0308)
  • рд╡рд┐рд╕реНрддреГрдд рд╡рд░реНрдг: цЧецЬмшкЮ ('рдЬрд╛рдкрд╛рдиреА')
  • рдЙрдкрд░реЛрдХреНрдд рд╡рд░реНрдгреЛрдВ рд╕рд╣рд┐рдд рд╢реАрдШреНрд░ рдкрд╛рда рдФрд░ ANSI рд░рдВрдЧреАрди рдкрд╛рда рд╕реЗ рдмрдЪ рдЧрдПред

рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ https://github.com/msteveb/linenoise рдХреА рдХреЛрд╢рд┐рд╢ рдХреА

рд╣реИрд▓реЛ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ:

  1. рд╕реА рд╕рд╛рджреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдмрд╣реБ-рдмрд╛рдЗрдЯ рдЬрд╛рдЧрд░реВрдХ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ @yhirose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  2. рдПрдХ рдПрдкреАрдЖрдИ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ рдЬреЛ рд▓рд╛рдЗрдирдиреЛрдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╛рджреЗ C рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
  3. рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ @yhirose рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдорд▓реНрдЯреА-рдмрд╛рдЗрдЯ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП, рд▓рдВрдмрд╛рдИ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдирдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рд╕рд╛рджрдЧреА рд▓рдЧрднрдЧ рдЕрдЫреВрддреА рд░рд╣рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рджреЛрдиреЛрдВ C++ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреА рдмрд╛рдЗрдЯ рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдорд╛рдирдХ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ, рдпрд╛ рд▓рд┐рдирдиреЛрдЗрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реА рдореЗрдВ рд╣реИ рдФрд░ рдЖрдк рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ @yhirose рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рд░-рдмрд╛рд░ рд▓рд┐рдЦрд╛ рд╣реИред

рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рджред

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

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

  • уБВ (рдпреВ+3042): E3 81 82 (3 рдмрд╛рдЗрдЯреНрд╕): рдЪреМрдбрд╝рд╛ (2 рдХреЙрд▓рдо рдЪреМрдбрд╝рд╛рдИ)
  • ├╢ (U+00F6): C3 B6 (2 рдмрд╛рдЗрдЯреНрд╕): рд╕рдВрдХреАрд░реНрдг (1 рдХреЙрд▓рдо рдЪреМрдбрд╝рд╛рдИ)
  • o╠И (рдпреВ+006рдПрдл рдпреВ+0308): 6F CC 88 (3 рдмрд╛рдЗрдЯреНрд╕): рд╕рдВрдХреАрд░реНрдг (1 рдХреЙрд▓рдо рдЪреМрдбрд╝рд╛рдИ)

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

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

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

рдореИрдВ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирдП рдПрдкреАрдЖрдИ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ !!

рдЖрдкрдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рдХреНрд╖реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдХреЛрдб рдФрд░ UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛрдб рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╢реЛрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдиреНрдп рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдХреЗрд╡рд▓ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╢реЛрдз рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╢рд╛рдЦрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рд╣реЗрдб рдФрд░ utf8-support рд╢рд╛рдЦрд╛ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИ ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╡рд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рдереЗ, рдореИрдВрдиреЗ linenoise.c рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рднреА UTF-8 рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ encodings/utf8.h рдФрд░ encodings/utf8.c рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ linenoise.h рдкрд░ linenoiseSetEncodingFunctions рдирд╛рдордХ рдПрдХ рдкреНрд░рдпреЛрдЧ API рдЬреЛрдбрд╝рд╛, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХреЗрдВред рдореИрдВрдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рд╕рднреА рдХрд╛рд░реНрдп рдЕрднреА рднреА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ API рдХрд╛ рдПрдХ рдЕрдВрд╢ рд╣реИ:

typedef size_t (linenoisePrevCharLen)(const char *buf, size_t buf_len, size_t pos, size_t *col_len);
typedef size_t (linenoiseNextCharLen)(const char *buf, size_t buf_len, size_t pos, size_t *col_len);
typedef size_t (linenoiseReadCode)(int fd, char *buf, size_t buf_len, int* c);

void linenoiseSetEncodingFunctions(
    linenoisePrevCharLen *prevCharLenFunc,
    linenoiseNextCharLen *nextCharLenFunc,
    linenoiseReadCode *readCodeFunc);

linenoisePrevCharLen рдФрд░ linenoiseNextCharLen рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯ рд▓рдВрдмрд╛рдИ рд▓реМрдЯрд╛рдПрдВ, рдФрд░ рдХреЙрд▓рдо рд▓рдВрдмрд╛рдИ рдХреЛ col_len рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ ред linenoiseReadCode рдмрд╛рдЗрдЯреНрд╕ рдХреЛ buf рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрдердХ рд╡рд░реНрдг рдХреЛрдб рдХреЛ c рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ linenoiseSetEncodingFunctions рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ _default_ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ред рд╡реЗ рдмрд╕ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ _one рдмрд╛рдЗрдЯ_ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдирдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ рддреЛ рдкреЛрд╕реНрдЯ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧреАред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ!!

@yhirose рдпрд╣ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рд╣реИ !!! :-) рдореИрдВ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛ред

рдЕрднреА рддрдХ рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реБрдЖ?

@antirez рд╡рд┐рд▓рдп рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐?

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рдВрдЯреЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (https://github.com/yhirose/linenoise/tree/utf8-support) рдореВрд▓ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдЬреИрд╕реЗ 'рд╕рдВрдХреЗрдд' рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @yhiroseред рдЖрдкрдиреЗ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рд╣реИ! рдФрд░ рдореЗрд░рд╛
рдХрд╛рдо рдЖрд╕рд╛рди!

@рд╕реЛрдиреЛрдлреЛрдЯреЛ

рд╕реЛрдо рдХреЛ, реирен рдЬреВрди реирежрезрем резрео:релрем:рекрел -0700, рдпреЗрд░реЛрдЬрд╝ рдиреЗ рд▓рд┐рдЦрд╛:

   I have modified my fork 

(https://github.com/yhirose/linenoise/tree/utf8-support) рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
рдореВрд▓ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдЬреИрд╕реЗ 'рд╕рдВрдХреЗрдд' рдореЗрдВ рдХрд┐рдП рдЧрдП рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде
рд╡рд┐рд╢реЗрд╖рддрд╛ред
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

*

рдореЗрд░рд╛ рдХрд╛рдВрдЯрд╛ (https://github.com/yhirose/linenoise/tree/utf8-support) рдЕрдм рдпреВрдирд┐рдХреЛрдб 9.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

@antirez рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ @yhirose рдХреЗ рдорд▓реНрдЯреА-рдмрд╛рдЗрдЯ рд╕рдорд░реНрдерди рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕рдордп рд╣реЛрдЧрд╛? рдпрд╛ рд╣рдореЗрдВ рддрдм рддрдХ @yhirose рдХреЗ рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/hoelzro/lua-linenoise рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? я╕П

рдореЗрд░рд╛ рдХрд╛рдВрдЯрд╛ (https://github.com/yhirose/linenoise/tree/utf8-support) рдЕрдм рдпреВрдирд┐рдХреЛрдб 11.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдВрдЯреАрд░реЗрдЬрд╝/рд▓рд╛рдЗрдиреЛрдЗрд╕ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдореЗрд░рд╛ рдХрд╛рдВрдЯрд╛ (https://github.com/yhirose/linenoise/tree/utf8-support) рдЕрдм рдпреВрдирд┐рдХреЛрдб 12.1 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдХрд╛рдВрдЯрд╛ (https://github.com/yhirose/linenoise/tree/utf8-support) рдЕрдм рдпреВрдирд┐рдХреЛрдб 13.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

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