LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1056|回复: 9

如何在curses模式下得到alt或者ctrl+某个健?

[复制链接]
发表于 2003-6-4 10:15:47 | 显示全部楼层 |阅读模式
比如得到一个输入可以判断是alt+f这样的?
发表于 2003-6-4 11:00:06 | 显示全部楼层
我现在是这样:
  1. while((ch = getch()) != KEY_F(1)){
  2.   if(ch == 27){
  3.     ch = getch();
  4.     if(isprint(ch)){
  5.       sprintf(s, "ch is "Alt+%c"", ch);
  6.       printw(s);
  7.     }
  8.   }
  9. }
复制代码
不知道有没有更好的方法。
发表于 2003-6-4 11:21:18 | 显示全部楼层
另,Alt和Esc是一样的,都是27(或033),不过还是有一点区别,按键的时候必须按住Alt键,同时按其他键比如‘c’,才会产生Alt+c,而Esc键可以先按一下,再按‘c’键,这是在noecho的情况下,在echo的情况下,如果一段时间没有按其他键它就返回27,有点象halfdelay,我还没搞懂是怎么回事。
 楼主| 发表于 2003-6-4 12:07:38 | 显示全部楼层
可我把27给esc用了...而且我的方式就是按下了esc后切换模式
后面的字符就是简单输入了 这样的话没有办法区分这两种情况阿
哪能不能再说一下ctrl怎么得到呢
发表于 2003-6-4 21:03:02 | 显示全部楼层
我搜索了一下,发现编写菜单大都是用方向鍵来选择。可以给你一个例子。
http://www.fanqiang.com/a4/b2/20011111/0810001556.html
如果要得到特殊键的扫描码,可以用这个方法:
http://www.fanqiang.com/a4/b2/20010620/070000597.html
发表于 2003-6-5 02:41:54 | 显示全部楼层
其他的键你可以看一下curses.h里KEY_打头的宏,
Ctrl+a等于1,Ctrl+b等于2,依次类推
发表于 2003-6-5 08:28:46 | 显示全部楼层
如果不使用curses
那么使用原始模式(raw方式)也应该可以得到所有键的键值
行缓冲模式的话会自己把一些字符转义了或是屏蔽了
 楼主| 发表于 2003-6-5 09:16:39 | 显示全部楼层

还是不太明白

curse.h里面的健值定义从0401开始 没有哪个是表明ctrl的阿?
用ioctrl和read的话应该可以 就是不明白在curses里面居然会没有特殊健的处理功能?
发表于 2003-6-5 16:20:29 | 显示全部楼层
因为linux的习惯和dos与windows不一样。
发表于 2003-6-5 21:50:33 | 显示全部楼层
UNIX下Ctrl+?是控制键,你找一本UNIX的书,上面有ASCII码表的看看,Ctrl+a = 1、Ctrl+b = 2……,你可以在命令行下试试,
Ctrl+h:8:退格
Ctrl+i:9:制表,命令补全
Ctrl+j:10:换行,输入命令
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表