看的不是很明白,
自己做了一个测试,用SecureCRT连接 Ubuntu服务器。输入命令showkey -a ,可以检测接收到的按键值
Press any keys - Ctrl-D will terminate this program
^[ 27 0033 0x1b
^Q 17 0021 0x11
^W 23 0027 0x17
^E 5 0005 0x05
^R 18 0022 0x12
^T 20 0024 0x14
^Y 25 0031 0x19
^U 21 0025 0x15
9 0011 0x09
^O 15 0017 0x0f
^P 16 0020 0x10
^[ 27 0033 0x1b
^] 29 0035 0x1d
^\ 28 0034 0x1c
^A 1 0001 0x01
^S 19 0023 0x13
^F 6 0006 0x06
^G 7 0007 0x07
^H 8 0010 0x08
^J 10 0012 0x0a
^K 11 0013 0x0b
^L 12 0014 0x0c
^J 10 0012 0x0a
^Z 26 0032 0x1a
^X 24 0030 0x18
^C 3 0003 0x03
^V 22 0026 0x16
^B 2 0002 0x02
^N 14 0016 0x0e
^M 13 0015 0x0d
^_ 31 0037 0x1f
按下的按键顺序是
Esc,C-q,C-w,C-e,(后面都是有C-,为了方便,把C-省略掉),r,t,y,u,i,o,p,[,[,],,
a,s,(因为C-d会退出,这里没有按),f,g,h,j,k,l,(;和’没有相应),Enter
z,x,c,v,b,n,m,(,和.也没有响应),/
====================================
可以得出几点
- 按下Ctrl+Key,实际发的是 ^Key,但不是所有的都是这样发的。
- 按下Ctrl+i , 实际发的键值为0x09,这个对应的是 水平制表符。
- 按下Ctrl+; , Ctrl + ’ , Ctrl + , , Ctrl + . ,都是没有响应的
- Esc按键实际发的键值是,0x1b,而实际按Ctrl + [ ,也是发送该键值
- 按下 Enter,发的键值是 0x0d,对应的是 ^M,和按下Ctrl + m 发的键值一样
而按下 Ctrl + Enter ,发的键值是 0x0a,对应的是 ^J,和按下Ctrl + j 发的键值是一样的。
下图是Ascii码值
下面是 git bash连接 Ubuntu服务器。输入命令showkey -a ,可以检测接收到的按键值 ,
Press any keys - Ctrl-D will terminate this program
^[ 27 0033 0x1b
^Q 17 0021 0x11
^W 23 0027 0x17
^E 5 0005 0x05
^R 18 0022 0x12
^T 20 0024 0x14
^Y 25 0031 0x19
^U 21 0025 0x15
9 0011 0x09
^O 15 0017 0x0f
^P 16 0020 0x10
^[ 27 0033 0x1b
^] 29 0035 0x1d
^\ 28 0034 0x1c
^A 1 0001 0x01
^S 19 0023 0x13
^F 6 0006 0x06
^G 7 0007 0x07
^H 8 0010 0x08
^J 10 0012 0x0a
^K 11 0013 0x0b
^L 12 0014 0x0c
^M 13 0015 0x0d
^Z 26 0032 0x1a
^X 24 0030 0x18
^C 3 0003 0x03
^V 22 0026 0x16
^B 2 0002 0x02
^N 14 0016 0x0e
^M 13 0015 0x0d
^[[1;5l 27 0033 0x1b
91 0133 0x5b
49 0061 0x31
59 0073 0x3b
53 0065 0x35
108 0154 0x6c
^[[1;5n 27 0033 0x1b
91 0133 0x5b
49 0061 0x31
59 0073 0x3b
53 0065 0x35
110 0156 0x6e
^_ 31 0037 0x1f
按键顺序和上面是一样的。
Esc,C-q,C-w,C-e,(后面都是有C-,为了方便,把C-省略掉),r,t,y,u,i,o,p,[,[,],,
a,s,(因为C-d会退出,这里没有按),f,g,h,j,k,l,(;和’没有相应),Enter
z,x,c,v,b,n,m,(,和.这里有响应),/
====================================
可以得出几点
- 按下Ctrl+; , Ctrl + ’ , 都是没有响应的 ,和上面的结果一致。但是实际用git bash 连接服务器,emacs里面的C+; 是有功能的。
- Ctrl + , , Ctrl + . 是有响应的,但是在上面的测试是没有响应的。
Ctrl + , 发的是**(^[[1;5l)** ,对应的键值 0x1b,0x5b,0x31,0x3b,0x35,0x6c ,查找AscII表可以得知对应的按键分别为 (Esc),([),(1),(;),(5),(l)
Ctrl + . 发的是**(^[[1;5n)**,对应的键值 0x1b,0x5b,0x31,0x3b,0x35,0x6e ,查找AscII表可以得知对应的按键分别为 (Esc),([),(1),(;),(5),(n)
综上所述,可以得出结论
- git bash 可以发送 C-; ,但是不能被showkey识别,可以被emacs识别
- SecureCRT,不确定是否可以发送 C-; ,因为不能被showkey识别,也不能被 emacs识别。
-
可能原因1,SecureCRT 不能发送 C-;,被SecureCRT拦截了。(没有证据是这方面原因)
-
可能原因2,SecureCRT 能发送 C-; ,Emacs本身配置原因无法识别。(感觉这个站不住脚,因为同样的服务器,同一个emacs,用git bash连接就可以识别到C-;)
-
疑问1,为什么showkey无法识别C-;
-
疑问2,假如是SecureCRT的原因,尝试了很多种方式,都不知道怎么配置。SecureCRT本身具有按键映射的功能,但是不知道要把C-;映射成什么键。
-
疑问3,假如是emacs配置的原因,为什么用不同的方式连接,结果不一样呢。