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

📄 misc.c

📁 android-w.song.android.widget
💻 C
📖 第 1 页 / 共 2 页
字号:
  FREE (entry->timestamp);  xfree (entry);}/* Perhaps put back the current line if it has changed. */intrl_maybe_replace_line (){  HIST_ENTRY *temp;  temp = current_history ();  /* If the current line has changed, save the changes. */  if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list))    {      temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list);      xfree (temp->line);      FREE (temp->timestamp);      xfree (temp);    }  return 0;}/* Restore the _rl_saved_line_for_history if there is one. */intrl_maybe_unsave_line (){  if (_rl_saved_line_for_history)    {      /* Can't call with `1' because rl_undo_list might point to an undo	 list from a history entry, as in rl_replace_from_history() below. */      rl_replace_line (_rl_saved_line_for_history->line, 0);      rl_undo_list = (UNDO_LIST *)_rl_saved_line_for_history->data;      _rl_free_history_entry (_rl_saved_line_for_history);      _rl_saved_line_for_history = (HIST_ENTRY *)NULL;      rl_point = rl_end;	/* rl_replace_line sets rl_end */    }  else    rl_ding ();  return 0;}/* Save the current line in _rl_saved_line_for_history. */intrl_maybe_save_line (){  if (_rl_saved_line_for_history == 0)    {      _rl_saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));      _rl_saved_line_for_history->line = savestring (rl_line_buffer);      _rl_saved_line_for_history->timestamp = (char *)NULL;      _rl_saved_line_for_history->data = (char *)rl_undo_list;    }  return 0;}int_rl_free_saved_history_line (){  if (_rl_saved_line_for_history)    {      _rl_free_history_entry (_rl_saved_line_for_history);      _rl_saved_line_for_history = (HIST_ENTRY *)NULL;    }  return 0;}static void_rl_history_set_point (){  rl_point = (_rl_history_preserve_point && _rl_history_saved_point != -1)		? _rl_history_saved_point		: rl_end;  if (rl_point > rl_end)    rl_point = rl_end;#if defined (VI_MODE)  if (rl_editing_mode == vi_mode && _rl_keymap != vi_insertion_keymap)    rl_point = 0;#endif /* VI_MODE */  if (rl_editing_mode == emacs_mode)    rl_mark = (rl_point == rl_end ? 0 : rl_end);}voidrl_replace_from_history (entry, flags)     HIST_ENTRY *entry;     int flags;			/* currently unused */{  /* Can't call with `1' because rl_undo_list might point to an undo list     from a history entry, just like we're setting up here. */  rl_replace_line (entry->line, 0);  rl_undo_list = (UNDO_LIST *)entry->data;  rl_point = rl_end;  rl_mark = 0;#if defined (VI_MODE)  if (rl_editing_mode == vi_mode)    {      rl_point = 0;      rl_mark = rl_end;    }#endif}/* Process and free undo lists attached to each history entry prior to the   current entry, inclusive, reverting each line to its saved state.  This    is destructive, and state about the current line is lost.  This is not   intended to be called while actively editing, and the current line is   not assumed to have been added to the history list. */void_rl_revert_all_lines (){  int hpos;  HIST_ENTRY *entry;  UNDO_LIST *ul, *saved_undo_list;  char *lbuf;  lbuf = savestring (rl_line_buffer);  saved_undo_list = rl_undo_list;  hpos = where_history ();  entry = (hpos == history_length) ? previous_history () : current_history ();  while (entry)    {      if (ul = (UNDO_LIST *)entry->data)	{	  if (ul == saved_undo_list)	    saved_undo_list = 0;	  /* Set up rl_line_buffer and other variables from history entry */	  rl_replace_from_history (entry, 0);	/* entry->line is now current */	  /* Undo all changes to this history entry */	  while (rl_undo_list)	    rl_do_undo ();	  /* And copy the reverted line back to the history entry, preserving	     the timestamp. */	  FREE (entry->line);	  entry->line = savestring (rl_line_buffer);	  entry->data = 0;	}      entry = previous_history ();    }  /* Restore history state */  rl_undo_list = saved_undo_list;	/* may have been set to null */  history_set_pos (hpos);    /* reset the line buffer */  rl_replace_line (lbuf, 0);  _rl_set_the_line ();  /* and clean up */  xfree (lbuf);}  /* **************************************************************** *//*								    *//*			History Commands			    *//*								    *//* **************************************************************** *//* Meta-< goes to the start of the history. */intrl_beginning_of_history (count, key)     int count, key;{  return (rl_get_previous_history (1 + where_history (), key));}/* Meta-> goes to the end of the history.  (The current line). */intrl_end_of_history (count, key)     int count, key;{  rl_maybe_replace_line ();  using_history ();  rl_maybe_unsave_line ();  return 0;}/* Move down to the next history line. */intrl_get_next_history (count, key)     int count, key;{  HIST_ENTRY *temp;  if (count < 0)    return (rl_get_previous_history (-count, key));  if (count == 0)    return 0;  rl_maybe_replace_line ();  /* either not saved by rl_newline or at end of line, so set appropriately. */  if (_rl_history_saved_point == -1 && (rl_point || rl_end))    _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;  temp = (HIST_ENTRY *)NULL;  while (count)    {      temp = next_history ();      if (!temp)	break;      --count;    }  if (temp == 0)    rl_maybe_unsave_line ();  else    {      rl_replace_from_history (temp, 0);      _rl_history_set_point ();    }  return 0;}/* Get the previous item out of our interactive history, making it the current   line.  If there is no previous history, just ding. */intrl_get_previous_history (count, key)     int count, key;{  HIST_ENTRY *old_temp, *temp;  if (count < 0)    return (rl_get_next_history (-count, key));  if (count == 0)    return 0;  /* either not saved by rl_newline or at end of line, so set appropriately. */  if (_rl_history_saved_point == -1 && (rl_point || rl_end))    _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;  /* If we don't have a line saved, then save this one. */  rl_maybe_save_line ();  /* If the current line has changed, save the changes. */  rl_maybe_replace_line ();  temp = old_temp = (HIST_ENTRY *)NULL;  while (count)    {      temp = previous_history ();      if (temp == 0)	break;      old_temp = temp;      --count;    }  /* If there was a large argument, and we moved back to the start of the     history, that is not an error.  So use the last value found. */  if (!temp && old_temp)    temp = old_temp;  if (temp == 0)    rl_ding ();  else    {      rl_replace_from_history (temp, 0);      _rl_history_set_point ();    }  return 0;}/* **************************************************************** *//*								    *//*			    Editing Modes			    *//*								    *//* **************************************************************** *//* How to toggle back and forth between editing modes. */intrl_vi_editing_mode (count, key)     int count, key;{#if defined (VI_MODE)  _rl_set_insert_mode (RL_IM_INSERT, 1);	/* vi mode ignores insert mode */  rl_editing_mode = vi_mode;  rl_vi_insert_mode (1, key);#endif /* VI_MODE */  return 0;}intrl_emacs_editing_mode (count, key)     int count, key;{  rl_editing_mode = emacs_mode;  _rl_set_insert_mode (RL_IM_INSERT, 1); /* emacs mode default is insert mode */  _rl_keymap = emacs_standard_keymap;  return 0;}/* Function for the rest of the library to use to set insert/overwrite mode. */void_rl_set_insert_mode (im, force)     int im, force;{#ifdef CURSOR_MODE  _rl_set_cursor (im, force);#endif  rl_insert_mode = im;}/* Toggle overwrite mode.  A positive explicit argument selects overwrite   mode.  A negative or zero explicit argument selects insert mode. */intrl_overwrite_mode (count, key)     int count, key;{  if (rl_explicit_arg == 0)    _rl_set_insert_mode (rl_insert_mode ^ 1, 0);  else if (count > 0)    _rl_set_insert_mode (RL_IM_OVERWRITE, 0);  else    _rl_set_insert_mode (RL_IM_INSERT, 0);  return 0;}

⌨️ 快捷键说明

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