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

📄 terminal.c

📁 在非GUI环境下
💻 C
📖 第 1 页 / 共 2 页
字号:
  { "pc", &_rl_term_pc },  { "up", &_rl_term_up },  { "vb", &_rl_visible_bell },  { "vs", &_rl_term_vs },  { "ve", &_rl_term_ve },};#define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string))/* Read the desired terminal capability strings into BP.  The capabilities   are described in the TC_STRINGS table. */static voidget_term_capabilities (bp)     char **bp;{#if !defined (__DJGPP__)	/* XXX - doesn't DJGPP have a termcap library? */  register int i;  for (i = 0; i < NUM_TC_STRINGS; i++)    *(tc_strings[i].tc_value) = tgetstr ((char *)tc_strings[i].tc_var, bp);#endif  tcap_initialized = 1;}int_rl_init_terminal_io (terminal_name)     const char *terminal_name;{  const char *term;  char *buffer;  int tty, tgetent_ret;  term = terminal_name ? terminal_name : sh_get_env_value ("TERM");  _rl_term_clrpag = _rl_term_cr = _rl_term_clreol = (char *)NULL;  tty = rl_instream ? fileno (rl_instream) : 0;  _rl_screenwidth = _rl_screenheight = 0;  if (term == 0)    term = "dumb";  /* I've separated this out for later work on not calling tgetent at all     if the calling application has supplied a custom redisplay function,     (and possibly if the application has supplied a custom input function). */  if (CUSTOM_REDISPLAY_FUNC())    {      tgetent_ret = -1;    }  else    {      if (term_string_buffer == 0)	term_string_buffer = (char *)xmalloc(2032);      if (term_buffer == 0)	term_buffer = (char *)xmalloc(4080);      buffer = term_string_buffer;      tgetent_ret = tgetent (term_buffer, term);    }  if (tgetent_ret <= 0)    {      FREE (term_string_buffer);      FREE (term_buffer);      buffer = term_buffer = term_string_buffer = (char *)NULL;      _rl_term_autowrap = 0;	/* used by _rl_get_screen_size */#if defined (__EMX__)      _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);      _rl_screenwidth--;#else /* !__EMX__ */      _rl_get_screen_size (tty, 0);#endif /* !__EMX__ */      /* Defaults. */      if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)        {	  _rl_screenwidth = 79;	  _rl_screenheight = 24;        }      /* Everything below here is used by the redisplay code (tputs). */      _rl_screenchars = _rl_screenwidth * _rl_screenheight;      _rl_term_cr = "\r";      _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL;      _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL;      _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL;      _rl_term_kh = _rl_term_kH = _rl_term_kI = (char *)NULL;      _rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL;      _rl_term_mm = _rl_term_mo = (char *)NULL;      _rl_term_ve = _rl_term_vs = (char *)NULL;#if defined (HACK_TERMCAP_MOTION)      term_forward_char = (char *)NULL;#endif      _rl_terminal_can_insert = term_has_meta = 0;      /* Reasonable defaults for tgoto().  Readline currently only uses         tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we         change that later... */      PC = '\0';      BC = _rl_term_backspace = "\b";      UP = _rl_term_up;      return 0;    }  get_term_capabilities (&buffer);  /* Set up the variables that the termcap library expects the application     to provide. */  PC = _rl_term_pc ? *_rl_term_pc : 0;  BC = _rl_term_backspace;  UP = _rl_term_up;  if (!_rl_term_cr)    _rl_term_cr = "\r";  _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");  _rl_get_screen_size (tty, 0);  /* "An application program can assume that the terminal can do      character insertion if *any one of* the capabilities `IC',      `im', `ic' or `ip' is provided."  But we can't do anything if      only `ip' is provided, so... */  _rl_terminal_can_insert = (_rl_term_IC || _rl_term_im || _rl_term_ic);  /* Check to see if this terminal has a meta key and clear the capability     variables if there is none. */  term_has_meta = (tgetflag ("km") || tgetflag ("MT"));  if (!term_has_meta)    _rl_term_mm = _rl_term_mo = (char *)NULL;  /* Attempt to find and bind the arrow keys.  Do not override already     bound keys in an overzealous attempt, however. */  bind_termcap_arrow_keys (emacs_standard_keymap);#if defined (VI_MODE)  bind_termcap_arrow_keys (vi_movement_keymap);  bind_termcap_arrow_keys (vi_insertion_keymap);#endif /* VI_MODE */  return 0;}/* Bind the arrow key sequences from the termcap description in MAP. */static voidbind_termcap_arrow_keys (map)     Keymap map;{  Keymap xkeymap;  xkeymap = _rl_keymap;  _rl_keymap = map;  rl_bind_keyseq_if_unbound (_rl_term_ku, rl_get_previous_history);  rl_bind_keyseq_if_unbound (_rl_term_kd, rl_get_next_history);  rl_bind_keyseq_if_unbound (_rl_term_kr, rl_forward_char);  rl_bind_keyseq_if_unbound (_rl_term_kl, rl_backward_char);  rl_bind_keyseq_if_unbound (_rl_term_kh, rl_beg_of_line);	/* Home */  rl_bind_keyseq_if_unbound (_rl_term_at7, rl_end_of_line);	/* End */  _rl_keymap = xkeymap;}char *rl_get_termcap (cap)     const char *cap;{  register int i;  if (tcap_initialized == 0)    return ((char *)NULL);  for (i = 0; i < NUM_TC_STRINGS; i++)    {      if (tc_strings[i].tc_var[0] == cap[0] && strcmp (tc_strings[i].tc_var, cap) == 0)        return *(tc_strings[i].tc_value);    }  return ((char *)NULL);}/* Re-initialize the terminal considering that the TERM/TERMCAP variable   has changed. */intrl_reset_terminal (terminal_name)     const char *terminal_name;{  _rl_init_terminal_io (terminal_name);  return 0;}/* A function for the use of tputs () */#ifdef _MINIXvoid_rl_output_character_function (c)     int c;{  putc (c, _rl_out_stream);}#else /* !_MINIX */int_rl_output_character_function (c)     int c;{  return putc (c, _rl_out_stream);}#endif /* !_MINIX *//* Write COUNT characters from STRING to the output stream. */void_rl_output_some_chars (string, count)     const char *string;     int count;{  fwrite (string, 1, count, _rl_out_stream);}/* Move the cursor back. */int_rl_backspace (count)     int count;{  register int i;  if (_rl_term_backspace)    for (i = 0; i < count; i++)      tputs (_rl_term_backspace, 1, _rl_output_character_function);  else    for (i = 0; i < count; i++)      putc ('\b', _rl_out_stream);  return 0;}/* Move to the start of the next line. */intrl_crlf (){#if defined (NEW_TTY_DRIVER)  if (_rl_term_cr)    tputs (_rl_term_cr, 1, _rl_output_character_function);#endif /* NEW_TTY_DRIVER */  putc ('\n', _rl_out_stream);  return 0;}/* Ring the terminal bell. */intrl_ding (){  if (readline_echoing_p)    {      switch (_rl_bell_preference)        {	case NO_BELL:	default:	  break;	case VISIBLE_BELL:	  if (_rl_visible_bell)	    {	      tputs (_rl_visible_bell, 1, _rl_output_character_function);	      break;	    }	  /* FALLTHROUGH */	case AUDIBLE_BELL:	  fprintf (stderr, "\007");	  fflush (stderr);	  break;        }      return (0);    }  return (-1);}/* **************************************************************** *//*								    *//*	 	Controlling the Meta Key and Keypad		    *//*								    *//* **************************************************************** */void_rl_enable_meta_key (){#if !defined (__DJGPP__)  if (term_has_meta && _rl_term_mm)    tputs (_rl_term_mm, 1, _rl_output_character_function);#endif}void_rl_control_keypad (on)     int on;{#if !defined (__DJGPP__)  if (on && _rl_term_ks)    tputs (_rl_term_ks, 1, _rl_output_character_function);  else if (!on && _rl_term_ke)    tputs (_rl_term_ke, 1, _rl_output_character_function);#endif}/* **************************************************************** *//*								    *//*	 		Controlling the Cursor			    *//*								    *//* **************************************************************** *//* Set the cursor appropriately depending on IM, which is one of the   insert modes (insert or overwrite).  Insert mode gets the normal   cursor.  Overwrite mode gets a very visible cursor.  Only does   anything if we have both capabilities. */void_rl_set_cursor (im, force)     int im, force;{  if (_rl_term_ve && _rl_term_vs)    {      if (force || im != rl_insert_mode)	{	  if (im == RL_IM_OVERWRITE)	    tputs (_rl_term_vs, 1, _rl_output_character_function);	  else	    tputs (_rl_term_ve, 1, _rl_output_character_function);	}    }}

⌨️ 快捷键说明

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