📄 curses函数说明(sco).htm
字号:
<br />
<br /> void immedok(win, bf)
<br /> bf设置为TRUE,则对窗口win的每一次改变都将导致物理屏幕的一次刷新。 这将使程序的性能降低,所以默认的值是FALSE。(注:此函数尚未实现)
<br />
<br /> int clearok(win, bf)
<br /> 如果bf值为TRUE,则下一次调用wrefresh(win)时将会清除屏幕, 并完全地把它重新画一遍(就像用户在编辑器vi中按下Ctrl+L一样)。
<br />
<br /> int leaveok(win, bf)
<br /> 默认的行为是,ncurses让物理光标停留在上次刷新窗口时的同一个位置上。 不使用光标的程序可以把leaveok(.)设置为TRUE,这样一般可以节省光标移动所需要的时间。此外,ncurses将试图使终端光标不可见。
<br />
<br /> int nl()
<br /> int nonl()
<br /> 这两个函数控制新行的平移。使用nl()可以打开平移,这样在回车时就会 平移到新的一行,在输出时就会走行。而nonl()可以把平移关上。 关上平移之后,ncurses做光标移动操作时速度就会快一些。
<br />
<br />
<br />4.输入选项
<br />
<br /> int keypad(win, bf)
<br /> bf为TRUE,函数在等待输入时会使能用户终端的键盘上的小键盘。 ncurses将返回一个键代码,该代码在.h头文件中被定义为KEY_*宏,它是针对小键盘上的功能键和方向键的。对于PC键盘来说,这一点是非常有帮助的,因为这样用户就可以使能数字键和光标键。
<br />
<br /> int meta(win.bf)
<br /> bf为TRUE,从getch()返回的键代码将是完整的8位(最高位将不会被去掉)
<br />
<br /> int cbreak()
<br /> int nocbreak()
<br /> int crmode()
<br /> int nocrmode()
<br /> cbreak()和nocbreak()将把终端的CBREAK模式打开或关闭。如果CBREAK打开则程序就可以立刻使用读取的输入信息。如果CBREAK关闭,则输入将被缓存起来,直到产生新的一行(注意:crmode()和nocrmode()只是为了提供向上兼容性,不要使用它们)
<br />
<br /> int raw()
<br /> int noraw()
<br /> 这两个函数将把RAW模式打开或关闭。RAW与CBREAK相同, 它们的区别在于RAW模式不处理特殊字符。
<br />
<br /> int echo()
<br /> int noecho()
<br /> 如果把echo()设置为TRUE,则用户所敲的输入将会回送并显示出来, 而noecho()则对此保持沉默。
<br />
<br /> int halfdelay(t)
<br /> 此函数与cbreak()相似,但它要延迟t秒钟。
<br />
<br /> int nodelay(win, bf)
<br /> 终端将被设置为非阻塞模式。如果没有任何输入则getch()将返回ERR, 否则如果设置为FALSE,则getch()将等待,直到用户按下某个键为止。
<br />
<br /> int timeout(t)
<br /> int wtimeout(win, t)
<br /> 笔者提倡大家使用这两个函数,而不要使用halfdelay(t)和nodelay(win,bf)。getch()的结果取决于t的值。如果t是正数,则读操作将被阻塞t毫秒; 如果t为零,则不发生任何阻塞;如果t是负数,则程序将阻塞,直到有输入为止。
<br />
<br /> int notimeout(win,bf)
<br /> 如果bf为TRUE,则getch()将使用一个特殊的定时器(一秒钟长)。到时间以后再对以Esc等键打头的输入序列进行解释。
<br />
<br /> int typeahead(fd)
<br /> 如果fd是-1,则不检查超前键击,否则ncurses将使用文件描述符fd来进行这些检查
<br />
<br /> int intrflush(win, bf)
<br /> 当bf为TRUE时使能该函数。在终端上按下任意中断键(quit、break.)时, 所有的输出将会刷新到tty驱动程序队列中。
<br />
<br />
<br />三.终端属性
<br /> int baudrate()
<br /> 此函数返回终端的速度,以bps为单位。
<br />
<br /> char erasechar()
<br /> 此函数返回当前删除的字符。
<br />
<br /> char killchar()
<br /> 此函数返回当前杀死的字符。
<br />
<br /> int has_ic()
<br /> int has_il()
<br /> 如果终端具有插入/删除字符的能力,则has_rc()将返回TRUE,如果终端具有插入/删除行的能力,则has_il()将返回TRUE,否则这两个函数将返回ERR。(注:尚未实现)
<br />
<br /> char* longname()
<br /> 此函数所返回的指针允许用户访问当前终端的描述符。
<br />
<br /> chty petermattrs()(注:此函数尚未实现)
<br /> char* termname()
<br /> 这个函数从用户环境中返回TERM的内容。(注:此函数尚未实现)
<br />
<br />四.更新终端
<br /> int refresh()
<br /> int wrefresh(win)
<br /> refersh()将把窗口映像拷贝到终端,而wrefresh(win)将把窗口映像拷贝到win,并使它看起来象原来的样子。
<br />
<br /> int wnoutrefresh(win)
<br /> int doupdate()
<br /> wnoutrefresh(win)将会只拷贝到窗口win,这意味着在终端上将不进行任何输出,但是虚拟屏幕实际上看起来象程序员所希望的那样。doupdate()将输出到终端上。程序可以改变许多窗口,对每个窗口都调用一次 wnoutrefresh(win),然后再调用一次doupdate()来更新物理屏幕。
<br />
<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直到 start+count的这些行已经被改动过了。例如,如果用户有一些重叠的窗口 (正如在example.c中一样),对某个窗口的改动不会影响其他窗口的映像。
<br /> wtouchln(.) 将按掀从y开始的n行。如果change的值是TRUE,则这些行被按掀过了,否则就还未被按掀过(改变或未改变)。
<br /> untouchwin(win)将把窗口win标记为自上次调用refresh()以来还未被按掀。
<br />
<br /> int ls_linetouched(win, line)
<br /> int ls_wint ouched(win)
<br /> 通过使用这两个函数,用户可以检查自从上次调用refresh()以来,
<br /> 第line行或者窗口win是否已被按掀过。
<br />
<br />
<br />五.视频属性与颜色
<br /> ncurses定义了八种颜色,在带有彩色支持的终端上用户可以使用这些颜色。 首先,调用start_color()初始化颜色数据结构,然后使用has_colors()检查终端权能。
<br /> start_color()将初始化COLORS和COLOR_PAIR。 前者是终端所支持的最多的颜色数目,而后者是用户可以定义的色彩对的最大数目。两个属性可以使用OR操作组合起来。“COLORPAIRS_1COLORS_1”
<br />
<br /> int color_content(color,t,g,b)
<br /> 此函数获取color的颜色成份r,g和b。
<br /> 首先,函数checkColor调用start_color()初始化颜色,如果当前终端有彩色的话,
<br />则函数has_colors()将返回TRUE。我们检查了这一点以后,调用init_pair(.) 把前景色和背景色组合起来,再调用wattrset(.)为特定的窗口设置这些颜色对。
<br />
<br /> 此外,如果我们使用的是黑白终端,还可以单独使用wattrset(.)来设置属性。 如果要在xterm中获取颜色,我认为最佳方法是使用ansi_xterm, 以及来自MidnightCommander的terminfo项目。用户可以获取ansi_xterm 和MidnightCommander的源代码(mc_x.x.tar.gz),然后编译ansi_xterm, 并对mc_x.x.tar.gz文档中的xterm.ti和vt100.ti使用tic命令。 执行ansi_xterm,把它试验出来
<br />
<br />六.光标和屏幕坐标
<br />
<br /> int move(y, x)
<br /> int wmove(win, y, x)
<br /> move()将移动光标,而wmove(win)则从窗口win中移动光标。对输入/输出函数来说,还定义了其他的一些宏,在调用特定函数之前,这些宏可以移动光标。
<br />
<br /> int curs_set(bf)
<br /> 这个函数将把光标置为可见或者不可见,如果终端有这个功能
<br />
<br /> void getyx(win, y, x)
<br /> getyx(.)将返回当前光标位置。(注意:这是一个宏)
<br />
<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 />
<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 /> (注意:当用户在窗口的最后一行输入一个新行时,也应该发生相应的滚动操作, 所以在使用scrollok(.)时要十分小心, 否则可能会得到出乎意料的结果。)
<br />
<br /> int scrol(win)
<br /> 此函数将使窗口向上滚动一行(数据结构中的行也向上滚动)。
<br />
<br /> int acrl(n)
<br /> int wscrl(win, n)
<br /> 这两个函数将使屏幕或者窗口win向上向下滚动,滚动方向取决于整数n的值:如果n是正数,则窗口向上滚动n行;如果n是负数,则窗口向下滚动n行
<br />
<br /> int setscrreg(t, b)
<br /> int wsetscrreg(win, t, b)
<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 /> 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 />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -