рдЬрдм рдореИрдВ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ ctrl-z
рджрдмрд╛рддрд╛ рд╣реВрдВ (рд╕рд┐рдЧрд╕реНрдЯреЙрдк рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВ) рддреЛ рдпрд╣ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдкрд░ рд╕рд┐рд░реНрдл тЙд
рдбрд╛рд▓рддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ рдЦреЛрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рд╣реИред рдлрд┐рд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде fg
рдореБрдЭреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
тФмтФА[arne@arne-thinkpad:~/proj/c++/linenoise]тФА[18:05:53]
тХ░тФА>$ ./linenoise_example
hello> foo
echo: 'foo'
hello>
echo: ''
hello>
тФмтФА[arne@arne-thinkpad:~/proj/c++/linenoise]тФА[18:05:54]
тХ░тФА>$ python
Python 3.6.1 (default, Mar 27 2017, 00:27:06)
[GCC 6.3.1 20170306] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> foo = 17
'python' has gestoppt
тФмтФА[arne@arne-thinkpad:~/proj/c++/linenoise]тФА[18:06:07]
тФВ 1 28968 0% gestoppt python
тХ░тФА>$ fg
Job 1, 'python' in den Vordergrund schicken
>>> print(foo)
17
рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЛ 0.0 . рдЬреИрд╕рд╛ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ
рдпрд╣ рдордЫрд▓реА рд╣реИ
@ krux02 рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк c++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, @yhirose рдореЗрдВ рдПрдХ рд▓рд┐рдирдиреЛрдЗрдЬрд╝ рд╣реИ рдЬрд┐рд╕реЗ c++ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/yhirose/cpp-linenoiseред рдпрд╣ рднреА UTF8 рд╕рдХреНрд╖рдо рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ linenoise_example рдХреЛрдб рдХрд╛ рд╕рд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдЕрд╕рд▓ рдореЗрдВ рдореИрдВ рд╕реА ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдирд┐рдо рдХрд░рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдирд┐рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдирд╣реАрдВ рдЖрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╕реА ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ред
рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рд╕реА рдПрдкреАрдЖрдИ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд╕реА ++ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ utf8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рдореБрдЭреЗ рдЬреЛ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХрдИ рдХреАрдмреЛрд░реНрдб рдХрдорд╛рдВрдб рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реАрдбрд▓рд╛рдЗрди рд╕реЗ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВред
рдореИрдВ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдХреЗ рдПрдХ рд▓рд┐рдкрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд▓рд┐рдирдиреЛрдЗрд╕ рдЙрдиреНрдореБрдЦ рдирд╣реАрдВ рд╣реИ: https://github.com/krux02/opengl -рд╕реИрдВрдбрдмреЙрдХреНрд╕/рдмреНрд▓реЙрдм/рдорд╛рд╕реНрдЯрд░/рдЙрджрд╛рд╣рд░рдг/рдХрдВрд╕реЛрд▓.рдирд┐рдо
рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдирд┐рдо рдХреЗ рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд▓реЗрдХрд┐рди рд╣реБрдб рдХреЗ рддрд╣рдд рдХрдорд╛рдВрдб рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рд╣реИред
@ рдХреНрд░реБрдХреНрд╕02
рдареАрдХ рд╣реИ, рдореИрдВ рдкреЗрд╢реЗрд╡рд░ рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реВрдВ рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдПрдХ рд╕реА рд╕реНрдиреЛрдм рднреА рд╣реВрдВ: рдмреНрд▓рд╢: рдореБрдЭреЗ рд╕реА рдкрд╕рдВрдж рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ, рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдПрдХ рдирдВрдЧреА рд╣рдбреНрдбрд┐рдпрд╛рдБ рд╣реИрдВ, рдХреЛрдИ рддрд╛рдордЭрд╛рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рдХреНрд╖реНрдп рд╣реИред
рдореИрдВ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рддрдХ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕реЗ рддрдм рддрдХ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣рд▓ рди рдХрд░ рджреЗред
рдЕрд░реЗ! рдЖрдк рдирд┐рдо рдХреЗ рдкрд╣рд▓реЗ рдкрдиреНрдиреЗ рдкрд░ рд╣реИрдВ! рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдЕрд░реНрдиреЗ!
@ рдХреНрд░реБрдХреНрд╕02
рдареАрдХ рд╣реИ, рдпрд╣ рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
https://github.com/Sonophoto/shellnoise
рд╣рд╛рд▓рд╛рдВрдХрд┐ Ctrl-C рдФрд░ Ctrl-D рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ Ctrl-Z рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЧреВрдБрдЬрддрд╛ рд╣реИ) рдЗрд╕реЗ рд╢реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред
рдУрд╣ рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдирдиреЛрдЗрд╕ рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
@ рдХреНрд░реБрдХреНрд╕02
рдереЛрдбрд╝реА рдЦреБрджрд╛рдИ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдорд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдХрдЪреНрдЪреЗ рдореЛрдб рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рд╡рд╣ рд╕реЗрдЯрдЕрдк рдЗрд╕реЗ ASCII рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ Ctrl-Z рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред
https://github.com/antirez/linenoise/blob/master/linenoise.c#L217 -L251
рдФрд░ U+001A, рдЬрдм UTF8 рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ Ctrl-Z рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ
@hoelzro рдЗрд╕ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд▓реЗрдХрд┐рди рдпрд╣ Ctrl-C рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕реЗ рднреА рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рд▓рд┐рдиреЗрдирд╛рдЗрдЬрд╝ рдореЗрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
https://github.com/hoelzro/p6-linenoise/commit/7d0bb83cab34ca58f7a487b5df30736d058112cf
CTRL+Z рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреАрд╡ рдмреЗрдиреЗрдЯ рдиреЗ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ: https://github.com/msteveb/linenoise/commit/29aedbd22b5e3529aff1f85ec1b3164118b83291
рдореИрдВрдиреЗ рдкреИрдЪ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ (https://github.com/antirez/linenoise/commit/4a961c0108720741e2683868eb10495f015ee422) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
commit d9400774549967cda04cfa04f56ed956cd79147c
Author: Steve Bennett <[email protected]>
Date: Mon Jan 1 13:11:16 2018 +1000
Enable ^Z (SUSP) support
Allows the current process to be backgrounded and then resumed.
Signed-off-by: Steve Bennett <[email protected]>
(adaptations)
Signed-off-by: Alexander F. Mayer <[email protected]>
diff --git a/linenoise.c b/linenoise.c
index 10ffd71..d861505 100644
--- a/linenoise.c
+++ b/linenoise.c
@@ -109,6 +109,7 @@
#include <stdio.h>
#include <errno.h>
#include <string.h>
+#include <signal.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/stat.h>
@@ -168,6 +169,7 @@ enum KEY_ACTION{
CTRL_T = 20, /* Ctrl-t */
CTRL_U = 21, /* Ctrl+u */
CTRL_W = 23, /* Ctrl+w */
+ CTRL_Z = 26, /* Ctrl+z */
ESC = 27, /* Escape */
BACKSPACE = 127 /* Backspace */
};
@@ -830,6 +832,16 @@ static int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen,
case CTRL_C: /* ctrl-c */
errno = EAGAIN;
return -1;
+ case CTRL_Z: /* ctrl-z */
+#ifdef SIGTSTP
+ /* send ourselves SIGSUSP */
+ disableRawMode(STDIN_FILENO);
+ raise(SIGTSTP);
+ /* and resume */
+ enableRawMode(STDIN_FILENO);
+ refreshLine(&l);
+#endif
+ continue;
case BACKSPACE: /* backspace */
case 8: /* ctrl-h */
linenoiseEditBackspace(&l);
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
CTRL+Z рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреАрд╡ рдмреЗрдиреЗрдЯ рдиреЗ рд▓рд┐рдиреЗрдиреЛрдЗрд╕ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ: https://github.com/msteveb/linenoise/commit/29aedbd22b5e3529aff1f85ec1b3164118b83291
рдореИрдВрдиреЗ рдкреИрдЪ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ (https://github.com/antirez/linenoise/commit/4a961c0108720741e2683868eb10495f015ee422) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реИ: