存档

‘我的作品’ 分类的存档

TabIMSwitch 1.1.0.32

2007年9月4日 1 条评论

一边骂微软的输入法标准,一边还要继续完成我一直想做的几个feature,其中之一就是能够更加细致的控制输入法的状态,类似半角/全角的东西。

因为上文所说的原因,所以最后用了IMM,虽然功能不够多,而且不保证能够完全的控制微软拼音和日文Natural IME,但是基本上够用了。

接下来打算研究一下TSF,似乎有点意思。

标签:

标准太多是复杂的根源

2007年8月31日 没有评论

有感于微软的文字输入法的标准:

Windows 95/98/NT4: Advanced Input Method Manager
Windows 95-XP: IMM
Windows XP以上: Text Services Framework

Windows 2000兼容Windows 98的IMM架构,也有有限的TSF支持。
Windows XP下面默认使用的是TSF,IMM仍然可用,但是功能有限。

Vista下面?不知道,也许和XP差不多。

而且,TSF基于COM,如果我要用了这个模型的话,这可真是个大杂烩了。

也许搞定了之后,我可以有机会弄清楚当XPCOM和COM并存,程序会变成什么样子。

困惑

标签:

被微软的输入法打败了

2007年8月22日 1 条评论

在做TabIMSwitch的新版本的时候,彻底被微软的输入法体系搞郁闷了。

我现在有两个可用的Windows XP系统,一个是我的笔记本,XP Pro 中文版,一个是公司的机器,XP Pro英文版,两台机器都单独装了微软拼音2003(公司因为Office是英文,默认不带微软拼音;笔记本因为不愿用盗版,所以只装了Viewer,也要单独装微软拼音)。本来这个应该非常常见的情况,可是在测试TabIMSwitch的时候被彻底的搞郁闷了。

这个新版本的目的主要是为了解决smth上面有网友提出说不希望自动添加英文Locale。之前我做了一个TabIMSwitch 1.1.0.1的内部版本,这个在我的中文系统上面工作的很好。但是网友回复说仍然不能工作,后来调查之后发现可能是因为英文系统的缘故。然后果然在公司的英文XP上面重现了出来。从目前的情况来看,可能的结果就是在英文XP系统上面带有的微软拼音2003都无法支持,如果不想自动添加英文Locale的话。

造成这个问题的原因很有意思,说起来应该从TabIMSwitch的工作方式开始。

TabIMSwitch的工作机理很简单:TabIMSwitch由两个主要的部分,一个是前端的content\firefoxOverlay.xul及其带有的一批js文件,另一个就是用C++写成的XPCOM组件,位于src\tabimswitch目录下面。两者之间通过Firefox的XPConnect机制联系。XPCOM最初做的很简单,只是封装了一下Windows的KeyboardLayout的系列函数。当Firefox启动之后,会自动加载XPCOM组件和前端的xul文件,并且在xul当中进行必要的消息的hook。当TabIMSwitch发现当前的标签页发生了变化的时候,就会获取到Firefox当前的输入法状态,并将其存入到一个列表当中,然后从这个列表当中获取即将切换到的标签页的输入法(以前保存下来的),并且将其设置成Firefox的当前输入法。

问题在于,微软关于输入法的说明非常的零散,不过基本上围绕在Keyboard Layout和IME两节当中。根据文档的描述,微软拼音输入法和“中文-美式键盘”之间的区别就在于它们是不同的Keyboard Layout。因此,只要存下来这个Keyboard Layout就OK了。TabIMSwitch 1.0.*系列也是这么实现的。

但是就是这种简单的实现在英文版XP+微软拼音输入法上面不工作,经过跟踪之后发现,原因竟然在于,在这种环境下面微软拼音和“中文-美式键盘”之间是完全相同的:无论通过GetKeyboardLayout函数还是GetKeyboardLayoutName函数,得到的都是相同的Keyboard Layout。当时在1.0.*系列当中为了解决这个问题,就自动Load了一个04090409的Keyboard Layout,也就是“英文-美式键盘”,来避免和微软拼音的冲突。所以就有了前面网友提出的那个问题。

后来考虑是不是可以通过IME接口来对输入法进行更加细致的控制,结果非常无奈:似乎对于IME接口来说,微软拼音和“中文-美式键盘”也是相同的。我找到了微软MSDN当中提供的一个sample,揭示了IME接口的使用方式。但是就使这个示例程序,在我的英文XP下面也歇菜了。

目前只能说:完全被微软自己的两个东西搞疯掉了。

标签:

TabIMSwitch的一个里程碑

2007年8月11日 3 条评论

TabIMSwitch被收录在addons.mozine.cn上面了。

http://addons.mozine.cn/firefox/610/

昨天被管理员添加进去的,今天已经有了73下载量,和之前在googlecode上面的累积量差不多。

hoho

标签:

TabIMSwitch接下来的工作

2007年7月28日 4 条评论

接下来对于TabIMSwitch还有一些东西需要实现,一些是现在不具有的功能,一些是现在已知的一些问题。

  • 计划当中占有很重要的比重的一个特性还没有实现:当焦点转换到地址栏的时候,无论当前的输入法是什么,都需要转换成英文输入法。
  • 目前缺少必要的垃圾回收机制,可能会有轻微的内存泄露(多少呢?大概打开一个tab页十几个字节),需要加上。
  • 需要申请一个合适的地方做更新。(XPI可以有一个“更新URL”的选项,目前指到了一个不存在的地方)。
  • 我很懒,所以希望可以根据URL的pattern(正则表达式或者通配符)来自动启用或者禁用输入法。(这个可能要些功夫实现)。

大体上能够想得到的就这么多。还有就是找一个托管的地方把代码放上去,正在考虑sourceforge还是google code……

update:
最后选定使用Google Code,原因之一是有人说Google Code起步比较容易,不像sourceforge需要填一大堆的表格;原因之二是对于Google的好感微笑

TabIMSwitch将使用BSD Lisence发布,不使用GPL的原因可以写一篇很长的blog,这里地方太小,写不下。
项目主页:http://tabimswitch.googlecode.com

Firefox自动切换输入法的插件 TabIMSwitch 1.0开始Alpha

2007年7月28日 2 条评论

我期望当中的小东西终于可以工作了,因为目前只在我的XP SP2+FF2.0上面测试通过,而且我的两个FF版本一个干净的什么都没有,一个插件成堆,不敢保证兼容性,先暂时带着一个Alpha好了。用Firefox并且在Windows下面的朋友们帮我测试一下。

如果你已经在使用Firefox了,可以点击安装插件。安装并重启Firefox之后,在地址栏输入
chrome://tabimswitch/content/testing.xul
然后回车,会看到一个很简单的页面,这个页面是用来检测后台的模块是否正确的注册给了Firefox。点击上面的“Show current”,如果弹出来这样一个窗口,那么表明这个东西基本可以workHTML了,如果你碰巧和我一样在用微软拼音,点点另外两个试试看好了。

插件能够正确工作的图片

接下来你需要做的,就是尽情的在各个标签页之间切换,然后感受一下不同的标签页能够具有不同的输入法的好处吧。眨眼

如果遇到什么bug,或者有什么新的建议,在这里留言,或者发信到下面两个邮箱:
zhangc AT ustc.edu
ftofficer.zhangc AT gmail.com
垃圾邮件很多,所以标题要容易理解一点……

OK,这也算是我曾经写过的帖子的后续吧。

标签: