X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=enter.c;h=6cf9d8dd5f15a7408abfc36b272ff39285ebba3e;hp=9547ebb8f000e56001597d0fc2b4ef90917cc6f4;hb=1bbedb2dcb610160fe7fd2b44bd098248bfd83a0;hpb=6833ce8bdca2d64e14485118f2a4417b7e1cb1b1 diff --git a/enter.c b/enter.c index 9547ebb..6cf9d8d 100644 --- a/enter.c +++ b/enter.c @@ -17,6 +17,10 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ +#if HAVE_CONFIG_H +# include "config.h" +#endif + #include "mutt.h" #include "mutt_menu.h" #include "mutt_curses.h" @@ -28,8 +32,8 @@ /* redraw flags for mutt_enter_string() */ enum { - M_REDRAW_INIT = 1, /* go to end of line and redraw */ - M_REDRAW_LINE /* redraw entire line */ + M_REDRAW_INIT = 1, /* go to end of line and redraw */ + M_REDRAW_LINE /* redraw entire line */ }; static int my_wcwidth (wchar_t wc) @@ -101,7 +105,7 @@ static void my_wcstombs (char *dest, size_t dlen, const wchar_t *src, size_t sle for (; slen && p - buf < dlen; p += k, src++, slen--) if ((k = wcrtomb (p, *src, &st)) == (size_t)(-1)) - break; + break; p += wcrtomb (p, 0, &st); /* If it fits into the destination buffer, we can stop now */ @@ -127,7 +131,7 @@ size_t my_mbstowcs (wchar_t **pwbuf, size_t *pwbuflen, size_t i, char *buf) wbuf = *pwbuf, wbuflen = *pwbuflen; memset (&st, 0, sizeof (st)); for (; (k = mbrtowc (&wc, buf, MB_LEN_MAX, &st)) && - k != (size_t)(-1) && k != (size_t)(-2); buf += k) + k != (size_t)(-1) && k != (size_t)(-2); buf += k) { if (i >= wbuflen) { @@ -170,9 +174,9 @@ static void replace_part (ENTER_STATE *state, size_t from, char *buf) /* * Returns: - * 1 need to redraw the screen and call me again - * 0 if input was given - * -1 if abort. + * 1 need to redraw the screen and call me again + * 0 if input was given + * -1 if abort. */ int mutt_enter_string(char *buf, size_t buflen, int y, int x, int flags) @@ -185,8 +189,8 @@ int mutt_enter_string(char *buf, size_t buflen, int y, int x, int flags) } int _mutt_enter_string (char *buf, size_t buflen, int y, int x, - int flags, int multiple, char ***files, int *numfiles, - ENTER_STATE *state) + int flags, int multiple, char ***files, int *numfiles, + ENTER_STATE *state) { int width = COLS - x - 1; int redraw; @@ -235,21 +239,21 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x, { if (redraw == M_REDRAW_INIT) { - /* Go to end of line */ - state->curpos = state->lastchar; - state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->lastchar) - width + 1); + /* Go to end of line */ + state->curpos = state->lastchar; + state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->lastchar) - width + 1); } if (state->curpos < state->begin || - my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin) >= width) - state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->curpos) - width / 2); + my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin) >= width) + state->begin = width_ceiling (state->wbuf, state->lastchar, my_wcswidth (state->wbuf, state->curpos) - width / 2); move (y, x); w = 0; for (i = state->begin; i < state->lastchar; i++) { - w += my_wcwidth (state->wbuf[i]); - if (w > width) - break; - my_addwch (state->wbuf[i]); + w += my_wcwidth (state->wbuf[i]); + if (w > width) + break; + my_addwch (state->wbuf[i]); } clrtoeol (); move (y, x + my_wcswidth (state->wbuf + state->begin, state->curpos - state->begin)); @@ -266,343 +270,343 @@ int _mutt_enter_string (char *buf, size_t buflen, int y, int x, { first = 0; if (ch != OP_EDITOR_COMPLETE) - state->tabs = 0; + state->tabs = 0; redraw = M_REDRAW_LINE; switch (ch) { - case OP_EDITOR_HISTORY_UP: - state->curpos = state->lastchar; - replace_part (state, 0, mutt_history_prev (hclass)); - redraw = M_REDRAW_INIT; - break; - - case OP_EDITOR_HISTORY_DOWN: - state->curpos = state->lastchar; - replace_part (state, 0, mutt_history_next (hclass)); - redraw = M_REDRAW_INIT; - break; - - case OP_EDITOR_BACKSPACE: - if (state->curpos == 0) - BEEP (); - else - { - i = state->curpos; - while (i && COMB_CHAR (state->wbuf[i - 1])) - --i; - if (i) - --i; - memmove (state->wbuf + i, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t)); - state->lastchar -= state->curpos - i; - state->curpos = i; - } - break; - - case OP_EDITOR_BOL: - state->curpos = 0; - break; - - case OP_EDITOR_EOL: - redraw= M_REDRAW_INIT; - break; - - case OP_EDITOR_KILL_LINE: - state->curpos = state->lastchar = 0; - break; - - case OP_EDITOR_KILL_EOL: - state->lastchar = state->curpos; - break; - - case OP_EDITOR_BACKWARD_CHAR: - if (state->curpos == 0) - BEEP (); - else - { - while (state->curpos && COMB_CHAR (state->wbuf[state->curpos - 1])) - state->curpos--; - if (state->curpos) - state->curpos--; - } - break; - - case OP_EDITOR_FORWARD_CHAR: - if (state->curpos == state->lastchar) - BEEP (); - else - { - ++state->curpos; - while (state->curpos < state->lastchar && COMB_CHAR (state->wbuf[state->curpos])) - ++state->curpos; - } - break; - - case OP_EDITOR_BACKWARD_WORD: - if (state->curpos == 0) - BEEP (); - else - { - while (state->curpos && iswspace (state->wbuf[state->curpos - 1])) - --state->curpos; - while (state->curpos && !iswspace (state->wbuf[state->curpos - 1])) - --state->curpos; - } - break; - - case OP_EDITOR_FORWARD_WORD: - if (state->curpos == state->lastchar) - BEEP (); - else - { - while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos])) - ++state->curpos; - while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos])) - ++state->curpos; - } - break; - - case OP_EDITOR_CAPITALIZE_WORD: - case OP_EDITOR_UPCASE_WORD: - case OP_EDITOR_DOWNCASE_WORD: - if (state->curpos == state->lastchar) - { - BEEP (); - break; - } - while (state->curpos && !iswspace (state->wbuf[state->curpos])) - --state->curpos; - while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos])) - ++state->curpos; - while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos])) - { - if (ch == OP_EDITOR_DOWNCASE_WORD) - state->wbuf[state->curpos] = towlower (state->wbuf[state->curpos]); - else - { - state->wbuf[state->curpos] = towupper (state->wbuf[state->curpos]); - if (ch == OP_EDITOR_CAPITALIZE_WORD) - ch = OP_EDITOR_DOWNCASE_WORD; - } - state->curpos++; - } - break; - - case OP_EDITOR_DELETE_CHAR: - if (state->curpos == state->lastchar) - BEEP (); - else - { - i = state->curpos; - while (i < state->lastchar && COMB_CHAR (state->wbuf[i])) - ++i; - if (i < state->lastchar) - ++i; - while (i < state->lastchar && COMB_CHAR (state->wbuf[i])) - ++i; - memmove (state->wbuf + state->curpos, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t)); - state->lastchar -= i - state->curpos; - } - break; - - case OP_EDITOR_KILL_WORD: - /* delete to begining of word */ - if (state->curpos != 0) - { - i = state->curpos; - while (i && iswspace (state->wbuf[i - 1])) - --i; - if (i) - { - if (iswalnum (state->wbuf[i - 1])) - { - for (--i; i && iswalnum (state->wbuf[i - 1]); i--) - ; - } - else - --i; - } - memmove (state->wbuf + i, state->wbuf + state->curpos, - (state->lastchar - state->curpos) * sizeof (wchar_t)); - state->lastchar += i - state->curpos; - state->curpos = i; - } - break; - - case OP_EDITOR_KILL_EOW: - /* delete to end of word */ - for (i = state->curpos; - i < state->lastchar && iswspace (state->wbuf[i]); i++) - ; - for (; i < state->lastchar && !iswspace (state->wbuf[i]); i++) - ; - memmove (state->wbuf + state->curpos, state->wbuf + i, - (state->lastchar - i) * sizeof (wchar_t)); - state->lastchar += state->curpos - i; - break; - - case OP_EDITOR_BUFFY_CYCLE: - if (flags & M_EFILE) - { - first = 1; /* clear input if user types a real key later */ - my_wcstombs (buf, buflen, state->wbuf, state->curpos); - mutt_buffy (buf, buflen); - state->curpos = state->lastchar = my_mbstowcs (&state->wbuf, &state->wbuflen, 0, buf); - break; - } - else if (!(flags & M_FILE)) - goto self_insert; - /* fall through to completion routine (M_FILE) */ - - case OP_EDITOR_COMPLETE: - state->tabs++; - if (flags & M_CMD) - { - for (i = state->curpos; i && state->wbuf[i-1] != ' '; i--) - ; - my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); - if (tempbuf && templen == state->lastchar - i && - !memcmp (tempbuf, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t))) - { - mutt_select_file (buf, buflen, (flags & M_EFILE) ? M_SEL_FOLDER : 0); - set_option (OPTNEEDREDRAW); - if (*buf) - replace_part (state, i, buf); - rv = 1; - goto bye; - } - if (!mutt_complete (buf, buflen)) - { - templen = state->lastchar - i; - safe_realloc (&tempbuf, templen * sizeof (wchar_t)); - } - else - BEEP (); - - replace_part (state, i, buf); - } - else if (flags & M_ALIAS) - { - /* invoke the alias-menu to get more addresses */ - for (i = state->curpos; i && state->wbuf[i-1] != ',' && - state->wbuf[i-1] != ':'; i--) - ; - for (; i < state->lastchar && state->wbuf[i] == ' '; i++) - ; - my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); - r = mutt_alias_complete (buf, buflen); - replace_part (state, i, buf); - if (!r) - { - rv = 1; - goto bye; - } - break; - } - else if (flags & M_COMMAND) - { - my_wcstombs (buf, buflen, state->wbuf, state->curpos); - i = strlen (buf); - if (i && buf[i - 1] == '=' && - mutt_var_value_complete (buf, buflen, i)) - state->tabs = 0; - else if (!mutt_command_complete (buf, buflen, i, state->tabs)) - BEEP (); - replace_part (state, 0, buf); - } - else if (flags & (M_FILE | M_EFILE)) - { - my_wcstombs (buf, buflen, state->wbuf, state->curpos); - - /* see if the path has changed from the last time */ - if ((!tempbuf && !state->lastchar) || (tempbuf && templen == state->lastchar && - !memcmp (tempbuf, state->wbuf, state->lastchar * sizeof (wchar_t)))) - { - _mutt_select_file (buf, buflen, - ((flags & M_EFILE) ? M_SEL_FOLDER : 0) | (multiple ? M_SEL_MULTI : 0), - files, numfiles); - set_option (OPTNEEDREDRAW); - if (*buf) - { - mutt_pretty_mailbox (buf); - if (!pass) - mutt_history_add (hclass, buf); - rv = 0; - goto bye; - } - - /* file selection cancelled */ - rv = 1; - goto bye; - } - - if (!mutt_complete (buf, buflen)) - { - templen = state->lastchar; - safe_realloc (&tempbuf, templen * sizeof (wchar_t)); - memcpy (tempbuf, state->wbuf, templen * sizeof (wchar_t)); - } - else - BEEP (); /* let the user know that nothing matched */ - replace_part (state, 0, buf); - } - else - goto self_insert; - break; - - case OP_EDITOR_COMPLETE_QUERY: - if (flags & M_ALIAS) - { - /* invoke the query-menu to get more addresses */ - if ((i = state->curpos)) - { - for (; i && state->wbuf[i - 1] != ','; i--) - ; - for (; i < state->curpos && state->wbuf[i] == ' '; i++) - ; - } - - my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); - mutt_query_complete (buf, buflen); - replace_part (state, i, buf); - - rv = 1; - goto bye; - } - else - goto self_insert; - - case OP_EDITOR_QUOTE_CHAR: - { - event_t event; - /*ADDCH (LastKey);*/ - event = mutt_getch (); - if (event.ch != -1) - { - LastKey = event.ch; - goto self_insert; - } - } - - case OP_EDITOR_TRANSPOSE_CHARS: - if (state->lastchar < 2) - BEEP (); - else - { - wchar_t t; - - if (state->curpos == 0) - state->curpos = 2; - else if (state->curpos < state->lastchar) - ++state->curpos; - - t = state->wbuf[state->curpos - 2]; - state->wbuf[state->curpos - 2] = state->wbuf[state->curpos - 1]; - state->wbuf[state->curpos - 1] = t; - } - break; - - default: - BEEP (); + case OP_EDITOR_HISTORY_UP: + state->curpos = state->lastchar; + replace_part (state, 0, mutt_history_prev (hclass)); + redraw = M_REDRAW_INIT; + break; + + case OP_EDITOR_HISTORY_DOWN: + state->curpos = state->lastchar; + replace_part (state, 0, mutt_history_next (hclass)); + redraw = M_REDRAW_INIT; + break; + + case OP_EDITOR_BACKSPACE: + if (state->curpos == 0) + BEEP (); + else + { + i = state->curpos; + while (i && COMB_CHAR (state->wbuf[i - 1])) + --i; + if (i) + --i; + memmove (state->wbuf + i, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t)); + state->lastchar -= state->curpos - i; + state->curpos = i; + } + break; + + case OP_EDITOR_BOL: + state->curpos = 0; + break; + + case OP_EDITOR_EOL: + redraw= M_REDRAW_INIT; + break; + + case OP_EDITOR_KILL_LINE: + state->curpos = state->lastchar = 0; + break; + + case OP_EDITOR_KILL_EOL: + state->lastchar = state->curpos; + break; + + case OP_EDITOR_BACKWARD_CHAR: + if (state->curpos == 0) + BEEP (); + else + { + while (state->curpos && COMB_CHAR (state->wbuf[state->curpos - 1])) + state->curpos--; + if (state->curpos) + state->curpos--; + } + break; + + case OP_EDITOR_FORWARD_CHAR: + if (state->curpos == state->lastchar) + BEEP (); + else + { + ++state->curpos; + while (state->curpos < state->lastchar && COMB_CHAR (state->wbuf[state->curpos])) + ++state->curpos; + } + break; + + case OP_EDITOR_BACKWARD_WORD: + if (state->curpos == 0) + BEEP (); + else + { + while (state->curpos && iswspace (state->wbuf[state->curpos - 1])) + --state->curpos; + while (state->curpos && !iswspace (state->wbuf[state->curpos - 1])) + --state->curpos; + } + break; + + case OP_EDITOR_FORWARD_WORD: + if (state->curpos == state->lastchar) + BEEP (); + else + { + while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos])) + ++state->curpos; + while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos])) + ++state->curpos; + } + break; + + case OP_EDITOR_CAPITALIZE_WORD: + case OP_EDITOR_UPCASE_WORD: + case OP_EDITOR_DOWNCASE_WORD: + if (state->curpos == state->lastchar) + { + BEEP (); + break; + } + while (state->curpos && !iswspace (state->wbuf[state->curpos])) + --state->curpos; + while (state->curpos < state->lastchar && iswspace (state->wbuf[state->curpos])) + ++state->curpos; + while (state->curpos < state->lastchar && !iswspace (state->wbuf[state->curpos])) + { + if (ch == OP_EDITOR_DOWNCASE_WORD) + state->wbuf[state->curpos] = towlower (state->wbuf[state->curpos]); + else + { + state->wbuf[state->curpos] = towupper (state->wbuf[state->curpos]); + if (ch == OP_EDITOR_CAPITALIZE_WORD) + ch = OP_EDITOR_DOWNCASE_WORD; + } + state->curpos++; + } + break; + + case OP_EDITOR_DELETE_CHAR: + if (state->curpos == state->lastchar) + BEEP (); + else + { + i = state->curpos; + while (i < state->lastchar && COMB_CHAR (state->wbuf[i])) + ++i; + if (i < state->lastchar) + ++i; + while (i < state->lastchar && COMB_CHAR (state->wbuf[i])) + ++i; + memmove (state->wbuf + state->curpos, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t)); + state->lastchar -= i - state->curpos; + } + break; + + case OP_EDITOR_KILL_WORD: + /* delete to begining of word */ + if (state->curpos != 0) + { + i = state->curpos; + while (i && iswspace (state->wbuf[i - 1])) + --i; + if (i) + { + if (iswalnum (state->wbuf[i - 1])) + { + for (--i; i && iswalnum (state->wbuf[i - 1]); i--) + ; + } + else + --i; + } + memmove (state->wbuf + i, state->wbuf + state->curpos, + (state->lastchar - state->curpos) * sizeof (wchar_t)); + state->lastchar += i - state->curpos; + state->curpos = i; + } + break; + + case OP_EDITOR_KILL_EOW: + /* delete to end of word */ + for (i = state->curpos; + i < state->lastchar && iswspace (state->wbuf[i]); i++) + ; + for (; i < state->lastchar && !iswspace (state->wbuf[i]); i++) + ; + memmove (state->wbuf + state->curpos, state->wbuf + i, + (state->lastchar - i) * sizeof (wchar_t)); + state->lastchar += state->curpos - i; + break; + + case OP_EDITOR_BUFFY_CYCLE: + if (flags & M_EFILE) + { + first = 1; /* clear input if user types a real key later */ + my_wcstombs (buf, buflen, state->wbuf, state->curpos); + mutt_buffy (buf, buflen); + state->curpos = state->lastchar = my_mbstowcs (&state->wbuf, &state->wbuflen, 0, buf); + break; + } + else if (!(flags & M_FILE)) + goto self_insert; + /* fall through to completion routine (M_FILE) */ + + case OP_EDITOR_COMPLETE: + state->tabs++; + if (flags & M_CMD) + { + for (i = state->curpos; i && state->wbuf[i-1] != ' '; i--) + ; + my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); + if (tempbuf && templen == state->lastchar - i && + !memcmp (tempbuf, state->wbuf + i, (state->lastchar - i) * sizeof (wchar_t))) + { + mutt_select_file (buf, buflen, (flags & M_EFILE) ? M_SEL_FOLDER : 0); + set_option (OPTNEEDREDRAW); + if (*buf) + replace_part (state, i, buf); + rv = 1; + goto bye; + } + if (!mutt_complete (buf, buflen)) + { + templen = state->lastchar - i; + safe_realloc (&tempbuf, templen * sizeof (wchar_t)); + } + else + BEEP (); + + replace_part (state, i, buf); + } + else if (flags & M_ALIAS) + { + /* invoke the alias-menu to get more addresses */ + for (i = state->curpos; i && state->wbuf[i-1] != ',' && + state->wbuf[i-1] != ':'; i--) + ; + for (; i < state->lastchar && state->wbuf[i] == ' '; i++) + ; + my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); + r = mutt_alias_complete (buf, buflen); + replace_part (state, i, buf); + if (!r) + { + rv = 1; + goto bye; + } + break; + } + else if (flags & M_COMMAND) + { + my_wcstombs (buf, buflen, state->wbuf, state->curpos); + i = strlen (buf); + if (i && buf[i - 1] == '=' && + mutt_var_value_complete (buf, buflen, i)) + state->tabs = 0; + else if (!mutt_command_complete (buf, buflen, i, state->tabs)) + BEEP (); + replace_part (state, 0, buf); + } + else if (flags & (M_FILE | M_EFILE)) + { + my_wcstombs (buf, buflen, state->wbuf, state->curpos); + + /* see if the path has changed from the last time */ + if ((!tempbuf && !state->lastchar) || (tempbuf && templen == state->lastchar && + !memcmp (tempbuf, state->wbuf, state->lastchar * sizeof (wchar_t)))) + { + _mutt_select_file (buf, buflen, + ((flags & M_EFILE) ? M_SEL_FOLDER : 0) | (multiple ? M_SEL_MULTI : 0), + files, numfiles); + set_option (OPTNEEDREDRAW); + if (*buf) + { + mutt_pretty_mailbox (buf); + if (!pass) + mutt_history_add (hclass, buf); + rv = 0; + goto bye; + } + + /* file selection cancelled */ + rv = 1; + goto bye; + } + + if (!mutt_complete (buf, buflen)) + { + templen = state->lastchar; + safe_realloc (&tempbuf, templen * sizeof (wchar_t)); + memcpy (tempbuf, state->wbuf, templen * sizeof (wchar_t)); + } + else + BEEP (); /* let the user know that nothing matched */ + replace_part (state, 0, buf); + } + else + goto self_insert; + break; + + case OP_EDITOR_COMPLETE_QUERY: + if (flags & M_ALIAS) + { + /* invoke the query-menu to get more addresses */ + if ((i = state->curpos)) + { + for (; i && state->wbuf[i - 1] != ','; i--) + ; + for (; i < state->curpos && state->wbuf[i] == ' '; i++) + ; + } + + my_wcstombs (buf, buflen, state->wbuf + i, state->curpos - i); + mutt_query_complete (buf, buflen); + replace_part (state, i, buf); + + rv = 1; + goto bye; + } + else + goto self_insert; + + case OP_EDITOR_QUOTE_CHAR: + { + event_t event; + /*ADDCH (LastKey);*/ + event = mutt_getch (); + if (event.ch != -1) + { + LastKey = event.ch; + goto self_insert; + } + } + + case OP_EDITOR_TRANSPOSE_CHARS: + if (state->lastchar < 2) + BEEP (); + else + { + wchar_t t; + + if (state->curpos == 0) + state->curpos = 2; + else if (state->curpos < state->lastchar) + ++state->curpos; + + t = state->wbuf[state->curpos - 2]; + state->wbuf[state->curpos - 2] = state->wbuf[state->curpos - 1]; + state->wbuf[state->curpos - 1] = t; + } + break; + + default: + BEEP (); } } else @@ -614,73 +618,80 @@ self_insert: /* use the raw keypress */ ch = LastKey; + if ((ch == '#') && (flags & M_LASTFOLDER)) + { + rv = 2; + my_wcstombs (buf, buflen, state->wbuf, state->lastchar); + goto bye; + } + #ifdef KEY_ENTER /* treat ENTER the same as RETURN */ if (ch == KEY_ENTER) - ch = '\r'; + ch = '\r'; #endif /* quietly ignore all other function keys */ if (ch & ~0xff) - continue; + continue; /* gather the octets into a wide character */ { - char c; - size_t k; - - c = ch; - k = mbrtowc (&wc, &c, 1, &mbstate); - if (k == (size_t)(-2)) - continue; - else if (k && k != 1) - { - memset (&mbstate, 0, sizeof (mbstate)); - continue; - } + char c; + size_t k; + + c = ch; + k = mbrtowc (&wc, &c, 1, &mbstate); + if (k == (size_t)(-2)) + continue; + else if (k && k != 1) + { + memset (&mbstate, 0, sizeof (mbstate)); + continue; + } } if (first && (flags & M_CLEAR)) { - first = 0; - if (IsWPrint (wc)) /* why? */ - state->curpos = state->lastchar = 0; + first = 0; + if (IsWPrint (wc)) /* why? */ + state->curpos = state->lastchar = 0; } if (wc == '\r' || wc == '\n') { - /* Convert from wide characters */ - my_wcstombs (buf, buflen, state->wbuf, state->lastchar); - if (!pass) - mutt_history_add (hclass, buf); - - if (multiple) - { - char **tfiles; - *numfiles = 1; - tfiles = safe_calloc (*numfiles, sizeof (char *)); - mutt_expand_path (buf, buflen); - tfiles[0] = safe_strdup (buf); - *files = tfiles; - } - rv = 0; - goto bye; + /* Convert from wide characters */ + my_wcstombs (buf, buflen, state->wbuf, state->lastchar); + if (!pass) + mutt_history_add (hclass, buf); + + if (multiple) + { + char **tfiles; + *numfiles = 1; + tfiles = safe_calloc (*numfiles, sizeof (char *)); + mutt_expand_path (buf, buflen); + tfiles[0] = safe_strdup (buf); + *files = tfiles; + } + rv = 0; + goto bye; } else if (wc && (wc < ' ' || IsWPrint (wc))) /* why? */ { - if (state->lastchar >= state->wbuflen) - { - state->wbuflen = state->lastchar + 20; - safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t)); - } - memmove (state->wbuf + state->curpos + 1, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t)); - state->wbuf[state->curpos++] = wc; - state->lastchar++; + if (state->lastchar >= state->wbuflen) + { + state->wbuflen = state->lastchar + 20; + safe_realloc (&state->wbuf, state->wbuflen * sizeof (wchar_t)); + } + memmove (state->wbuf + state->curpos + 1, state->wbuf + state->curpos, (state->lastchar - state->curpos) * sizeof (wchar_t)); + state->wbuf[state->curpos++] = wc; + state->lastchar++; } else { - mutt_flushinp (); - BEEP (); + mutt_flushinp (); + BEEP (); } } }