分享
 
 
 

Linux程式设计入门 - termios/keymap/terminal program

王朝system·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

termios

inttcgetattr(intfd,structtermios*termios_p);

inttcsetattr(intfd,intoptional_actions,conststructtermios

*termios_p);

keymap

我写了一个小程式来专门处理Linux上的keymap,keymap.h及keymap.c。在LinuxTerminal上,如果您想要设定某些按键返回特定值,您会需要用到以下这些技巧。

设定keymap

#include<linux/kd.h>

#include<linux/keyboard.h>

voidsetkeymap(void)

{

structkbentryKEYMAP;

KEYMAP.kb_table=STATE;

KEYMAP.kb_index=SCANCODE;

KEYMAP.kb_value=VALUE;

ioctl(console,KDSKBENT,&KEYMAP);

}

STATE为状态键组合

/usr/include/linux/keyboard.h中

#defineKG_SHIFT0

#defineKG_CTRL2

#defineKG_ALT3

#defineKG_ALTGR1

#defineKG_SHIFTL4

#defineKG_SHIFTR5

#defineKG_CTRLL6

#defineKG_CTRLR7

#defineKG_CAPSSHIFT8

使用方式如:

#defineKST_CTRL(1<<KG_CTRL)

#defineKST_ALT(1<<KG_ALT)

#defineKST_SHIFT(1<<KG_SHIFT)

#defineKST_CTRL_ALT(KST_CTRL|KST_ALT)

#defineKST_ALT_SHIFT(KST_ALT|KST_SHIFT)

SCANCODE为键盘扫描码

#defineSCAN_ESC0x01

#defineSCAN_10x02

#defineSCAN_20x03

#defineSCAN_30x04

#defineSCAN_40x05

#defineSCAN_50x06

#defineSCAN_60x07

#defineSCAN_70x08

#defineSCAN_80x09

#defineSCAN_90x0A

#defineSCAN_00x0B

#defineSCAN_MINUS0x0C

#defineSCAN_PLUS0x0D

#defineSCAN_BACK0x0E

#defineSCAN_TAB0x0F

#defineSCAN_Q0x10

#defineSCAN_W0x11

#defineSCAN_E0x12

#defineSCAN_R0x13

#defineSCAN_T0x14

#defineSCAN_Y0x15

#defineSCAN_U0x16

#defineSCAN_I0x17

#defineSCAN_O0x18

#defineSCAN_P0x19

#defineSCAN_LTQUOTE0x1A

#defineSCAN_RTQUOTE0x1B

#defineSCAN_ENTER0x1C

#defineSCAN_CTRL0x1D

#defineSCAN_A0x1E

#defineSCAN_S0x1F

#defineSCAN_D0x20

#defineSCAN_F0x21

#defineSCAN_G0x22

#defineSCAN_H0x23

#defineSCAN_J0x24

#defineSCAN_K0x25

#defineSCAN_L0x26

#defineSCAN_SPLIT0x27

#defineSCAN_QUOTE0x28

#defineSCAN_MARK0x29

#defineSCAN_LSHIFT0x2A

#defineSCAN_STAND0x2B

#defineSCAN_Z0x2C

#defineSCAN_X0x2D

#defineSCAN_C0x2E

#defineSCAN_V0x2F

#defineSCAN_B0x30

#defineSCAN_N0x31

#defineSCAN_M0x32

#defineSCAN_LSQUOTE0x33

#defineSCAN_RSQUOTE0x34

#defineSCAN_QUESTION0x35

#defineSCAN_RSHIFT0x36

#defineSCAN_PRTSCR0x37

#defineSCAN_ALT0x38

#defineSCAN_SPACE0x39

#defineSCAN_CAPSLOCK0x3A

#defineSCAN_F10x3B

#defineSCAN_F20x3C

#defineSCAN_F30x3D

#defineSCAN_F40x3E

#defineSCAN_F50x3F

#defineSCAN_F60x40

#defineSCAN_F70x41

#defineSCAN_F80x42

#defineSCAN_F90x43

#defineSCAN_F100x44

#defineSCAN_NUMLOCK0x45

#defineSCAN_HOME0x47

#defineSCAN_UP0x48

#defineSCAN_PGUP0x49

#defineSCAN_LEFT0x4B

#defineSCAN_RIGHT0x4D

#defineSCAN_END0x4F

#defineSCAN_DOWN0x50

#defineSCAN_PGDN0x51

#defineSCAN_INSERT0x52

#defineSCAN_DELETE0x53

#defineSCAN_F110x85

#defineSCAN_F120x86

/usr/include/linux/kd.h中

structkbentry{

unsignedcharkb_table;

unsignedcharkb_index;

unsignedshortkb_value;

};

#defineKDGKBENT0x4B46/*getsoneentryintranslation

table*/

#defineKDSKBENT0x4B47/*setsoneentryintranslation

table*/

而console为

console=open("/dev/console",O_RDWR);

读取按键

read(console,&c,sizeof(char));

terminalprogramming

term.h/term.c是我写来专门处理一些小型的互动界面程式。

Terminal指令集

设定颜色:\033〔colorm

其中color可以是以下的值

0:ResetColorAttributes

1:boldon

2:boldoff

4:underlineon

5:blinkon

7:reverseon

21/22:boldnormal

24:underlineoff

25:blinkoff

27:reverseoff

30:前景,黑色

31:前景,红色

32:前景,绿色

33:前景,黄色

34:前景,篮色

35:前景,紫色

36:前景,青色

37:前景,白色

40:背景,黑色

41:背景,红色

42:背景,绿色

43:背景,黄色

44:背景,篮色

45:背景,紫色

46:背景,青色

47:背景,白色

清除萤幕:\033c

设定水平游标位置:\033〔XG

X为水平游标位置。

设定垂直游标位置:\033〔Xd

Y为垂直游标位置。

\033〔YA

Current_Cursor_Y-=Y

\033〔YB或\033〔Ye

Current_Cursor_Y+=Y

\033〔XC或\033〔Xa

Current_Cursor_X+=X

\033〔XD

Current_Cursor_X-=X

\033〔YE

gotoxy(0,Current_Cursor_Y+Y)

\033〔YF

gotoxy(0,Current_Cursor_Y-Y)

\033〔Y;XH

gotoxy(X,Y);

\033〔0K:删除从游标到该行结尾

\033〔1K:删除从该行开始到游标处

\033〔2K:删除整行

\033〔0J:删除游标到萤幕结尾

\033〔1J:删除从萤幕开始到游标处

\033〔2J:删除整个萤幕

\033〔N@:insertNchar

\033〔P:deletechar

\033〔M:deleteline

\033〔L:insertline

\033〔s:savecursorposition

\033〔u:restorecursorposition

\033E:carry;linefeed

\033M:Current_Cursor_Y-1

\033D:linefeed

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有