现在利用普通西文键盘输入汉字的做法已很常见,就是通过汉字编码来输入汉字。通常只用26个英文字母,也有只用或加用数字的。大凡编码可使用的字母数字总数如较少,则每个汉字的平均击键次数就较多。为了减少击键次数,现在多使用不等长码,即给常用的字指定较短的代码,而对不常用的字则给较长的代码。为了要求不等长的汉字代码在上下文中能够正确的断开,在每个码字之后的间隔往往成为必需。这在实际上又增加了击键次数。有人曾对英文打字员的操作过程进行科学的实测和分析,发现在英文打字时,从间隔键到其他字符键或从其他字符到间隔的平均时间,比其他字符键相互间的时间还略长。因此,在汉字输入中,使用空格键过多,并非无害。(实际汉字行文在字与字之间本无空格)。 有人曾企图用换档(SHIFT)的办法,即同时使用大、小写字母作为不同的字符来增加可用的字母数字数,以缩短汉字编码地平均长度。例如机械部自动化所扶良文曾提出用BA,bA,ba,Ba这样的大小写组合来区分四声,但因发现使用SHIFT在操作上很不方便而作罢。原来,按照传统的打字指法:必需用小指去按下SHIFT键;而且必需双手同时使用(即字母数字键如用右手,SHIFT键就需用左手,或相反);而且必需SHIFT键在字母数字键之前先按下,否则就必定错成非SHIFT的字母数字。所以,几乎所有想同时利用大、小写字母的汉字输入法都没有得到推广。
前面已经说了,在输入汉字时最好少用间隔(空格)。如果做到这一点,则按传统的打字指法,大姆指就空闲了。为了充分发挥各个手指的作用,能否把空格键改作SHIFT键?这就是本发明的由来。
把空格键完全改成SHIFT键是不行的,因为有时还是需要输入空格的(例如在输入英文时),而且要照顾许多人原来都熟知空格键的习惯。同样由于习惯,传统的SHIFT键也不宜取消。但可以让空格键多“兼”一个“职”:-当单独按空格键时,它仍产生空格,这和传统键盘上一样;但当空格键与其他字母数字键同时按下时,它就起了SHIFT的作用。这样的换档(SHIFT),将被称为中式换档(Chinese Shift)。
传统的SHIFT键必需要比字母数字键先按下,而中式换档却可先后不拘。新的换档操作法将是这样的:不论对键盘的左方或右方的字母数字进行换档,都应该用相应左方或右方同一手的姆指同时按下空格键,即用单手两指操作。姆指与其他指同时按下,只作为原则要求,实际稍有先后,或孰先孰后,都不影响正确的换档效果。这样的操作法与使用传统的SHIFT键相比,当然要方便得多。因此,如果外国人也认为这种换档法比较方便,想使用具有这种功能的键盘来输入他们自己的文字,当然也可以。(在本人研制成的产品上是这样设计的:凡处汉字状态,必定可以使用中式换档,传统SHIFT键也可以用;但处于英文状态时,中式换档是否起作用,将由使用人自行选定。)
然而,名为中式换档,除表明它是中国人的发明外,还表明它特别有利于中文的输入:(1)扩大了汉字输入码的可用字符数,使汉字编码的研究人会有可能设计出更为高效的输入码。(2)对于国内已经流行的汉字输入码(如“声韵部形码”、“五笔字形码”等等),都有了可能去省掉原先每个码字之后必需的间隔,办法就是对每个码字的第一字母(或末尾字母)进入换档输入。这将提高人工输入的速度,而且当有必要记录、存贮输入码时,也可节省存贮空间。
中式换档在具体产品上的实现是不难的。在一般的电子键盘里,对字母数字键和空格键等进行着不断的扫描。(对SHIFT键不扫描,只当对字符键扫描到有键按下时,才检测SHIFT键是否按下。这就是为什么SHIFT键必需比字符键先按下的原因。)用常规的扫描方法,本可扫描出是否有两个键或更多的键被同时按下。这就是说,沿用常规扫描法也能通过微处理器检查确认空格键是否与其他字符键同时被按下。这里所谓同时,是指空格键与其他键都已按下之后。实际上,两个键决不可能在同一瞬间按下,总有先有后,(即使同一瞬间按下,扫描哪个键也有先后)。为做到不管哪个键先按下都产生正确的换档效果,有以下两个方法可供采用:
(1)适当延迟发出字符代码的时间。就是每当经过去颤(debounce)处理首次证实有一个非空格的字符键按下时,键盘并不马上发出相应的代码,而需稍等一小段时间(大约0.25秒)。如果击键速度很高,不到这个时间即已起键(结束按键),当在起键时立即发出原字符代码。如果按键时间稍长,到达这个时间而未证实有其他键按下,就也同样发出原字符代码,并且在0.5秒以后开始连发。如在预定时间内发现有其他键按下,则:(a)如果后一键是空格键,则认为是换档,立即发出经换档的字符代码;(b)如果不是空格键则立即发出前一键的代码,而对后一键重新开始计时。如果第一次证实的正是空格键,则也同样稍等,如发现起键或在预定时间内无其他键按下,则照发空格代码,否则发出换档的字符代码。
(2)补发退格符(Backspace)。不管何时,只要证实有一键(不管什么键)已按下时,就立即发出该键代码,而且每当计时超过0.5秒时就开始连发。如在尚未开始连发之前发现有第二键同时按下,则:(a)如果前后两键都不是空格,则立即发出第二键的代码,并重新开始计时;(b)如果前后两键中有一个是空格,则先补发一个退格,再发另一非空格键的换档代码。