- 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 ();
+ 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);
+ buffy_next (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:
+ case OP_EDITOR_COMPLETE_QUERY:
+ 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;
+ mem_realloc (&tempbuf, templen * sizeof (wchar_t));
+ }
+ else
+ BEEP ();
+
+ replace_part (state, i, buf);
+ }
+ else if (flags & M_ALIAS && ch == OP_EDITOR_COMPLETE) {
+ /* 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_ALIAS && ch == OP_EDITOR_COMPLETE_QUERY) {
+ /* 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 if (flags & M_COMMAND) {
+ my_wcstombs (buf, buflen, state->wbuf, state->curpos);
+ i = str_len (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;
+ mem_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_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 ();