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

📄 misc.c

📁 android-w.song.android.widget
💻 C
📖 第 1 页 / 共 2 页
字号:
/* misc.c -- miscellaneous bindable readline functions. *//* Copyright (C) 1987-2009 Free Software Foundation, Inc.   This file is part of the GNU Readline Library (Readline), a library   for reading lines of text with interactive input and history editing.         Readline is free software: you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation, either version 3 of the License, or   (at your option) any later version.   Readline is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with Readline.  If not, see <http://www.gnu.org/licenses/>.*/#define READLINE_LIBRARY#if defined (HAVE_CONFIG_H)#  include <config.h>#endif#if defined (HAVE_UNISTD_H)#  include <unistd.h>#endif /* HAVE_UNISTD_H */#if defined (HAVE_STDLIB_H)#  include <stdlib.h>#else#  include "ansi_stdlib.h"#endif /* HAVE_STDLIB_H */#if defined (HAVE_LOCALE_H)#  include <locale.h>#endif#include <stdio.h>/* System-specific feature definitions and include files. */#include "rldefs.h"#include "rlmbutil.h"/* Some standard library routines. */#include "readline.h"#include "history.h"#include "rlprivate.h"#include "rlshell.h"#include "xmalloc.h"static int rl_digit_loop PARAMS((void));static void _rl_history_set_point PARAMS((void));/* Forward declarations used in this file */void _rl_free_history_entry PARAMS((HIST_ENTRY *));/* If non-zero, rl_get_previous_history and rl_get_next_history attempt   to preserve the value of rl_point from line to line. */int _rl_history_preserve_point = 0;_rl_arg_cxt _rl_argcxt;/* Saved target point for when _rl_history_preserve_point is set.  Special   value of -1 means that point is at the end of the line. */int _rl_history_saved_point = -1;/* **************************************************************** *//*								    *//*			Numeric Arguments			    *//*								    *//* **************************************************************** */int_rl_arg_overflow (){  if (rl_numeric_arg > 1000000)    {      _rl_argcxt = 0;      rl_explicit_arg = rl_numeric_arg = 0;      rl_ding ();      rl_restore_prompt ();      rl_clear_message ();      RL_UNSETSTATE(RL_STATE_NUMERICARG);      return 1;    }  return 0;}void_rl_arg_init (){  rl_save_prompt ();  _rl_argcxt = 0;  RL_SETSTATE(RL_STATE_NUMERICARG);}int_rl_arg_getchar (){  int c;  rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);  RL_SETSTATE(RL_STATE_MOREINPUT);  c = rl_read_key ();  RL_UNSETSTATE(RL_STATE_MOREINPUT);  return c;}/* Process C as part of the current numeric argument.  Return -1 if the   argument should be aborted, 0 if we should not read any more chars, and   1 if we should continue to read chars. */int_rl_arg_dispatch (cxt, c)     _rl_arg_cxt cxt;     int c;{  int key, r;  key = c;  /* If we see a key bound to `universal-argument' after seeing digits,      it ends the argument but is otherwise ignored. */  if (_rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument)    {      if ((cxt & NUM_SAWDIGITS) == 0)	{	  rl_numeric_arg *= 4;	  return 1;	}      else if (RL_ISSTATE (RL_STATE_CALLBACK))        {          _rl_argcxt |= NUM_READONE;          return 0;	/* XXX */        }      else	{	  RL_SETSTATE(RL_STATE_MOREINPUT);	  key = rl_read_key ();	  RL_UNSETSTATE(RL_STATE_MOREINPUT);	  rl_restore_prompt ();	  rl_clear_message ();	  RL_UNSETSTATE(RL_STATE_NUMERICARG);	  if (key < 0)	    return -1;	  return (_rl_dispatch (key, _rl_keymap));	}    }  c = UNMETA (c);  if (_rl_digit_p (c))    {      r = _rl_digit_value (c);    	      rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) +  r : r;      rl_explicit_arg = 1;      _rl_argcxt |= NUM_SAWDIGITS;    }  else if (c == '-' && rl_explicit_arg == 0)    {      rl_numeric_arg = 1;      _rl_argcxt |= NUM_SAWMINUS;      rl_arg_sign = -1;    }  else    {      /* Make M-- command equivalent to M--1 command. */      if ((_rl_argcxt & NUM_SAWMINUS) && rl_numeric_arg == 1 && rl_explicit_arg == 0)	rl_explicit_arg = 1;      rl_restore_prompt ();      rl_clear_message ();      RL_UNSETSTATE(RL_STATE_NUMERICARG);      r = _rl_dispatch (key, _rl_keymap);      if (RL_ISSTATE (RL_STATE_CALLBACK))	{	  /* At worst, this will cause an extra redisplay.  Otherwise,	     we have to wait until the next character comes in. */	  if (rl_done == 0)	    (*rl_redisplay_function) ();	  r = 0;	}      return r;    }  return 1;}/* Handle C-u style numeric args, as well as M--, and M-digits. */static intrl_digit_loop (){  int c, r;  while (1)    {      if (_rl_arg_overflow ())	return 1;      c = _rl_arg_getchar ();      if (c < 0)	{	  _rl_abort_internal ();	  return -1;	}      r = _rl_arg_dispatch (_rl_argcxt, c);      if (r <= 0 || (RL_ISSTATE (RL_STATE_NUMERICARG) == 0))        break;    }  return r;}/* Create a default argument. */void_rl_reset_argument (){  rl_numeric_arg = rl_arg_sign = 1;  rl_explicit_arg = 0;  _rl_argcxt = 0;}/* Start a numeric argument with initial value KEY */intrl_digit_argument (ignore, key)     int ignore, key;{  _rl_arg_init ();  if (RL_ISSTATE (RL_STATE_CALLBACK))    {      _rl_arg_dispatch (_rl_argcxt, key);      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);      return 0;    }  else    {      rl_execute_next (key);      return (rl_digit_loop ());    }}/* C-u, universal argument.  Multiply the current argument by 4.   Read a key.  If the key has nothing to do with arguments, then   dispatch on it.  If the key is the abort character then abort. */intrl_universal_argument (count, key)     int count, key;{  _rl_arg_init ();  rl_numeric_arg *= 4;  return (RL_ISSTATE (RL_STATE_CALLBACK) ? 0 : rl_digit_loop ());}int_rl_arg_callback (cxt)     _rl_arg_cxt cxt;{  int c, r;  c = _rl_arg_getchar ();  if (_rl_argcxt & NUM_READONE)    {      _rl_argcxt &= ~NUM_READONE;      rl_restore_prompt ();      rl_clear_message ();      RL_UNSETSTATE(RL_STATE_NUMERICARG);      rl_execute_next (c);      return 0;    }  r = _rl_arg_dispatch (cxt, c);  return (r != 1);}/* What to do when you abort reading an argument. */intrl_discard_argument (){  rl_ding ();  rl_clear_message ();  _rl_reset_argument ();  return 0;}/* **************************************************************** *//*								    *//*			History Utilities			    *//*								    *//* **************************************************************** *//* We already have a history library, and that is what we use to control   the history features of readline.  This is our local interface to   the history mechanism. *//* While we are editing the history, this is the saved   version of the original line. */HIST_ENTRY *_rl_saved_line_for_history = (HIST_ENTRY *)NULL;/* Set the history pointer back to the last entry in the history. */void_rl_start_using_history (){  using_history ();  if (_rl_saved_line_for_history)    _rl_free_history_entry (_rl_saved_line_for_history);  _rl_saved_line_for_history = (HIST_ENTRY *)NULL;}/* Free the contents (and containing structure) of a HIST_ENTRY. */void_rl_free_history_entry (entry)     HIST_ENTRY *entry;{  if (entry == 0)    return;  FREE (entry->line);

⌨️ 快捷键说明

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