6 CGDB键盘用户接口

CGDB通过键盘用户接口从用户那里获取输入。我们通常称键盘用户接口为KUI。CGDB仅需要向KUI获取KUI提供的下一个用户输入的指令。

除了读取用户输入以及提供这些输入给CGDB以外,KUI还有两个主要的责任:它需要检测用户输入自定义的键盘映射与用户按下的特殊键。

用户定义的映射,或是简单映射,是用来改变输入的按键的含义。一些用户可能会称将这种功能称之为 。例如:map a b。当用户输入了\字符,则KUI将会检测到并且替换为\然后将\返回给CGDB。

当用户输入了键盘上的特殊字符时,一个键码会被发往CGDB。例如HOME、DEL、\等等。当这样的键被按下时,操作系统将会发送几个字符给应用程序,而不是像普通的按键一样仅发送一个字符。这些连结的字符被称之为一个按键序列。KUI则负责将这些按键序列进行组合,并且向CGDB报告:有一个特别的按键被用户按下。ESC键是比较特殊的,因为大多数的键码都以它为开始。它通常给出了所有的按键序列的通常的头部。KUI使用了terminfo数据库去判断按键序列是由什么键码产生的。有少部分常用的按键序列被硬编码进CGDB中。

KUI主要的挑战是如何判断何时一个映射或者按键序列被输入完成。KUI有时需要读入不止一个字符去确定映射或者按键序列被输入完成。例如,用户设置了两个映射,map abc defmap abd def,KUI需要在它能判断用户是否要输入一个映射之前缓存\与\两个字符。当下一个键被按下时,如果用户输入\或是\则KUI收到一个映射,然后将d e f返回给CGDB。否则,没有映射被接收到,KUI将会把a b返回给CGDB。

选项 timeoutttimeouttimeoutlen 以及 ttimeoutlen 可以被用来告诉KUI是否需要在映射或是按键序列的中间保持超时,以及如果需要的话,需要保持多久。