社区
Linux/Unix社区
帖子详情
有关termios设置的一个问题
energumen1
2006-03-28 09:16:58
自己用C写的一个Shell,希望能够立刻响应键盘事件(不想采用Curses,而是自己编写),所以采用了设置termios的方式。
由于需要立刻响应键盘事件,所以将ICANON设置为否,也就是工作在非标准模式(标准模式下会有行缓冲,这样就无法立刻响应了)
但是这样设置以后,无法正确响应Backspace(也就是光标可以回退,但是字符不会消失)
我设置VERASE 为true依然没有效果
不知道有什么好的建议吗?
...全文
80
8
打赏
收藏
有关termios设置的一个问题
自己用C写的一个Shell,希望能够立刻响应键盘事件(不想采用Curses,而是自己编写),所以采用了设置termios的方式。 由于需要立刻响应键盘事件,所以将ICANON设置为否,也就是工作在非标准模式(标准模式下会有行缓冲,这样就无法立刻响应了) 但是这样设置以后,无法正确响应Backspace(也就是光标可以回退,但是字符不会消失) 我设置VERASE 为true依然没有效果 不知道有什么好的建议吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
energumen1
2006-03-28
打赏
举报
回复
基本确定了两种方式实现:
1、投机取巧的方式:回退的键盘功能自己实现,由于担心的是回退以后无法清除上一个字母在界面的显示,所以,可以将回退分解为三个连环动作“回退、空格、回退”,这样就人为的清空了那个字母
2、重新编写readline的方式 仿照bash的readline
fierygnu
2006-03-28
打赏
举报
回复
这就是一个自己造轮子还是做总装的问题:)
energumen1
2006-03-28
打赏
举报
回复
是啊,正在考虑实现一个简单的readline,会需要多少时间
毕竟,这里的readline也有自动补齐和历史记录等功能,而且还有已经定义好的快捷键映射表,功能很强大
还有其他的实现建议吗?fierygnu(va_list) ?感觉你在这个方面研究的很深入
fierygnu
2006-03-28
打赏
举报
回复
bash用的是readline包。
energumen1
2006-03-28
打赏
举报
回复
getline好像是不行的,因为不会即时响应按键,譬如tab自动补齐(不过我正在看bash的代码,好像bash用的也是getline)
其实,:),我只是希望补充一个tab自动补齐的功能而已
fierygnu
2006-03-28
打赏
举报
回复
那就没有必要用RAW模式。getline可以很好的满足命令行编辑的需求。
具体的需求说一下?
energumen1
2006-03-28
打赏
举报
回复
赞同fierygnu(va_list) 的发话
但是确实需要这个功能,就像Cisco的登录界面,也是支持键盘事件(譬如tab)和一些特殊按键的,譬如del
bash本身也是支持这个功能的,只是好像不是使用C编写的代码。不过可以参考一下,只是觉得很麻烦,有什么好建议没?
fierygnu
2006-03-28
打赏
举报
回复
只有ICANON模式下才会处理EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT, STATUS, and WERASE。
你为什么还需要backspace?
te
rmi
os
详解.doc
te
rmi
os
的实现中,有大量的参数
设置
,还有伪终端的 说法。原因就在于当初UNIX发明时,(上世纪七十~八十年代),在美国,西欧大学里面用的都是大型机加客户终端,学生们用的是串口方式与大型机进行交 流,通讯。所以...
Linux内核开发
te
rmi
os
详解
te
rmi
os
结构是在P
OS
IX规范中定义的标准接口,它类似于系统V中的
te
rmi
o接口,通过
设置
te
rmi
os
类型的数据结构中的值和使用一小组函数调用,你就可以对终端接口进行控制。
te
rmi
os
:多平台Golang终端管理。 重做版本
有关文档,请参阅 。 入门 通过打开当前终端来使用
te
rmi
os
。 那你可以 从用户那里读取密钥 写文字,清除终端 获取(窗口大小),
设置
(光标位置,样式)属性
te
rm, err :=
te
rmi
os
.Open() if err != nil { panic...
节点术语
要预填充
te
rmi
os
数据,请将arg
设置
为有效的文件描述符或另
一个
Te
rmi
os
对象。 loadFrom(fd) :从文件描述符fd加载
te
rmi
os
数据。 wri
te
To(fd, action) :
设置
文件描述符fd
te
rmi
os
数据。 action必须是
te
rmi
os
....
Linux下 2048小游戏
#include <
te
rmi
os
.h> //操作终端 #include #include #include char my_getch() { int c=0; struct
te
rmi
os
org_opts, new_opts; int res=0; //保留终端原来
设置
res=tcgetattr(STDIN_FILENO, &org;_opts);...
Linux/Unix社区
23,127
社区成员
74,510
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章