vi: fix ^Z not always working as intended
function old new delta tstp_handler 64 71 +7 text_yank 54 56 +2 vi_main 280 272 -8 do_cmd 4705 4696 -9 colon 2861 2852 -9 cont_handler 66 - -66 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 2/3 up/down: 9/-92) Total: -83 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
6ed94aa9b2
commit
c319310404
42
editors/vi.c
42
editors/vi.c
@ -330,9 +330,6 @@ struct globals {
|
|||||||
int lmc_len; // length of last_modifying_cmd
|
int lmc_len; // length of last_modifying_cmd
|
||||||
char *ioq, *ioq_start; // pointer to string for get_one_char to "read"
|
char *ioq, *ioq_start; // pointer to string for get_one_char to "read"
|
||||||
#endif
|
#endif
|
||||||
#if ENABLE_FEATURE_VI_USE_SIGNALS || ENABLE_FEATURE_VI_CRASHME
|
|
||||||
int my_pid;
|
|
||||||
#endif
|
|
||||||
#if ENABLE_FEATURE_VI_SEARCH
|
#if ENABLE_FEATURE_VI_SEARCH
|
||||||
char *last_search_pattern; // last pattern from a '/' or '?' search
|
char *last_search_pattern; // last pattern from a '/' or '?' search
|
||||||
#endif
|
#endif
|
||||||
@ -449,7 +446,6 @@ struct globals {
|
|||||||
#define lmc_len (G.lmc_len )
|
#define lmc_len (G.lmc_len )
|
||||||
#define ioq (G.ioq )
|
#define ioq (G.ioq )
|
||||||
#define ioq_start (G.ioq_start )
|
#define ioq_start (G.ioq_start )
|
||||||
#define my_pid (G.my_pid )
|
|
||||||
#define last_search_pattern (G.last_search_pattern)
|
#define last_search_pattern (G.last_search_pattern)
|
||||||
|
|
||||||
#define edit_file__cur_line (G.edit_file__cur_line)
|
#define edit_file__cur_line (G.edit_file__cur_line)
|
||||||
@ -634,11 +630,8 @@ int vi_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLE_FEATURE_VI_USE_SIGNALS || ENABLE_FEATURE_VI_CRASHME
|
|
||||||
my_pid = getpid();
|
|
||||||
#endif
|
|
||||||
#if ENABLE_FEATURE_VI_CRASHME
|
#if ENABLE_FEATURE_VI_CRASHME
|
||||||
srand((long) my_pid);
|
srand((long) getpid());
|
||||||
#endif
|
#endif
|
||||||
#ifdef NO_SUCH_APPLET_YET
|
#ifdef NO_SUCH_APPLET_YET
|
||||||
// if we aren't "vi", we are "view"
|
// if we aren't "vi", we are "view"
|
||||||
@ -2770,31 +2763,30 @@ static void winch_handler(int sig UNUSED_PARAM)
|
|||||||
redraw(TRUE); // re-draw the screen
|
redraw(TRUE); // re-draw the screen
|
||||||
errno = save_errno;
|
errno = save_errno;
|
||||||
}
|
}
|
||||||
static void cont_handler(int sig UNUSED_PARAM)
|
static void tstp_handler(int sig UNUSED_PARAM)
|
||||||
{
|
{
|
||||||
int save_errno = errno;
|
int save_errno = errno;
|
||||||
|
|
||||||
|
// ioctl inside cookmode() was seen to generate SIGTTOU,
|
||||||
|
// stopping us too early. Prevent that:
|
||||||
|
signal(SIGTTOU, SIG_IGN);
|
||||||
|
|
||||||
|
go_bottom_and_clear_to_eol();
|
||||||
|
cookmode(); // terminal to "cooked"
|
||||||
|
|
||||||
|
// stop now
|
||||||
|
//signal(SIGTSTP, SIG_DFL);
|
||||||
|
//raise(SIGTSTP);
|
||||||
|
raise(SIGSTOP); // avoid "dance" with TSTP handler - use SIGSTOP instead
|
||||||
|
//signal(SIGTSTP, tstp_handler);
|
||||||
|
|
||||||
|
// we have been "continued" with SIGCONT, restore screen and termios
|
||||||
rawmode(); // terminal to "raw"
|
rawmode(); // terminal to "raw"
|
||||||
last_status_cksum = 0; // force status update
|
last_status_cksum = 0; // force status update
|
||||||
redraw(TRUE); // re-draw the screen
|
redraw(TRUE); // re-draw the screen
|
||||||
|
|
||||||
signal(SIGTSTP, tstp_handler);
|
|
||||||
signal(SIGCONT, SIG_DFL);
|
|
||||||
//kill(my_pid, SIGCONT); // huh? why? we are already "continued"...
|
|
||||||
errno = save_errno;
|
errno = save_errno;
|
||||||
}
|
}
|
||||||
static void tstp_handler(int sig UNUSED_PARAM)
|
|
||||||
{
|
|
||||||
int save_errno = errno;
|
|
||||||
go_bottom_and_clear_to_eol();
|
|
||||||
cookmode(); // terminal to "cooked"
|
|
||||||
|
|
||||||
signal(SIGCONT, cont_handler);
|
|
||||||
signal(SIGTSTP, SIG_DFL);
|
|
||||||
kill(my_pid, SIGTSTP);
|
|
||||||
errno = save_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
//----- Come here when we get a signal ---------------------------
|
|
||||||
static void int_handler(int sig)
|
static void int_handler(int sig)
|
||||||
{
|
{
|
||||||
signal(SIGINT, int_handler);
|
signal(SIGINT, int_handler);
|
||||||
|
Loading…
Reference in New Issue
Block a user