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

📄 terminal.c

📁 android-w.song.android.widget
💻 C
📖 第 1 页 / 共 2 页
字号:
/* terminal.c -- controlling the terminal with termcap. *//* Copyright (C) 1996-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#include <sys/types.h>#include "posixstat.h"#include <fcntl.h>#if defined (HAVE_SYS_FILE_H)#  include <sys/file.h>#endif /* HAVE_SYS_FILE_H */#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"#if defined (GWINSZ_IN_SYS_IOCTL) && !defined (TIOCGWINSZ)#  include <sys/ioctl.h>#endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */#include "rltty.h"#include "tcap.h"/* Some standard library routines. */#include "readline.h"#include "history.h"#include "rlprivate.h"#include "rlshell.h"#include "xmalloc.h"#if defined (__MINGW32__)#  include <windows.h>#  include <wincon.h>static void _win_get_screensize PARAMS((int *, int *));#endif#if defined (__EMX__)static void _emx_get_screensize PARAMS((int *, int *));#endif#define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay)#define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc)/*  If the calling application sets this to a non-zero value, readline will    use the $LINES and $COLUMNS environment variables to set its idea of the    window size before interrogating the kernel. */int rl_prefer_env_winsize = 0;/* **************************************************************** *//*								    *//*			Terminal and Termcap			    *//*								    *//* **************************************************************** */static char *term_buffer = (char *)NULL;static char *term_string_buffer = (char *)NULL;static int tcap_initialized;#if !defined (__linux__) && !defined (NCURSES_VERSION)#  if defined (__EMX__) || defined (NEED_EXTERN_PC)extern #  endif /* __EMX__ || NEED_EXTERN_PC */char PC, *BC, *UP;#endif /* !__linux__ && !NCURSES_VERSION *//* Some strings to control terminal actions.  These are output by tputs (). */char *_rl_term_clreol;char *_rl_term_clrpag;char *_rl_term_cr;char *_rl_term_backspace;char *_rl_term_goto;char *_rl_term_pc;/* Non-zero if we determine that the terminal can do character insertion. */int _rl_terminal_can_insert = 0;/* How to insert characters. */char *_rl_term_im;char *_rl_term_ei;char *_rl_term_ic;char *_rl_term_ip;char *_rl_term_IC;/* How to delete characters. */char *_rl_term_dc;char *_rl_term_DC;char *_rl_term_forward_char;/* How to go up a line. */char *_rl_term_up;/* A visible bell; char if the terminal can be made to flash the screen. */static char *_rl_visible_bell;/* Non-zero means the terminal can auto-wrap lines. */int _rl_term_autowrap = -1;/* Non-zero means that this terminal has a meta key. */static int term_has_meta;/* The sequences to write to turn on and off the meta key, if this   terminal has one. */static char *_rl_term_mm;static char *_rl_term_mo;/* The key sequences output by the arrow keys, if this terminal has any. */static char *_rl_term_ku;static char *_rl_term_kd;static char *_rl_term_kr;static char *_rl_term_kl;/* How to initialize and reset the arrow keys, if this terminal has any. */static char *_rl_term_ks;static char *_rl_term_ke;/* The key sequences sent by the Home and End keys, if any. */static char *_rl_term_kh;static char *_rl_term_kH;static char *_rl_term_at7;	/* @7 *//* Delete key */static char *_rl_term_kD;/* Insert key */static char *_rl_term_kI;/* Cursor control */static char *_rl_term_vs;	/* very visible */static char *_rl_term_ve;	/* normal */static void bind_termcap_arrow_keys PARAMS((Keymap));/* Variables that hold the screen dimensions, used by the display code. */int _rl_screenwidth, _rl_screenheight, _rl_screenchars;/* Non-zero means the user wants to enable the keypad. */int _rl_enable_keypad;/* Non-zero means the user wants to enable a meta key. */int _rl_enable_meta = 1;#if defined (__EMX__)static void_emx_get_screensize (swp, shp)     int *swp, *shp;{  int sz[2];  _scrsize (sz);  if (swp)    *swp = sz[0];  if (shp)    *shp = sz[1];}#endif#if defined (__MINGW32__)static void_win_get_screensize (swp, shp)     int *swp, *shp;{  HANDLE hConOut;  CONSOLE_SCREEN_BUFFER_INFO scr;  hConOut = GetStdHandle (STD_OUTPUT_HANDLE);  if (hConOut != INVALID_HANDLE_VALUE)    {      if (GetConsoleScreenBufferInfo (hConOut, &scr))	{	  *swp = scr.dwSize.X;	  *shp = scr.srWindow.Bottom - scr.srWindow.Top + 1;	}    }}#endif/* Get readline's idea of the screen size.  TTY is a file descriptor open   to the terminal.  If IGNORE_ENV is true, we do not pay attention to the   values of $LINES and $COLUMNS.  The tests for TERM_STRING_BUFFER being   non-null serve to check whether or not we have initialized termcap. */void_rl_get_screen_size (tty, ignore_env)     int tty, ignore_env;{  char *ss;#if defined (TIOCGWINSZ)  struct winsize window_size;#endif /* TIOCGWINSZ */  int wr, wc;  wr = wc = -1;#if defined (TIOCGWINSZ)  if (ioctl (tty, TIOCGWINSZ, &window_size) == 0)    {      wc = (int) window_size.ws_col;      wr = (int) window_size.ws_row;    }#endif /* TIOCGWINSZ */#if defined (__EMX__)  _emx_get_screensize (&wc, &wr);#elif defined (__MINGW32__)  _win_get_screensize (&wc, &wr);#endif  if (ignore_env || rl_prefer_env_winsize == 0)    {      _rl_screenwidth = wc;      _rl_screenheight = wr;    }  else    _rl_screenwidth = _rl_screenheight = -1;  /* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV     is unset.  If we prefer the environment, check it first before     assigning the value returned by the kernel. */  if (_rl_screenwidth <= 0)    {      if (ignore_env == 0 && (ss = sh_get_env_value ("COLUMNS")))	_rl_screenwidth = atoi (ss);      if (_rl_screenwidth <= 0)        _rl_screenwidth = wc;#if !defined (__DJGPP__)      if (_rl_screenwidth <= 0 && term_string_buffer)	_rl_screenwidth = tgetnum ("co");#endif    }  /* Environment variable LINES overrides setting of "li" if IGNORE_ENV     is unset. */  if (_rl_screenheight <= 0)    {      if (ignore_env == 0 && (ss = sh_get_env_value ("LINES")))	_rl_screenheight = atoi (ss);      if (_rl_screenheight <= 0)        _rl_screenheight = wr;#if !defined (__DJGPP__)      if (_rl_screenheight <= 0 && term_string_buffer)	_rl_screenheight = tgetnum ("li");#endif    }  /* If all else fails, default to 80x24 terminal. */  if (_rl_screenwidth <= 1)    _rl_screenwidth = 80;  if (_rl_screenheight <= 0)    _rl_screenheight = 24;  /* If we're being compiled as part of bash, set the environment     variables $LINES and $COLUMNS to new values.  Otherwise, just     do a pair of putenv () or setenv () calls. */  sh_set_lines_and_columns (_rl_screenheight, _rl_screenwidth);  if (_rl_term_autowrap == 0)    _rl_screenwidth--;  _rl_screenchars = _rl_screenwidth * _rl_screenheight;}void_rl_set_screen_size (rows, cols)     int rows, cols;{  if (_rl_term_autowrap == -1)    _rl_init_terminal_io (rl_terminal_name);  if (rows > 0)    _rl_screenheight = rows;  if (cols > 0)    {      _rl_screenwidth = cols;      if (_rl_term_autowrap == 0)	_rl_screenwidth--;    }  if (rows > 0 || cols > 0)    _rl_screenchars = _rl_screenwidth * _rl_screenheight;}voidrl_set_screen_size (rows, cols)     int rows, cols;{  _rl_set_screen_size (rows, cols);}voidrl_get_screen_size (rows, cols)     int *rows, *cols;{  if (rows)    *rows = _rl_screenheight;  if (cols)    *cols = _rl_screenwidth;}voidrl_reset_screen_size (){  _rl_get_screen_size (fileno (rl_instream), 0);}     voidrl_resize_terminal (){  _rl_get_screen_size (fileno (rl_instream), 1);  if (_rl_echoing_p)    {      if (CUSTOM_REDISPLAY_FUNC ())	rl_forced_update_display ();      else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0)	_rl_redisplay_after_sigwinch ();    }}struct _tc_string {     const char * const tc_var;     char **tc_value;};

⌨️ 快捷键说明

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