- 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;
+ 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:
+ 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;