void tty_change_screen_size (void) { SLtt_get_screen_size (); SLsmg_reinit_smg (); do_enter_ca_mode (); tty_keypad (TRUE); tty_nodelay (FALSE); }
void dialog_change_screen_size (void) { mc_global.tty.winch_flag = FALSE; #if defined(HAVE_SLANG) || NCURSES_VERSION_MAJOR >= 4 #if defined TIOCGWINSZ #ifndef NCURSES_VERSION tty_noraw_mode (); tty_reset_screen (); #endif tty_change_screen_size (); #ifdef HAVE_SLANG /* XSI Curses spec states that portable applications shall not invoke * initscr() more than once. This kludge could be done within the scope * of the specification by using endwin followed by a refresh (in fact, * more than one curses implementation does this); it is guaranteed to work * only with slang. */ SLsmg_init_smg (); do_enter_ca_mode (); tty_keypad (TRUE); tty_nodelay (FALSE); #endif /* Inform all suspending dialogs */ dialog_switch_got_winch (); /* Inform all running dialogs */ g_list_foreach (top_dlg, (GFunc) dlg_resize_cb, NULL); /* Now, force the redraw */ repaint_screen (); #endif /* TIOCGWINSZ */ #endif /* defined(HAVE_SLANG) || NCURSES_VERSION_MAJOR >= 4 */ }
void tty_init (gboolean mouse_enable, gboolean is_xterm) { SLtt_Ignore_Beep = 1; SLutf8_enable (-1); /* has to be called first before any of the other functions. */ SLtt_get_terminfo (); /* * If the terminal in not in terminfo but begins with a well-known * string such as "linux" or "xterm" S-Lang will go on, but the * terminal size and several other variables won't be initialized * (as of S-Lang 1.4.4). Detect it and abort. Also detect extremely * small, large and negative screen dimensions. */ if ((COLS < 10) || (LINES < 5) || (COLS > SLTT_MAX_SCREEN_COLS) || (LINES > SLTT_MAX_SCREEN_ROWS)) { fprintf (stderr, _("Screen size %dx%d is not supported.\n" "Check the TERM environment variable.\n"), COLS, LINES); exit (EXIT_FAILURE); } tcgetattr (fileno (stdin), &boot_mode); /* 255 = ignore abort char; XCTRL('g') for abort char = ^g */ SLang_init_tty (XCTRL ('g'), 1, 0); if (mc_global.tty.ugly_line_drawing) SLtt_Has_Alt_Charset = 0; /* If SLang uses fileno(stderr) for terminal input MC will hang if we call SLang_getkey between calls to open_error_pipe and close_error_pipe, e.g. when we do a growing view of an gzipped file. */ if (SLang_TT_Read_FD == fileno (stderr)) SLang_TT_Read_FD = fileno (stdin); if (tcgetattr (SLang_TT_Read_FD, &new_mode) == 0) { #ifdef VDSUSP new_mode.c_cc[VDSUSP] = NULL_VALUE; /* to ignore ^Y */ #endif #ifdef VLNEXT new_mode.c_cc[VLNEXT] = NULL_VALUE; /* to ignore ^V */ #endif tcsetattr (SLang_TT_Read_FD, TCSADRAIN, &new_mode); } tty_reset_prog_mode (); load_terminfo_keys (); SLtt_Blink_Mode = tty_use_256colors ()? 1 : 0; tty_start_interrupt_key (); /* It's the small part from the previous init_key() */ init_key_input_fd (); /* For 8-bit locales, NCurses handles 154 (0x9A) symbol properly, while S-Lang * requires SLsmg_Display_Eight_Bit >= 154 (OR manual filtering if xterm display * detected - but checking TERM would fail under screen, OR running xterm * with allowC1Printable). */ tty_display_8bit (FALSE); SLsmg_init_smg (); if (!mouse_enable) use_mouse_p = MOUSE_DISABLED; tty_init_xterm_support (is_xterm); /* do it before do_enter_ca_mode() call */ init_mouse (); do_enter_ca_mode (); tty_keypad (TRUE); tty_nodelay (FALSE); tty_setup_sigwinch (sigwinch_handler); }