⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enter.c

📁 mutt-1.5.12 源代码。linux 下邮件接受的工具。
💻 C
📖 第 1 页 / 共 2 页
字号:
	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:	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;	      safe_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 = 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_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    {      self_insert:      state->tabs = 0;      /* use the raw keypress */      ch = LastKey;#ifdef KEY_ENTER      /* treat ENTER the same as RETURN */      if (ch == KEY_ENTER)	ch = '\r';#endif      /* quietly ignore all other function keys */      if (ch & ~0xff)	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;	}      }      if (first && (flags & M_CLEAR))      {	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;      }      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++;      }      else      {	mutt_flushinp ();	BEEP ();      }    }  }    bye:    FREE (&tempbuf);  return rv;}void mutt_free_enter_state (ENTER_STATE **esp){  if (!esp) return;    FREE (&(*esp)->wbuf);  FREE (esp);		/* __FREE_CHECKED__ */}/* * TODO: * very narrow screen might crash it * sort out the input side * unprintable chars */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -