• Copyright(C) NCURSES Programming HOWTO

初始化函数

我们现在知道在程序中调用initscr()函数,屏幕就会初始化并进入curses 模式。本章我们会介绍其它的初始化函数,这些函数可以根据我们自己的要求在初始化后定制curses 会话(curses session)的功能及模式。例如:终端模式(terminal mode)、彩色显示模式(colormode)、鼠标操作模式(mouse mode)等。当然,我们还可以定制混合模式。这章就让我们来讨论这些在initscr()函数之后调用的初始化函数。

raw()函数和cbreak()函数

通常情况下,终端驱动程序会缓冲用户输入的字符,直到遇到换行符或回车符后,这些字符才可以被使用。但是大多数程序要求字符在输入时就可以被使用。raw()cbreak()两个函数都可以禁止行缓冲(line buffering)。区别是:在raw()函数模式下,处理挂起(CTRLZ)、中断或退出(CTRLC)等控制字符时,将直接传送给程序去处理而不产生终端信号;而在cbreak()模式下,控制字符将被终端驱动程序解释成其它字符。就我个人而言,比较喜欢使用raw()函数,因为用它可以做一些一般用户无法进行的控制操作。

echo()函数和noecho()函数

这两个函数用来控制是否将从键盘输入的字符显示在终端上。调用noecho()函数禁止输入的字符出现在屏幕上。也许程序员希望用户在进行控制操作时,需要屏蔽掉控制字符(如组合键操作),或调用getch()函数读取键盘字符时,不想显示输入的字符(如在控制台输入登陆密码)。大多数的交互式应用程序在初始化时会调用noecho()函数,用于在进行控制操作时不显示输入的控制字符。这两个函数给予程序员很大的灵活性,使程序员可以在窗口中的任意地方,实现输入字符的显示和屏蔽,而不需要刷新屏幕。

keypad()函数

这个函数允许使用功能键,例如:F1、F2、方向键等功能键。几乎所有的交互式程序都需要使用功能键,因为绝大多数用户界面主要用方向键进行操作。使用keypad(stdscr,TURE)就为“标准屏幕”(stdscr)激活了功能键。你将会在以后的章节中学习到如何使用功能键。

halfdelay()函数

halfdelay()函数会启用半延时模式(halfdelaymode)。和cbreak()函数一样,当程序需要用户输入字符时,输入的每个字符都是可用的。给halfdelay()传递一个整型参数(以0.1 秒为单位),它就会在这个参数时间内等待输入。如果没有有效的输入,则返回ERR。 一般来说,这个函数在需要等待输入的程序中会用到。如果用户没有在规定时间内给出有效输入,程序就可以去处理其它事情。最常见例子就是在输入密码时做出超时响应。

其它的初始化函数

上面提到的函数用来定制curses 在初始化后的行为,因此这些函数只能在整个curses 会话的开始部分(即初始化时)调用,而不能在程序的其它地方调用。

示例程序

让我们写一个程序用来说明这些函数的用法。

#include <ncurses.h>
/*
Compile: gcc main.c -lncurses
*/
int main()
{int ch;initscr();              /* 开始curses 模式*/raw();                  /* 禁用行缓冲*/keypad(stdscr, TRUE);   /* 开启功能键响应模式*/noecho();               /* 当执行getch()函数的时候关闭键盘回显*/printw("Type any character to see it in bold\n");ch = getch();           /* 如果没有调用raw()函数,
                               我们必须按下enter 键才可以将字符传递给程序*/if(ch == KEY_F(1))      /* 如果没有调用keypad()初始化,将不会执行这条语句*/printw("F1 Key pressed");else                    /* 如果没有使用noecho() 函数,一些控制字符将会被打印到屏幕上*/{ printw("The pressed key is ");attron(A_BOLD);printw("%c", ch);attroff(A_BOLD);}refresh();              /* 将缓冲区的内容打印到显示器上*/getch();                /* 等待用户输入*/endwin();               /* 结束curses 模式*/return 0;
}

这个程序很简单,但还是有一些在前面的章节没有介绍的函数。getch()函数用来取得用户输入的字符,它等价于通常的getchar()函数,只是我们在调用getchar()函数时要禁止行缓冲以避免在输入完成后按enter 键。在后面的章节中我们将讨论到输入函数。attron()attroff()函数分别作为修饰的开头和结尾,修饰其间输出的字符。例如在本例中加粗(即使用A_BOLD作为函数参数)用户输入的字符。在后面的章节中我们也将会详细讨论这些函数。

ncurses初始化函数:raw(),cbreak(),echo(),noecho(),keypad(),halfdelay()相关推荐

  1. pytorch系列 -- 9 pytorch nn.init 中实现的初始化函数 uniform, normal, const, Xavier, He initialization...

    本文内容: 1. Xavier 初始化 2. nn.init 中各种初始化函数 3. He 初始化 torch.init https://pytorch.org/docs/stable/nn.html ...

  2. 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码......

    当我在窗体初始化的时候,调用了一个外部的dill时,它就不知什么原因的 抛出一个"正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码&quo ...

  3. python类继承重复_python单例模式,可以继承,不会重复执行初始化函数的版本

    网上最长见的版本: 1 classSingleton(object):2 __instance=None3 def__init__(self):4 pass 5 def__new__(cls,*arg ...

  4. python初始化函数_当你学会了Python爬虫,网上的图片素材就免费了

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 加入作者的python学习圈子:1156465813 即可免费获取,资料全 ...

  5. c++ 结构体初始化_STM32入门系列-使用库函数点亮LED,LED初始化函数

    要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内.这两个文件需要我们自己编写. 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用 ...

  6. OC语言中的便利初始化函数和便利构造器

    便利遍历初始化函数与便利构造器(以Student类为例): main函数 Student.h(声明) ................... Student.m(实现) ............... ...

  7. 【pytorch 】nn.init 中实现的初始化函数 normal, Xavier==》为了保证数据的分布(均值方差一致)是一样的,类似BN

    为什么要输入和输出的方差相同?有利于信息的传递 为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等.在考虑线性激活函数的情况下, 在初始化的时候使各层神经元的方差保持不变, 即使各层有着相同的 ...

  8. OSTaskStkInit_FPE_x86()--浮点仿真任务栈初始化函数(分段寻址的地址转换为线性地址)

    段地址:段内偏移量寻址方案 在 uC/OS-II 随书光盘中针对 80x86 (不带硬件浮点运算单元)的移植源码中,有一个浮点仿真任务栈初始化函数 OSTaskStkInit_FPE_x86(),其中 ...

  9. python初始化函数_当你学会了Python爬虫,网上的图片素材就开始免费了

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 加企鹅群695185429即可免费获取,资料全在群文件里.资料可以领取包括 ...

最新文章

  1. Spring JdbcTemplate方法详解
  2. oracle数据库视图:定义、查询与更新 实践学习报告
  3. 27. FormPanel类的defaults属性
  4. Android利用RecyclerView实现列表倒计时
  5. 06-密码学基础-混合密码系统
  6. shell脚本编译规范(编写第一个脚本,脚本变量的作用,类型 ,了解read命令,let命令,环境变量和预定义变量)
  7. java多线程编程_Java多线程编程
  8. mysql联表查球队比分_mysql – 什么可以导致连接比分为两个查询慢?
  9. sql服务器时间不正确,使用更改 CPU 频率的实用工具或技术时,SQL Server 计时值可能不正确...
  10. “双十一”背后,阿里的技术到底有多“牛”?
  11. 解决 Agent admitted failure to sign using the key 问题 with ssh
  12. 计算机视觉工作项目方案设计,机器视觉(项目方案设计案例)47.pdf
  13. hive中的高阶函数:with cube函数,Grouping sets函数,With rollup函数
  14. 左倾红黑树(Left-Leaning Red-Black Trees:LLRBT)解析
  15. python局域网大文件_利用Python+pyftpdlib实现在局域网中互传文件
  16. Ubuntu 开机自动开启数字键小键盘
  17. 【MATLAB教程案例15】基于WOA鲸鱼优化算法的函数极值计算matlab仿真及其他应用
  18. 柱状图怎么添加数据python_Python数据可视化:如何用Matplotlib创建柱状图
  19. 全网热议的云原生技术到底什么?看完这25点你就知道了
  20. 基于简单模型KNN——泰坦尼克号获救分析

热门文章

  1. 2019.08.30数组去重的几种方法以及所需时间对比
  2. snmp v3的安全配置 snmp认证与加密配置(53)
  3. CentOS 7下彻底卸载MySQL数据库
  4. 我的js函数库(持续更新)
  5. 自然语言处理的几个困难
  6. Android 用户界面---拖放(Drag and Drop)(二)
  7. 2013年上半年项目总结
  8. 博客园的祥和需要大家共同努力
  9. 雨林木风与微软数年博弈:蚂蚁和大象共舞
  10. android 判断服务是否正在运行,Android 判断某个服务(service)是否运行