X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=lib-ui%2Fcurs_lib.c;h=72560b6ac65bfe777ca78e517a13b1a14de52368;hb=8c9ac00dc8d607d5caaf1f27022d07c8152981f9;hp=936edda6ecfbbef089fd091d60155f6c3606d3c3;hpb=9946738a6a1c27a5602a14d1afe2eea2389732b2;p=apps%2Fmadmutt.git diff --git a/lib-ui/curs_lib.c b/lib-ui/curs_lib.c index 936edda..72560b6 100644 --- a/lib-ui/curs_lib.c +++ b/lib-ui/curs_lib.c @@ -14,6 +14,11 @@ #include #include +#ifdef HAVE_SYS_IOCTL_H +# include +#elif defined(HAVE_IOCTL_H) +# include +#endif #include #include @@ -38,29 +43,23 @@ static event_t *KeyEvent; void mutt_refresh (void) { - /* don't refresh when we are waiting for a child. */ - if (option (OPTKEEPQUIET)) - return; + /* don't refresh when we are waiting for a child. */ + if (option (OPTKEEPQUIET)) + return; - /* don't refresh in the middle of macros unless necessary */ - if (UngetCount && !option (OPTFORCEREFRESH)) - return; + /* don't refresh in the middle of macros unless necessary */ + if (UngetCount && !option (OPTFORCEREFRESH)) + return; - /* else */ - refresh (); + /* else */ + refresh (); } -/* Make sure that the next refresh does a full refresh. This could be - optmized by not doing it at all if DISPLAY is set as this might - indicate that a GUI based pinentry was used. Having an option to - customize this is of course the Mutt way. */ void mutt_need_hard_redraw (void) { - if (!getenv ("DISPLAY")) { keypad (stdscr, TRUE); clearok (stdscr, TRUE); set_option (OPTNEEDREDRAW); - } } event_t mutt_getch (void) @@ -83,15 +82,6 @@ event_t mutt_getch (void) if (ch == ERR) return err; - if ((ch & 0x80) && option (OPTMETAKEY)) { - /* send ALT-x as ESC-x */ - ch &= ~0x80; - mutt_ungetch (ch, 0); - ret.ch = '\033'; - ret.op = 0; - return ret; - } - ret.ch = ch; ret.op = 0; return (ch == ctrl ('G') ? err : ret); @@ -398,8 +388,8 @@ int _mutt_enter_fname (const char *prompt, char *buf, ssize_t blen, else if (ch.ch == '?') { mutt_refresh (); buf[0] = 0; - _mutt_select_file (buf, blen, M_SEL_FOLDER | (multiple ? M_SEL_MULTI : 0), - files, numfiles); + mutt_select_file (buf, blen, M_SEL_FOLDER | (multiple ? M_SEL_MULTI : 0), + files, numfiles); *redraw = REDRAW_FULL; } else { @@ -438,7 +428,6 @@ void mutt_flushinp (void) flushinp (); } -#if (defined(USE_SLANG_CURSES) || defined(HAVE_CURS_SET)) /* The argument can take 3 values: * -1: restore the value of the last call * 0: make the cursor invisible @@ -458,7 +447,6 @@ void mutt_curs_set (int cursor) curs_set (2); /* cvvis */ } } -#endif int mutt_multi_choice (const char *prompt, const char *letters) { @@ -668,3 +656,36 @@ void mutt_paddstr (int n, const char *s) addch (' '); } +/* this routine should be called after receiving SIGWINCH */ +void mutt_resize_screen (void) +{ + char *cp; + int fd; + struct winsize w; + + int rows, cols; + + rows = -1; + cols = -1; + if ((fd = open ("/dev/tty", O_RDONLY)) != -1) { + if (ioctl (fd, TIOCGWINSZ, &w) != -1) { + rows = w.ws_row; + cols = w.ws_col; + } + close (fd); + } + if (rows <= 0) { + if ((cp = getenv ("LINES")) != NULL) { + rows = atoi (cp); + } + else + rows = 24; + } + if (cols <= 0) { + if ((cp = getenv ("COLUMNS")) != NULL) + cols = atoi (cp); + else + cols = 80; + } + resizeterm (rows, cols); +}