X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=lib-ui%2Fcurs_lib.c;h=72560b6ac65bfe777ca78e517a13b1a14de52368;hb=8c9ac00dc8d607d5caaf1f27022d07c8152981f9;hp=81a817bfd09ba749cc2dea98cb5663e9e0dc3b37;hpb=f3cbb9f51357972f6e74244494236a41dc4d84cd;p=apps%2Fmadmutt.git diff --git a/lib-ui/curs_lib.c b/lib-ui/curs_lib.c index 81a817b..72560b6 100644 --- a/lib-ui/curs_lib.c +++ b/lib-ui/curs_lib.c @@ -14,10 +14,14 @@ #include #include -#ifdef HAVE_LANGINFO_YESEXPR -#include +#ifdef HAVE_SYS_IOCTL_H +# include +#elif defined(HAVE_IOCTL_H) +# include #endif +#include +#include #include #include @@ -39,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) @@ -84,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); @@ -111,11 +100,9 @@ int _mutt_get_field ( const char *field, char *buf, ssize_t buflen, addstr (field); mutt_refresh (); getyx (stdscr, y, x); - ret = - _mutt_enter_string (buf, buflen, y, x, complete, multiple, files, - numfiles, es); - } - while (ret == 1); + ret = _mutt_enter_string(buf, buflen, y, x, complete, multiple, files, + numfiles, es); + } while (ret == 1); CLEARLINE (LINES - 1); mutt_free_enter_state (&es); @@ -140,12 +127,12 @@ void mutt_clear_error (void) CLEARLINE (LINES - 1); } -void mutt_edit_file (const char *editor, const char *data) +void mutt_edit_file(const char *data) { char cmd[LONG_STRING]; mutt_endwin (NULL); - m_quotefile_fmt(cmd, sizeof (cmd), editor, data); + m_quotefile_fmt(cmd, sizeof (cmd), mod_core.editor, data); if (mutt_system (cmd) == -1) mutt_error (_("Error running \"%s\"!"), cmd); keypad (stdscr, TRUE); @@ -155,12 +142,10 @@ void mutt_edit_file (const char *editor, const char *data) int mutt_yesorno (const char *msg, int def) { event_t ch; - char *yes = _("yes"); - char *no = _("no"); + const char *yes = _("yes"); + const char *no = _("no"); char *answer_string; ssize_t answer_string_len; - -#ifdef HAVE_LANGINFO_YESEXPR char *expr; regex_t reyes; regex_t reno; @@ -174,7 +159,6 @@ int mutt_yesorno (const char *msg, int def) !regcomp (&reyes, expr, REG_NOSUB | REG_EXTENDED); reno_ok = (expr = nl_langinfo (NOEXPR)) && expr[0] == '^' && !regcomp (&reno, expr, REG_NOSUB | REG_EXTENDED); -#endif CLEARLINE (LINES - 1); @@ -201,20 +185,14 @@ int mutt_yesorno (const char *msg, int def) break; } -#ifdef HAVE_LANGINFO_YESEXPR answer[0] = ch.ch; if (reyes_ok ? (regexec (&reyes, answer, 0, 0, 0) == 0) : tolower (ch.ch) == *yes) -#else - if (tolower (ch.ch) == *yes) -#endif { def = M_YES; break; } else if ( -#ifdef HAVE_LANGINFO_YESEXPR reno_ok ? (regexec (&reno, answer, 0, 0, 0) == 0) : -#endif (tolower (ch.ch) == *no)) { def = M_NO; break; @@ -223,12 +201,10 @@ int mutt_yesorno (const char *msg, int def) } } -#ifdef HAVE_LANGINFO_YESEXPR if (reyes_ok) regfree (&reyes); if (reno_ok) regfree (&reno); -#endif if (def != -1) { addstr ((char *) (def == M_YES ? yes : no)); @@ -279,7 +255,7 @@ void mutt_curses_error (const char *fmt, ...) } void mutt_progress_bar (progress_t* progress, long pos) { - char posstr[SHORT_STRING]; + char posstr[STRING]; if (!pos) { if (!NetInc) @@ -391,30 +367,6 @@ int mutt_any_key_to_continue (const char *s) return (ch); } -int mutt_do_pager (const char *banner, - const char *tempfile, int do_color, pager_t * info) -{ - int rc; - - if (!Pager || m_strcmp(Pager, "builtin") == 0) - rc = mutt_pager (banner, tempfile, do_color, info); - else { - char cmd[STRING]; - - mutt_endwin (NULL); - m_quotefile_fmt(cmd, sizeof (cmd), Pager, tempfile); - if (mutt_system (cmd) == -1) { - mutt_error (_("Error running \"%s\"!"), cmd); - rc = -1; - } - else - rc = 0; - mutt_unlink (tempfile); - } - - return rc; -} - int _mutt_enter_fname (const char *prompt, char *buf, ssize_t blen, int *redraw, int buffy, int multiple, char ***files, int *numfiles) @@ -436,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 { @@ -476,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 @@ -496,9 +447,8 @@ void mutt_curs_set (int cursor) curs_set (2); /* cvvis */ } } -#endif -int mutt_multi_choice (char *prompt, char *letters) +int mutt_multi_choice (const char *prompt, const char *letters) { event_t ch; int choice; @@ -706,32 +656,36 @@ void mutt_paddstr (int n, const char *s) addch (' '); } -/* - * mutt_strwidth is like m_strlenexcept that it returns the width - * refering to the number of characters cells. - */ - -int mutt_strwidth (const char *s) +/* this routine should be called after receiving SIGWINCH */ +void mutt_resize_screen (void) { - wchar_t wc; - int w; - ssize_t k, n; - mbstate_t mbstate; - - if (!s) - return 0; - - n = m_strlen(s); - - p_clear(&mbstate, 1); - for (w = 0; n && (k = mbrtowc (&wc, s, n, &mbstate)); s += k, n -= k) { - if (k == -1 || k == -2) { - k = (k == -1) ? 1 : n; - wc = CharsetReplacement; + 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; } - if (!iswprint(wc)) - wc = '?'; - w += wcwidth (wc); + 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; } - return w; + resizeterm (rows, cols); }