X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-ui%2Fcurs_lib.c;h=ac049bf4dee7e1ee2ffb476d73101e0235ea3506;hp=babbc72c48a230a4b405736c813d005ea5856083;hb=17759b32873166573ee7bfaf298ae90434779ed7;hpb=5dcac54e5db074dc4572f843666c7f7acaf2d109 diff --git a/lib-ui/curs_lib.c b/lib-ui/curs_lib.c index babbc72..ac049bf 100644 --- a/lib-ui/curs_lib.c +++ b/lib-ui/curs_lib.c @@ -46,7 +46,7 @@ event_t mutt_getch (void) SigInt = 0; mutt_allow_interrupt (1); - ch = wgetch (stdscr); + ch = getch(); mutt_allow_interrupt (0); if (SigInt) @@ -60,6 +60,22 @@ event_t mutt_getch (void) return (ch == ctrl ('G') ? err : ret); } +#ifndef waddnwstr +int waddwch(WINDOW *win, wchar_t wc) +{ + char buf[MB_LEN_MAX * 2]; + mbstate_t mbstate; + ssize_t n1, n2; + + p_clear(&mbstate, 1); + if ((n1 = wcrtomb(buf, wc, &mbstate)) == -1 + || (n2 = wcrtomb(buf + n1, 0, &mbstate)) == -1) + return -1; /* ERR */ + return waddstr(win, buf); +} +#endif + + int _mutt_get_field ( const char *field, char *buf, ssize_t buflen, int complete, int multiple, char ***files, int *numfiles) { @@ -69,14 +85,14 @@ int _mutt_get_field ( const char *field, char *buf, ssize_t buflen, ENTER_STATE *es = mutt_new_enter_state (); do { - CLEARLINE (LINES - 1); + CLEARLINE(stdscr, LINES - 1); waddstr (stdscr, field); mutt_refresh (); getyx (stdscr, y, x); ret = _mutt_enter_string(buf, buflen, y, x, complete, multiple, files, numfiles, es); } while (ret == 1); - CLEARLINE (LINES - 1); + CLEARLINE(stdscr, LINES - 1); mutt_free_enter_state (&es); return (ret); @@ -97,7 +113,7 @@ void mutt_clear_error (void) { Errorbuf[0] = 0; if (!option (OPTNOCURSES)) - CLEARLINE (LINES - 1); + CLEARLINE(stdscr, LINES - 1); } void mutt_edit_file(const char *data) @@ -133,7 +149,7 @@ int mutt_yesorno (const char *msg, int def) reno_ok = (expr = nl_langinfo (NOEXPR)) && expr[0] == '^' && !regcomp (&reno, expr, REG_NOSUB | REG_EXTENDED); - CLEARLINE (LINES - 1); + CLEARLINE(stdscr, LINES - 1); /* * In order to prevent the default answer to the question to wrapped @@ -141,11 +157,11 @@ int mutt_yesorno (const char *msg, int def) * ensure there is enough room for the answer and truncate the question * to fit. */ - answer_string = p_new(char, COLS + 1); - snprintf (answer_string, COLS + 1, " ([%s]/%s): ", def == M_YES ? yes : no, + answer_string = p_new(char, getmaxx(stdscr) + 1); + snprintf (answer_string, getmaxx(stdscr) + 1, " ([%s]/%s): ", def == M_YES ? yes : no, def == M_YES ? no : yes); answer_string_len = m_strlen(answer_string); - wprintw (stdscr, "%.*s%s", COLS - answer_string_len, msg, answer_string); + wprintw (stdscr, "%.*s%s", getmaxx(stdscr) - answer_string_len, msg, answer_string); p_delete(&answer_string); for (;;) { @@ -183,6 +199,7 @@ int mutt_yesorno (const char *msg, int def) waddstr (stdscr, (char *) (def == M_YES ? yes : no)); mutt_refresh (); } + CLEARLINE(stdscr, LINES - 1); return (def); } @@ -195,7 +212,7 @@ void mutt_query_exit (void) wtimeout (stdscr, -1); /* restore blocking operation */ if (mutt_yesorno (_("Exit Madmutt?"), M_YES) == M_YES) { mutt_endwin (NULL); - exit (1); + mutt_exit(1); } mutt_clear_error (); mutt_curs_set (-1); @@ -212,15 +229,15 @@ void mutt_curses_error (const char *fmt, ...) va_end (ap); mutt_format_string (TmpErrorbuf, sizeof (TmpErrorbuf), - 0, COLS - 2, 0, 0, Errorbuf, sizeof (Errorbuf), 0); + 0, getmaxy(stdscr) - 2, 0, 0, Errorbuf, sizeof (Errorbuf), 0); snprintf (Errorbuf, sizeof (Errorbuf), "%s", TmpErrorbuf); /* overkill */ if (!option (OPTKEEPQUIET)) { BEEP (); - SETCOLOR (MT_COLOR_ERROR); + SETCOLOR(stdscr, MT_COLOR_ERROR); mvwaddstr (stdscr, LINES - 1, 0, Errorbuf); wclrtoeol (stdscr); - SETCOLOR (MT_COLOR_NORMAL); + SETCOLOR(stdscr, MT_COLOR_NORMAL); mutt_refresh (); } @@ -265,14 +282,14 @@ void mutt_curses_message (const char *fmt, ...) va_end (ap); mutt_format_string (TmpErrorbuf, sizeof (TmpErrorbuf), - 0, COLS - 2, 0, 0, Errorbuf, sizeof (Errorbuf), 0); + 0, getmaxx(stdscr) - 2, 0, 0, Errorbuf, sizeof (Errorbuf), 0); snprintf (Errorbuf, sizeof (Errorbuf), "%s", TmpErrorbuf); /* overkill */ if (!option (OPTKEEPQUIET)) { - SETCOLOR (MT_COLOR_MESSAGE); + SETCOLOR(stdscr, MT_COLOR_MESSAGE); mvwaddstr (stdscr, LINES - 1, 0, Errorbuf); wclrtoeol (stdscr); - SETCOLOR (MT_COLOR_NORMAL); + SETCOLOR(stdscr, MT_COLOR_NORMAL); mutt_refresh (); } @@ -284,26 +301,23 @@ void mutt_show_error (void) if (option (OPTKEEPQUIET)) return; - SETCOLOR (option (OPTMSGERR) ? MT_COLOR_ERROR : MT_COLOR_MESSAGE); - CLEARLINE (LINES - 1); + SETCOLOR(stdscr, option (OPTMSGERR) ? MT_COLOR_ERROR : MT_COLOR_MESSAGE); + CLEARLINE(stdscr, LINES - 1); waddstr (stdscr, Errorbuf); - SETCOLOR (MT_COLOR_NORMAL); + SETCOLOR(stdscr, MT_COLOR_NORMAL); } void curses_initialize(void) { + initscr(); ci_start_color(); - keypad(stdscr, TRUE); - cbreak(); noecho(); - typeahead (-1); /* simulate smooth scrolling */ - meta(stdscr, TRUE); -} - -void _mutt_perror (const char *s, const char* filename, int line) -{ - char *p = strerror (errno); - mutt_error ("%s: %s (errno = %d) from %s:%i", s, p ? p : _("unknown error"), errno, filename, line); + raw(); + keypad(stdscr, true); + typeahead(-1); + meta(stdscr, true); + curs_set(0); + ESCDELAY = 50; } /* @@ -314,9 +328,9 @@ void mutt_what_key (void) { int ch; - mvwprintw (stdscr, LINES - 1, 0, _("Enter keys (^G to abort): ")); + mvwprintw(stdscr, LINES - 1, 0, _("Enter keys (^G to abort): ")); do { - ch = wgetch (stdscr); + ch = getch(); if (ch != ERR && ch != ctrl ('G')) { mutt_message (_("Char = %s, Octal = %o, Decimal = %d"), km_keyname (ch), ch, ch); @@ -361,8 +375,8 @@ int _mutt_enter_fname (const char *prompt, char *buf, ssize_t blen, { event_t ch; - mvwaddstr (stdscr, LINES - 1, 0, (char *) prompt); - waddstr (stdscr, _(" ('?' for list): ")); + mvwaddstr(stdscr, LINES - 1, 0, (char *) prompt); + waddstr(stdscr, _(" ('?' for list): ")); if (buf[0]) waddstr (stdscr, buf); wclrtoeol (stdscr); @@ -370,7 +384,7 @@ int _mutt_enter_fname (const char *prompt, char *buf, ssize_t blen, ch = mutt_getch (); if (ch.ch == -1) { - CLEARLINE (LINES - 1); + CLEARLINE(stdscr, LINES - 1); return (-1); } else if (ch.ch == '?') { @@ -465,29 +479,11 @@ int mutt_multi_choice (const char *prompt, const char *letters) } BEEP (); } - CLEARLINE (LINES - 1); + CLEARLINE(stdscr, LINES - 1); mutt_refresh (); return choice; } -/* - * addwch would be provided by an up-to-date curses library - */ - -int mutt_addwch (wchar_t wc) -{ - char buf[MB_LEN_MAX * 2]; - mbstate_t mbstate; - ssize_t n1, n2; - - p_clear(&mbstate, 1); - if ((n1 = wcrtomb(buf, wc, &mbstate)) == -1 || - (n2 = wcrtomb(buf + n1, 0, &mbstate)) == -1) - return -1; /* ERR */ - else - return waddstr (stdscr, buf); -} - ssize_t mutt_pretty_size(char *s, ssize_t len, ssize_t n) { if (n == 0) @@ -613,10 +609,10 @@ void mutt_format_s_tree (char *dest, ssize_t destlen, /* * mutt_paddstr (n, s) is almost equivalent to - * mutt_format_string (bigbuf, big, n, n, 0, ' ', s, big, 0), waddstr (stdscr, bigbuf) + * mutt_format_string (bigbuf, big, n, n, 0, ' ', s, big, 0), waddstr (main_w, bigbuf) */ -void mutt_paddstr (int n, const char *s) +void mutt_paddstr(WINDOW *win, int n, const char *s) { wchar_t wc; int w; @@ -636,10 +632,10 @@ void mutt_paddstr (int n, const char *s) if (w >= 0) { if (w > n) break; - waddnstr (stdscr, (char *) s, k); + waddnstr(win, (char *) s, k); n -= w; } } while (n-- > 0) - waddch (stdscr, ' '); + waddch(win, ' '); }