西西河

主题:【原创】【囧斋随笔】关于输入法 -- 范含

共:💬32 🌺47
全看分页树展 · 主题 跟帖
家园 【囧斋随笔】20080415,关于输入法(七)

周末偶尔上微软中文主页,发现“近期发布”中有两条:

1,微软拼音输入法2007词库创建安装工具包:微软推出的微软拼音输入法2007词库创建安装工具包(V1.0),将大大提高您中文输入和文档编辑的工作效率。

2,微软拼音输入法2007词库升级服务:微软拼音输入法 2007 词库升级服务提供了一个安装向导程序,您只需逐步按照安装向导的提示即可轻松完成整个安装过程。

日期是2008年三月份,看来微软拼音2007也要有所动作了?

下载,安装,发现:一个是命令行工具,允许用户建立词库并安装;另一个则是词库升级服务,据说提供了许多“网络流行”词汇。

竞争对手呢?

四月11日,搜狗拼音发布3.3的预览版。由于一直没有使用,不太清楚两个次版本升级都改变了哪些内容。不过看官方论坛中的痕迹,似乎3.2会不打招呼的删掉谷歌拼音?官方声明中也承认这是个“Bug”,看来并非谣言。自然是立刻打消了试用的念头。

软件做得不好还有弥补余地,但一次流氓行为就会彻底赶走用户,挽回的机会几乎没有。

另一方面,谷歌拼音还是几个月没动静。现在用的版本还是1.1.27.51,看来谷歌的朋友也不算勤快。

当然,咱老汉也很不勤快,也是很久没更新了。

上回书说到,万事俱备只欠波折号,正打算找个地方塞下呢。

比起美式英语键盘,日版多了一个符号,也多了一个键,自然空出来一个位置——大键盘数字0的上档位。咱就打算把下划线安排在这里,对于旧布局没有任何影响,皆大欢喜。

开始的时候不愿意兴师动众,并且琢磨着同样盼望“自定义键盘”的朋友肯定不少,试图尽量用最小改动的方式解决。最后的结果就是找到了Microsoft Keyboard Layout Creator,微软提供的免费(当然免责)工具。

无论微软提供的键盘驱动多丰富,总有照顾不到的地方,总有满足不了的用户。允许用户自力更生,正是开源运动发起的最初动机之一。(后面会提到Linux下对于键盘和输入法的处理)但微软肯定不会把这个部分彻底放手,于是就发布了这个“键盘布局生成器”。

大致看了一下搜索结果,几乎都是欧美那些“字母佬”们打补丁用,比如说加一个欧元符号之类。但国内用这个东西的也不少,多半是用来生成少数民族文字键盘布局。还有不少人拿来定义一些常用符号,比如Ctrl+Shift+数字键输入圆圈数字,并且还经常抱怨与输入法热键冲突【^^】。看这个架势,估计即便是普通国人对于频繁使用“字符映射表”也已经有想法了。这是好事,穷则变,变则通,通则久。

这个东西使用上倒是简单,可以新建一个布局,也可以装载既存布局后修改。然后定义每个键的符号,各种控制键状态也要考虑,最起码也要处理Shift状态,指定上档符号。然后编译……剩下的看帮助吧。

当时家里的中文机器用的还是美式布局的IBM工包KB-8820键盘,村里淘的。先在美式布局基础上改了几次,都没有问题;但是装载日语布局之后就不行了,编译死活不成功,总是说什么定义了两次或者没定义。哪怕根本不改,原封不动的直接编译也通不过。开始以为是系统代码页什么的冲突,就换了日语系统的笔记本上试验,仍然不行;后来以为笔记本用的是通过Fn键切换的特殊键盘,就又找了日语系统的台式机试验,还是不行。

当此时,才能深刻的领悟到即便是微软,免费/免责软件的质量也不敢恭维,估计在发布前顶多也就抓几个字母佬测试了几种西欧键盘就算齐活。这时候咱才开始注意这个“键盘布局生成器”软件本身,而不是以力争短期内上手完工为目标。可以说,一年多以来很罕见的从用户模式切换回程序员模式了。

除了前台那个界面之外,只剩下了一堆头文件,几个库,还有以“CL.exe”为首的几个微软编译用程序。这根本就是把生成键盘驱动必须的那些文件抽出来而已。早知道到头来还是要改键盘驱动,何必非得用这东西?反正手头VC和DDK都是现成的,咱自己干。

DDK里面可是有不少好东西,许多代码都是“产品质量”,也就是“Live”——机器上正在跑的某个驱动的源代码。键盘布局的源码有三种,共五个:最普通的美式英语(kbdus)、演示死键的法国法语(kbdfr)和德国德语(kbdgr)、以及日文101和106键盘。

又不是头一次搞,咱轻车熟路。

1, 把目录“106”复制一份,改名“fhn”。

2, 把见得到的“kbd106”都改成“kbdfhn”,包括文件名和文件内容。

3, 在资源文件里面,把描述改为“Japanese Keyboard Layout for fANhAN”,版权声明改作“1978-2007”“Copyright (c) fANhAN inside. All rights reserved.”。下面还包含了一个“common.ver”,里面一堆“microsoft”。有兴趣发布的就全改掉,要是仅仅自己用就算了吧。现在得到了一个唤作fanhan版的日语106布局,除了名字之外都一样。

4, 从开始菜单的构建环境快捷方式进入,在命令行窗口中切换至代码目录。先“make”,等刷屏结束,再“build”,等刷屏结束。

5, 搞定,相应配置的目录下有成品“kbdfhn.dll”。

虽然可能是废话,但还是想啰嗦两句:

首先,请选择操作系统相应的DDK版本,XP/2003/Vista可是各不相同。因为咱决定开工收拾键盘的时候,改名为WDK的Vista用DDK还是在RC版阶段。是否愿意使用各种预览版,是“技術”部门和“開発”部门的本质区别之一。

其次,DDK安装目录不能带空格,文件编码也必须保持为ANSI。由于处理多种编码的需要,咱用的文本工具诸如“EditPlus”等都把默认保存格式设定为UTF-8,并且还带BOM文件头。不注意的情况就会被编译器提醒。

输入法和键盘布局中绑定的是“kbdjpn.dll”,而这个写明为“stub”的库就是根据硬件信息决定采用101、106,或是其他布局。而安装Windows时选择键盘的那一步,就是用来写入这个硬件信息的。

接下来可以看源代码了,咱已经可以相信任何合理的修改都能编译通过且正常投入使用。并且,这个小任务哪怕是对于外行来说也很轻松。快速扫一遍代码就能发现,一个“aVkToWch4[]”的结构数组常量被一个排版良好的大表格赋值。其中第一行就是“0”,并且对应着“SHIFT”状态下,写着“WCH_NONE”——仿照周边把它改成单引号包围的下划线就好了嘛!

然后就简单了:make、build、复制dll到系统目录、改注册表谷歌拼音的布局文件为kbdfhn.dll、重新启动计算机。

打开记事本,按“Shift+0”,优美的下划线;切换至谷歌拼音,按“Shift+0”,久违的波折号——口可口可口可口黑口黑口黑!

完成任务之后,这才开始注意代码的其它部分以及其他代码——干活时是否容易被其他课题所勾引,也是“技術”部门和“開発”部门的本质区别之一。


本帖一共被 1 帖 引用 (帖内工具实现)
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河