Linenoise: ctrl рдХреЛ рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдмрдирд╛рдПрдБ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдирд╡ре░ 2016  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: antirez/linenoise

рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд▓рд╛рдЗрди рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдпреЗ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

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

рдП: рдпрд╣ рдкреЙрдЬрд╝рд┐рдХреНрд╕/рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрдВрджреЛрд▓рди рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рд▓рд┐рдиреЗрдиреЛрдЗрд╕ 100% рдкреЙрдЬрд╝рд┐рдХреНрд╕ рд╣реИред

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

рдпрд╣рд╛рдБ рдПрдХ рдЪрд╛рд░реНрдЯ рд╣реИ рдЬреЛ Win/Unix/Emacs рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреБрдВрдЬреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ: https://en.wikipedia.org/wiki/Control_key


рдХреНрдпрд╛ рдХрд░реЗрдВ?

рд▓рд╛рдЗрди # 41 рдкрд░ linenoise.c рдореЗрдВ рдЖрдк рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд░реНрдЪрд╛ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХрд░реНрд╕рд░ рдХреЛ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓рд╛рдЗрди # 768 рдкрд░ рдЖрдк рдкрд╛рдПрдВрдЧреЗ
рд╕реНрдерд┐рд░ int linenoiseEdit (int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)

рдпрджрд┐ рдЖрдк рд╕рдВрдкрд╛рджрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдпрд╣рд╛рдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реЛрдЧрд╛ред

рдпрд╣ рднреА рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╕рдВрдкрд╛рджрди рдЪрд╛рд▓реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

рд▓рд┐рдиреЗрдиреЛрдЗрд╕рд╕реЗрдЯрдорд▓реНрдЯреАрд▓рд╛рдЗрди(1);

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣реИрдкреНрдкреА рдереИрдВрдХреНрд╕рдЧрд┐рд╡рд┐рдВрдЧ! (рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдЖрдк рдХрд╣рд╛рдВ рд╣реЛ :-)

рдХреНрдпрд╛ рдпрд╣ рдЙрд╕реА рд╡рд┐рдЪрд╛рд░ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ #64 рдФрд░ #92, рдпрд╛ рдХреБрдЫ рдФрд░?

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

рд╢рд╛рдпрдж рдореИрдВ рдЕрд╕реНрдкрд╖реНрдЯ рдерд╛ - рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг + рдмрд╛рдпрд╛рдВ рдирд┐рдпрдВрддреНрд░рдг рдЪрд░рд┐рддреНрд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ ctrl + a \ 01, рдЖрджрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ)ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ (рдЬреИрд╕реЗ \033[1;5D рдпрд╛ \033f ), рдЬреЛ рдХреБрдЫ рд▓рд╛рдЗрди рдПрдбрд┐рдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╢рдмреНрдж рджреНрд╡рд╛рд░рд╛ рдЖрдЧреЗ/рдкреАрдЫреЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдпрд╣реА рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдкрдВрдХреНрддрд┐ рд╕рдВрдкрд╛рджрди рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдо POSIX рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдирд╣реАрдВ) рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдирдиреЛрдЗрд╕ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ POSIX рдорд╛рдирдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ, рдЬреИрд╕рд╛ рдореИрдВ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд░рд╣рд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрджрд┐ рдЖрдк рдКрдкрд░ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╣ рдкреЙрдЬрд╝рд┐рдХреНрд╕ рдХрд╛ рдЬрд┐рдХреНрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХрд╛ рдмрд┐рдВрджреБ рджреЗрдЦрддрд╛ рд╣реВрдВред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ ctrl+рдмрд╛рдПрдВ/рджрд╛рдПрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреБрдЫ рдЕрдиреБрдХреНрд░рдо рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рд╕рд╛рде рд╣реА, рдпрд╣ рдХреБрдВрдЬреА рд╕рдВрдпреЛрдЬрди рдпрд╛ рд░реАрдбрд▓рд╛рдЗрди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ - рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд░реАрдбрд▓рд╛рдЗрди esc-b/f (рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрдЪрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдо) рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмреИрдХ/рдлреЙрд░рд╡рд░реНрдб-рд╡рд░реНрдб рд╕реЗ рдмрд╛рдВрдзрддреА рд╣реИ, рдЬреЛ рд╡рд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВред

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

рд╢рд╛рдпрдж @JelteF рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорд╛рдВрдЧ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рджреГрд╢реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЗрдирдиреЛрдЗрд╕ рдПрдбрд┐рдЯ () рдореЗрдВ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред

рдмрд╕ fyi, рдЕрдЧрд░ рдпрд╣ ctrl-left рдпрд╛ ctrl-right рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдПрдХ рд╢рдмреНрдж рдХреЛ рдмрд╛рдПрдВ/рджрд╛рдПрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ (рд╕рдВрдмрдВрдзрд┐рдд рд▓рдВрдмреЗ рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдо \033[5;D рдФрд░ C рдХреНрд░рдорд╢рдГ, рдореЗрд░реЗ рдкрд╛рд╕ OCaml рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рд╣реИ: https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@ рд╕реА-рдХреНрдпреВрдм рд╕рд╣реА рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ред рдкрд╣рд▓реЗ рдЬрд╡рд╛рдм рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рд╣рд╛рд╣рд╛, рдпрд╣ рдХреЗрд╡рд▓ рдбреЗрдврд╝ рд╕рд╛рд▓ рд░рд╣рд╛ рд╣реИ, рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдордп рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдФрд░ рд╡рд╣реАрдВ linenoiseEdit() рдореЗрдВ рднреАред рдзрдиреНрдпрд╡рд╛рдж @ рд╕реА-рдХреНрдпреВрдм: +1:

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