📄 scounix下curses编程函数说明11.htm
字号:
<br />int nodelay(win,bf)<br />终端将被设置为非阻塞模式。如果没有任何输入则getch()将返回ERR,<br />否则如果设置为FALSE,则getch()将等待,直到用户按下某个键为止。<br />int timeout(t)<br />int wtimeout(win,t)<br />笔者提倡大家使用这两个函数,而不要使用halfdelay(t)和nodelay(win,bf)getch()的结果取决于t的值。如果t是正数,则读操作将被阻塞t毫秒;<br />如果t为零,则不发生任何阻塞;如果t是负数,则程序将阻塞,直到有输入为止<br />int notimeout(win,bf)<br />如果bf为TRUE,则getch()将使用一个特殊的定时器(一秒钟长)。到时间以后<br />再对以Esc等键打头的输入序列进行解释。<br />int typeahead(fd)<br />如果fd是-1,则不检查超前键击,否则ncurses将使用文件描述符fd来进行这些检查<br />int int rflush(win,bf)<br />当bf为TRUE时使能该函数。在终端上按下任意中断键(quit、break.)时,<br />所有的输出将会刷新到tty驱动程序队列中。<br /></Content><br /></Issue><br /><Replys><br /><Reply><br /><PostUserNickName></PostUserNickName><br /><rank>四级(中级)</rank><br /><ranknum>user4</ranknum><br /><credit>97</credit><br /><ReplyID>6339214</ReplyID><br /><TopicID>984818</TopicID><br /><PostUserId>202193</PostUserId><br /><PostUserName>qisiwole</PostUserName><br /><Point>0</Point><br /><Content>------------------------------<br />终端属性<br />int baudrate()此函数返回终端的速度,以bps为单位。<br />char erasechar()此函数返回当前删除的字符。<br />char killchar()此函数返回当前杀死的字符。<br />int has_ic()<br />int has_il()如果终端具有插入/删除字符的能力,则has_rc()将返回TRUE如果终端具有插入/删除行的能力,则has_il()将返回TRUE,<br />否则这两个函数将返回ERR。(注:尚未实现)<br />char *longname()此函数所返回的指针允许用户访问当前终端的描述符。<br />chty petermattrs()(注:此函数尚未实现)<br />char *termname()这个函数从用户环境中返回TERM的内容。(尚未实现)<br />--------------------------------<br />更新终端<br />int refresh()<br />int wrefresh(win)<br />refersh()将把窗口映像拷贝到终端,而wrefresh(win)将把窗口映像<br />拷贝到win,并使它看起来象原来的样子。<br />int wnoutrefresh(win)<br />int doupdate()<br />wnoutrefresh(win)将会只拷贝到窗口win,这意味着在终端上将不进行任何输出,但是虚拟屏幕实际上看起来象程序员所希望的那样。doupdate()将输<br />出到终端上。程序可以改变许多窗口,对每个窗口都调用一次<br />wnoutrefresh(win),然后再调用一次doupdate()来更新物理屏幕。<br />int redrawln(win)<br />int wredrawln(win,bline,blines)<br />如果在往屏幕上输出新内容时需要清除一些行或者整个屏幕,可以使用这两<br />个函数。(可能这些行已经被破坏了或者由于其他的原因。)<br />int touchwin(win)<br />int touchline(win,start,count)<br />int wtouchln(win,y,n,changed)<br />int untouchwln(win)<br />这些函数通知ncurses整个win窗口已经被改动过了,或者从start直到<br />start+count的这些行已经被改动过了。例如,如果用户有一些重叠的窗口<br />(正如在example.c中一样),对某个窗口的改动不会影响其他窗口的映像。<br />wtouchln(.)<br />将按掀从y开始的n行。如果change的值是TRUE,则这些行被按掀过了,<br />否则就还未被按掀过(改变或未改变)。<br />untouchwin(win)将把窗口win标记为自上次调用refresh()以来还未被按掀。<br />int ls_linetouched(win,line)<br />int ls_wint ouched(win)<br />通过使用这两个函数,用户可以检查自从上次调用refresh()以来,<br />第line行或者窗口win是否已被按掀过。<br />-------------------------------<br />视频属性与颜色<br />ncurses定义了八种颜色,在带有彩色支持的终端上用户可以使用这些颜色。<br />首先,调用start_color()初始化颜色数据结构,<br />然后使用has_colors()检查终端权能。<br />start_color()将初始化COLORS和COLOR_PAIR。<br />前者是终端所支持的最多的颜色数目,而后者是用户可以定义的色彩对的最大数目。<br />两个属性可以使用OR操作组合起来。“COLORPAIRS_1COLORS_1”<br /><br />int color_content(color,t,g,b)<br /><br />此函数获取color的颜色成份r,g和b。<br />首先,函数CheckColor调用start_color()初始化颜色,如果当前终端有彩色的话,<br />则函数has_colors()将返回TRUE。我们检查了这一点以后,调用init_pair(.)<br />把前景色和背景色组合起来,再调用wattrset(.)为特定的窗口设置这些颜色对。<br />此外,如果我们使用的是黑白终端,还可以单独使用wattrset(.)来设置属性。<br />如果要在xterm中获取颜色,我认为最佳方法是使用ansi_xterm,<br />以及来自MidnightCommander的terminfo项目。用户可以获取ansi_xterm<br />和MidnightCommander的源代码(mc_x.x.tar.gz),然后编译ansi_xterm,<br />并对mc_x.x.tar.gz文档中的xterm.ti和vt100.ti使用tic命令。<br />执行ansi_xterm,把它试验出来<br /><br />---------------------------------<br />光标和屏幕坐标<br /><br />int move(y,x)<br />int wmove(win,y,x)<br /> move()将移动光标,而wmove(win)则从窗口win中移动光标。对<br />输入/输出函数来说,还定义了其他的一些宏,在调用特定函数之前,<br />这些宏可以移动光标。<br /><br />int curs_set(bf) 这个函数将把光标置为可见或者不可见,如果终端有这个功能<br />void getyx(win,y,x) getyx(.)将返回当前光标位置。(注意:这是一个宏)<br />void getparyx(win,y,x)<br />如果win是个子窗口,getparyx(.)将把该窗口对应父窗口的坐标存储在y和x则y和x都将为-1。(注:此函数尚未实现)<br /><br />void getbegyx(win,y,x)<br />void getmaxyx(win,y,x)<br />int getmaxx(win)<br />int getmaxy(win)<br />这些函数把窗口win的开始坐标和大小坐标存放在y和x中。<br />int getsyx(int y,int x)<br />int setsyx(int y,int x)<br />getsyx(.)把虚拟屏幕光标存放在y和x中,而setsyx(.)则设置这个坐标。<br />如果y和x是-1, 用户调用getsyx(.)将会设置leaveok。<br /><br />------------------------------<br />滚动<br /><br />int tscrollok(win,bf)<br />当光标在屏幕的右下角并且输入了一个字符(或者新的一行)时,如bf为TRUE则窗口win中的文本将上滚一行。如果bf为FALSE,则鼠标留在原来的位置上<br />当滚动特征打开时,使用下面的函数可以滚动窗口中的内容。<br />(注意:当用户在窗口的最<br />后一行输入一个新行时,也应该发生相应的滚动操作,<br />所以在使用scrollok(.)时要十分小心,<br />否则可能会得到出乎意料的结果。)<br />int scrol(win)<br />此函数将使窗口向上滚动一行(数据结构中的行也向上滚动)。<br />int acrl(n)<br />int wscrl(win,n)<br />这两个函数将使屏幕或者窗口win向上向下滚动,滚动方向取决于整数n的值<br />如果n是正数,则窗口向上滚动n行,否则如果n是负数,则窗口向下滚动n行<br />int setscrreg(t,b)<br />int wsetscrreg(win,t,b)<br />这两个函数设置一个软滚动区。<br />-------------------------------------<br />小键盘<br /><br />WINDOW *newpad(nlines,ncols)<br />WINDOW *subpad(orlg,nlines,ncols,begy,begx)<br />int prefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol)<br />int pnoutrefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol)<br />int pechochar (pad,ch)<br />----------------------------<br />软标签<br /><br />int slk_init(int fmt)<br />int slk_set(int labnum,char *label,int fmt)<br />int slk_refresh()<br />int slk_noutrefresh()<br />char *slk_label(int labnum)<br />int slk_clear()<br />int slk_restore()<br />int slk_touch()<br />int slk_attron(chty peattr)<br />int slk_attrset(chty peattr)<br />int slk_attroff(chty peattr)<br />这些函数是与attron(attr)、attrset(attr)和attroft(attr)相对应的,<br />但它们尚未实现。<br />------------------------------<br />int beep()<br />int flash()<br />char *unctrl(chty pec)<br />char *keyname(int c)<br />int filter()<br />(注:以上函数尚未实现。)<br />void use_env(bf)<br />int putwin(WINDOW *win,FILE*filep)<br />(注:以上函数尚未实现。)<br />WINDOW *getwin(FILE*filep)<br />(注:以上函数尚未实现。)<br />int delay_output(int ms)<br />int flushinp()<br />--------------------------------------<br />低级访问<br /><br />int def_prog_mode()<br />int def_shell)_mode()<br />int reset_prog_mode()<br />int reset_shell_mode()<br />int resetty()<br />int savetty()<br />int ripoffline(int line,int (*init)(WINDOW *,int ))<br />int napms(int ms)<br />---------------------------------<br />屏幕转储<br /><br />int scr_dump(char *filename)<br />(注:此函数尚未实现。)<br />int scr_restore(char *filename)<br />(注:此函数尚未实现。)<br />int scr_init(char *filename)<br />(注:此函数尚未实现。)<br />int scr_set(char *filename)<br />(注:此函数尚未实现。)<br />-----------------------------------<br />Termcap模拟<br /><br />int tgetent(char *bp,char *name)<br />int tgetflag(char fd[2])<br />int tgetnum(char fd[2])<br />char *tgetstr(char fd[2],char **area)<br />char tgoto(char *cap,int col,int row)<br />int tputs(char *str,int offset,int (*putc)())<br />-------------------------------------------<br />调试函数<br /><br />void _init(trace()<br />void _trace(char *,...)<br />char *_traceattr(mode)<br />void traceon()<br />void traceoff()<br /></Content><br /><PostDateTime>2002-08-31 09:29:00</PostDateTime><br /></Reply><Reply><br /><PostUserNickName></PostUserNickName><br /><rank>四级(中级)</rank><br /><ranknum>user4</ranknum><br /><credit>97</credit><br /><ReplyID>6339224</ReplyID>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -