<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Rest Valley &#187; ibus-sogoupycc</title> <atom:link href="http://lihdd.net/tag/ibus-sogoupycc/feed/" rel="self" type="application/rss+xml" /><link>http://lihdd.net</link> <description>The scratchpad of quark</description> <lastBuildDate>Sat, 09 Oct 2010 13:56:19 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>关于 ibus-sogoupycc 的扩展</title><link>http://lihdd.net/ibus-sogoupycc-extensions/</link> <comments>http://lihdd.net/ibus-sogoupycc-extensions/#comments</comments> <pubDate>Thu, 18 Mar 2010 12:06:19 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Config]]></category> <category><![CDATA[Script]]></category> <category><![CDATA[extension]]></category> <category><![CDATA[ibus]]></category> <category><![CDATA[ibus-sogoupycc]]></category> <category><![CDATA[lua]]></category><guid
isPermaLink="false">http://lihdd.net/?p=340</guid> <description><![CDATA[本来想把一些示例放在项目的 wiki 页上的，但是我还想说一些其他的闲话，而且目前扩展虽然有一些实用性了，却缺乏执行保护，可以把输入法弄得不稳定，所以这些内容就放到这里好了。如果你只想看看如何使用输入法的扩展，请向下找到 表情后从那里开始看。 似乎扩展是很流行的样子，各种浏览器，foobar2000，谷歌拼音，WPS，都可以用扩展。 其中，有的软件成功了，令人爱不释手，比如像 Firefox，foobar2000。有的软件却没有因为扩展成功，比如谷歌拼音。或者说扩展没有给人带来好感，比如 IE 浏览器。 我觉得作为一个支持扩展的软件，最重要的就是扩展要比较有用，可以做一些事情，这一点上谷歌拼音做得就不好，由于扩展而变得比较成功的软件在这方面做得都比较好。其次，扩展要容易开发，再往后，出于安全的考虑，扩展的能力要受到约束。这两点 IE 相比 Firefox 就弱了一些，不过 Firefox 的扩展写起来还是挺麻烦的，比如其中的多国语言化就非常麻烦，对于不同的地方要使用不同的方法，总共有三种。而由于 Firefox 的灵活性，出现了 Mozilla Jetpack 和 GreaseMonkey 等，都可以让扩展写起来方便一些。 在很长的一段时间内，我觉得编写软件，技术含量是最重要的， 一个更好的算法可以带来更快的速度，或者更好的结果，当然用户体验就会好。但是现在看法有些改变，因为目前，很多东西不是需要从头做起的，除非出于学习、版权目的，或者是原先的项目代码烂到不能看而没法维护，没有必要重新实现别人已经实现的东西。大部分软件应该在乎实用性，在不违反版权的情况下，尽量使用已有的东西。 从一开始，我觉得 ibus-sogoupycc 这样一个输入法的技术含量肯定不如 sunpinyin，Linux 下的输入法用 sunpinyin 就不错了，一度怀疑是否要有将 ibus-sogoupycc 写下去的必要。但是现在，我觉得是有必要的，因为在中国大部分有网络的地方，这样一个输入法用起来是更舒服的，至少对我自己来说。 出于同样的实用性的考虑，我提供了输入法扩展能力。本来我想提供一个完全兼容谷歌拼音的接口，但是后来觉得谷歌拼音的扩展接口设计得并不好，和目前输入法的无需选词流畅输入有冲突，没有遵循的必要。 开头提到的这个表情在这里： ，不难找吧。 扩展的设置应该放在用户配置文件中，目前添加一个扩展的方法是： ime.register_command&#40;key, modifiers, caption, script&#41; 这里，key 和 modifiers 都是数字类型，后两者是字符串类型。 修改用户配置文件后一般要重新启动输入法才能生效，可以右击任务栏上的 ibus 图标，选择重新启动。 Hello world 下面的代码注册了一个用 Alt + H [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://lihdd.net/wp-content/uploads/2010/03/extensions.png" alt="" title="extensions" width="100" height="125" class="alignright size-full wp-image-344" />本来想把一些示例放在项目的 wiki 页上的，但是我还想说一些其他的闲话，而且目前扩展虽然有一些实用性了，却缺乏执行保护，可以把输入法弄得不稳定，所以这些内容就放到这里好了。如果你只想看看如何使用输入法的扩展，请向下找到 <img
src='http://lihdd.net/wp-includes/images/smilies/wink.png' alt='^_.' class='wp-smiley' /> 表情后从那里开始看。</p><p>似乎扩展是很流行的样子，各种浏览器，foobar2000，谷歌拼音，WPS，都可以用扩展。</p><p>其中，有的软件成功了，令人爱不释手，比如像 Firefox，foobar2000。有的软件却没有因为扩展成功，比如谷歌拼音。或者说扩展没有给人带来好感，比如 IE 浏览器。<span
id="more-340"></span></p><p>我觉得作为一个支持扩展的软件，最重要的就是扩展要比较有用，可以做一些事情，这一点上谷歌拼音做得就不好，由于扩展而变得比较成功的软件在这方面做得都比较好。其次，扩展要容易开发，再往后，出于安全的考虑，扩展的能力要受到约束。这两点 IE 相比 Firefox 就弱了一些，不过 Firefox 的扩展写起来还是挺麻烦的，比如其中的多国语言化就非常麻烦，对于不同的地方要使用不同的方法，总共有三种。而由于 Firefox 的灵活性，出现了 <a
href="https://jetpack.mozillalabs.com/">Mozilla Jetpack</a> 和 <a
href="https://addons.mozilla.org/firefox/addon/748">GreaseMonkey</a> 等，都可以让扩展写起来方便一些。</p><p>在很长的一段时间内，我觉得编写软件，技术含量是最重要的， 一个更好的算法可以带来更快的速度，或者更好的结果，当然用户体验就会好。但是现在看法有些改变，因为目前，很多东西不是需要从头做起的，除非出于学习、版权目的，或者是原先的项目代码烂到不能看而没法维护，没有必要重新实现别人已经实现的东西。大部分软件应该在乎实用性，在不违反版权的情况下，尽量使用已有的东西。</p><p>从一开始，我觉得 ibus-sogoupycc 这样一个输入法的技术含量肯定不如 <a
href="http://code.google.com/p/sunpinyin/">sunpinyin</a>，Linux 下的输入法用 sunpinyin 就不错了，一度怀疑是否要有将 ibus-sogoupycc 写下去的必要。但是现在，我觉得是有必要的，因为在中国大部分有网络的地方，这样一个输入法用起来是更舒服的，至少对我自己来说。<br
/><div
id="attachment_347" class="wp-caption aligncenter" style="width: 266px"><img
src="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc-0.2.0_demo.gif" alt="" title="ibus-sogoupycc-0.2.0_demo" width="256" height="179" class="size-full wp-image-347" /><p
class="wp-caption-text">使用信号很弱的无线网，输入起来感觉也不错</p></div></p><p>出于同样的实用性的考虑，我提供了输入法扩展能力。本来我想提供一个完全兼容谷歌拼音的接口，但是后来觉得谷歌拼音的扩展接口设计得并不好，和目前输入法的无需选词流畅输入有冲突，没有遵循的必要。</p><p><em>开头提到的这个表情在这里： <img
src='http://lihdd.net/wp-includes/images/smilies/wink.png' alt='^_.' class='wp-smiley' /> ，不难找吧。</em></p><p>扩展的设置应该放在用户配置文件中，目前添加一个扩展的方法是：</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;">ime.register_command<span style="color: #66cc66;">&#40;</span>key, modifiers, caption, script<span style="color: #66cc66;">&#41;</span></pre></div></div><p>这里，key 和 modifiers 都是数字类型，后两者是字符串类型。</p><p>修改用户配置文件后一般要重新启动输入法才能生效，可以右击任务栏上的 ibus 图标，选择重新启动。</p><p><strong>Hello world</strong><br
/> 下面的代码注册了一个用 Alt + H 可以激活的扩展，只要输入法被激活，无论处于中英文状态，都可以用这个热键运行这个扩展。</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;">ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;h&quot;</span><span style="color: #66cc66;">&#41;</span>:byte<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, key.MOD1_MASK, <span style="color: #ff0000;">&quot;hello&quot;</span>, <span style="color: #ff0000;">&quot;ime.notify('hello world')&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>重新启动 ibus 之后，按下方形的扩展按钮(ibus-1.2.0.20090927 版本下，方形按钮会消失，这是 ibus 的已知问题，此时通过热键仍然可以运行扩展)，可以看到一个标题为 hello 的菜单项，单击它，就可以运行扩展。<br
/><div
id="attachment_343" class="wp-caption aligncenter" style="width: 197px"><img
src="http://lihdd.net/wp-content/uploads/2010/03/ime_extension_menu.png" alt="" title="ime_extension_menu" width="187" height="301" class="size-full wp-image-343" /><p
class="wp-caption-text">输入法扩展菜单</p></div><br
/> 这里，第一个参数是按键，<code>("h"):byte()</code> 表示 h 的 ASCII 码，<code>"ime.notify('hello world')"</code> 是一段字符串表示的 lua 代码，它利用输入法提供的 <code>ime.notify</code> 方法显示了一些内容。</p><p><strong>插入系统时间</strong></p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;">ime.register_command<span style="color: #66cc66;">&#40;</span>key.Shift_R, <span style="color: #cc66cc;">0</span>, <span style="color: #ff0000;">&quot;插入系统时间&quot;</span>, <span style="color: #ff0000;">&quot;ime.commit(os.date())&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>这里的 <code>ime.commit</code> 也是输入法提供的方法，用来直接向客户端程序输入文字，<code>os.date</code> 是 Lua 标准库函数。这段代码注册了一个用 右Shift 激活的插入系统时间的功能。</p><p>Lua 的标准库函数在扩展中都是可以用的，比如可以用 <code>os.execute('mousepad &#038;')</code> 在后台运行一个 mousepad。</p><p><strong>执行 Lua 代码</strong></p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;">ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'L'</span><span style="color: #66cc66;">&#41;</span>:byte<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, key.SHIFT_MASK + key.MOD1_MASK ,
  <span style="color: #ff0000;">&quot;执行 Lua 代码&quot;</span>, <span style="color: #ff0000;">&quot;ime.execute('ime.notify('..ime.get_selection()..')')&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>这段代码注册了一个用 Shift + Alt + L 热键，把选中内容当做 Lua 脚本执行，并用桌面提示显示结果的扩展，这里因为有了 Shift 辅助键，所以要取大写字母 L 的 ASCII 码。其中使用方法 <code>ime.get_selection</code> 获得选定文字的内容，<code>ime.execute</code> 用来把一个字符串当做 Lua 脚本运行，双点号是字符串连接操作。</p><p>这个扩展可以比较有用，比如当选定 <code>315+23*6145</code> 这样的表达式之后，运行一下扩展就可以知道计算结果，也可以选定 <code>ime.VERSION</code> 这样的内部变量，查看其内容。甚至可以选定一段 <code>ime.register_command</code> 代码，动态添加扩展 <img
src='http://lihdd.net/wp-includes/images/smilies/happy.png' alt='(:' class='wp-smiley' /></p><p><strong>“回音”效果</strong><br
/> 不知道从什么地方开始流行这种效果，我想说明的是，声明一个函数并且在扩展中调用是可以的：</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;"><span style="color: #b1b100;">function</span> echo_effect<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #b1b100;">local</span> s <span style="color: #66cc66;">=</span> ime.get_selection<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #b1b100;">for</span> i <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>, #s, <span style="color: #cc66cc;">3</span> <span style="color: #b1b100;">do</span> ime.commit<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>i <span style="color: #66cc66;">==</span> <span style="color: #cc66cc;">1</span> <span style="color: #b1b100;">and</span> <span style="color: #ff0000;">''</span> <span style="color: #b1b100;">or</span> <span style="color: #ff0000;">'，'</span><span style="color: #66cc66;">&#41;</span>..s:sub<span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">end</span>
<span style="color: #b1b100;">end</span>
ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'E'</span><span style="color: #66cc66;">&#41;</span>:byte<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, key.SHIFT_MASK + key.CONTROL_MASK,
  <span style="color: #ff0000;">&quot;产生回音&quot;</span>, <span style="color: #ff0000;">&quot;echo_effect()&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>这里简单地使用了 3 个字节 作为步长，所以只能处理纯中文。对文字 &#8220;这是回音你懂吗&#8221; 使用这个扩展会得到：&#8221;这是回音你懂吗，是回音你懂吗，回音你懂吗，音你懂吗，你懂吗，懂吗，吗&#8221; <img
src='http://lihdd.net/wp-includes/images/smilies/sigh.png' alt=':sigh:' class='wp-smiley' /></p><p><strong>全半角切换</strong><br
/> 输入法本身没有提供全半角切换功能，但是通过扩展可以实现类似功能：</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;">ime.second_punc_map <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>
<span style="color: #b1b100;">function</span> toggle_punc_map<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	ime.second_punc_map, ime.punc_map <span style="color: #66cc66;">=</span> ime.punc_map, ime.second_punc_map
	ime.apply_settings<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	ime.notify<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'已切换到'</span> .. <span style="color: #66cc66;">&#40;</span>ime.punc_map<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'.'</span><span style="color: #66cc66;">&#93;</span> <span style="color: #b1b100;">and</span> <span style="color: #ff0000;">'全'</span> <span style="color: #b1b100;">or</span> <span style="color: #ff0000;">'半'</span><span style="color: #66cc66;">&#41;</span> ..<span style="color: #ff0000;">'角'</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #b1b100;">end</span>
ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">','</span><span style="color: #66cc66;">&#41;</span>:byte<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, key.CONTROL_MASK , <span style="color: #ff0000;">&quot;全半角切换&quot;</span>, <span style="color: #ff0000;">&quot;toggle_punc_map()&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>注册了 Ctrl + 逗号 作为切换热键，并会用桌面提示显示切换结果。</p><p><strong>全双拼切换</strong><br
/> 可以仿造上例写出：</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;">ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #ff0000;">&quot;全双拼切换&quot;</span>,
  <span style="color: #ff0000;">&quot;ime.use_double_pinyin = not ime.use_double_pinyin ime.apply_settings()&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>前面填写的两个 0 表示这个扩展没有热键，你也可以再加上一句 <code>ime.notify</code>，使得切换的时候有桌面提示。</p><p><strong>对缓存的操作</strong><br
/> 缓存是存在全局的 <code>request_cache</code> 中的，可以直接对其操作：</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;"><span style="color: #b1b100;">function</span> show_request_cache<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #b1b100;">for</span> i,v <span style="color: #b1b100;">in</span> <span style="color: #b1b100;">pairs</span><span style="color: #66cc66;">&#40;</span>request_cache<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">do</span>
		ime.commit<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&quot;'</span>..i..<span style="color: #ff0000;">'&quot; =&gt; &quot;'</span>..v..<span style="color: #ff0000;">'&quot;<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #b1b100;">end</span>
<span style="color: #b1b100;">end</span>
ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span> , <span style="color: #ff0000;">&quot;查看缓存&quot;</span>, <span style="color: #ff0000;">&quot;show_request_cache()&quot;</span><span style="color: #66cc66;">&#41;</span>
ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span> , <span style="color: #ff0000;">&quot;清空缓存&quot;</span>, <span style="color: #ff0000;">&quot;request_cache = {}&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>其中的 <code>ime.commit</code> 方法用来向客户端插入文本，还有一个方法是 <code>ime.request</code>，用来向输入法提交一个拼音请求，比如下面这段代码片段将向输入法提交《春晓》的拼音：</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;"><span style="color: #b1b100;">for</span> _, v <span style="color: #b1b100;">in</span> <span style="color: #b1b100;">pairs</span>
<span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'chun mian bu jue xiao'</span>, <span style="color: #ff0000;">'chu chu wen ti niao'</span>,
 <span style="color: #ff0000;">'ye lai feng yu sheng'</span>, <span style="color: #ff0000;">'hua luo zhi duo shao'</span><span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">do</span>
	ime.request<span style="color: #66cc66;">&#40;</span>v<span style="color: #66cc66;">&#41;</span>
	ime.commit<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #b1b100;">end</span></pre></div></div><p><strong>给自己发送飞信</strong><br
/> 输入法全局配置文件默认加载了 <code>socket.http</code> 和 <code>socket.url</code> 模块，可以用它们来访问网络。</p><p>比如，下面的代码通过 <a
href="http://api.bz/">api.bz</a> 这个在线接口把选定文字内容通过飞信发送给自己：</p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;"><span style="color: #b1b100;">function</span> send_sms<span style="color: #66cc66;">&#40;</span>content<span style="color: #66cc66;">&#41;</span>
	http.TIMEOUT <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">2</span>
	<span style="color: #b1b100;">local</span> res <span style="color: #66cc66;">=</span> http.request<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'https://sms.api.bz/fetion.php?username=15566119320&amp;password=nevermind&amp;sendto=15566119320&amp;message='</span>..url.escape<span style="color: #66cc66;">&#40;</span>content<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
	ime.notify<span style="color: #66cc66;">&#40;</span>res <span style="color: #b1b100;">or</span> <span style="color: #ff0000;">'飞信发送失败'</span>, content, <span style="color: #ff0000;">'info'</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #b1b100;">end</span>
&nbsp;
ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'m'</span><span style="color: #66cc66;">&#41;</span>:byte<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, key.CONTROL_MASK + key.MOD1_MASK, <span style="color: #ff0000;">&quot;飞信发送&quot;</span>, <span style="color: #ff0000;">&quot;send_sms(ime.get_selection())&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p>以上填写的飞信用户名和密码皆为虚构，实际用的时候需要改一下。</p><p><strong>简繁体转换和翻译</strong><br
/> 使用 Google API 来翻译文字，从简体中文翻译成繁体中文就实现了转换成繁体 <img
src='http://lihdd.net/wp-includes/images/smilies/happy.png' alt='(:' class='wp-smiley' /></p><div
class="wp_syntax"><div
class="code"><pre class="lua" style="font-family:monospace;"><span style="color: #b1b100;">function</span> google_translate<span style="color: #66cc66;">&#40;</span>text, langpair<span style="color: #66cc66;">&#41;</span>
	<span style="color: #b1b100;">local</span> url <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&amp;q='</span>..url.escape<span style="color: #66cc66;">&#40;</span>text<span style="color: #66cc66;">&#41;</span>..<span style="color: #ff0000;">'&amp;langpair='</span>..url.escape<span style="color: #66cc66;">&#40;</span>langpair<span style="color: #66cc66;">&#41;</span>
	http.TIMEOUT <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span>
	<span style="color: #b1b100;">local</span> res <span style="color: #66cc66;">=</span> http.request<span style="color: #66cc66;">&#40;</span>url<span style="color: #66cc66;">&#41;</span>
	<span style="color: #b1b100;">if</span> res <span style="color: #b1b100;">then</span> res <span style="color: #66cc66;">=</span> res:match<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&quot;translatedText&quot;:&quot;(.-)&quot;}'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">end</span>
	<span style="color: #b1b100;">return</span> <span style="color: #b1b100;">tostring</span><span style="color: #66cc66;">&#40;</span>res <span style="color: #b1b100;">or</span> text<span style="color: #66cc66;">&#41;</span>
<span style="color: #b1b100;">end</span>
&nbsp;
ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'t'</span><span style="color: #66cc66;">&#41;</span>:byte<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, key.CONTROL_MASK + key.MOD1_MASK ,
  <span style="color: #ff0000;">&quot;转换成繁体&quot;</span>, <span style="color: #ff0000;">&quot;ime.commit(google_translate(ime.get_selection(), 'zh-CN|zh-TW'))&quot;</span><span style="color: #66cc66;">&#41;</span>
ime.register_command<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'e'</span><span style="color: #66cc66;">&#41;</span>:byte<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, key.CONTROL_MASK + key.MOD1_MASK ,
  <span style="color: #ff0000;">&quot;翻译成英文&quot;</span>, <span style="color: #ff0000;">&quot;ime.commit(google_translate(ime.get_selection(), 'zh-CN|en'))&quot;</span><span style="color: #66cc66;">&#41;</span></pre></div></div><p><strong>写在最后</strong></p><p>这是一个悲剧。</p><p>Lua 作者根本不相信多线程，原因是现在的主流语言中连 <code>a = a + 1</code> 都不是原子的，谈什么多线程呢？</p><p>我曾经做过一些尝试，确实让程序多线程地执行 Lua 代码，又共享一些全局数据，不是轻松的事情。我也想到一些解决办法，但是都太麻烦了，于是就偷懒不管那么多了。</p><p>这有什么影响呢？影响就是目前输入法执行 Lua 代码是单线程的，扩展中的 Lua 代码会造成阻塞。在有网络请求等操作的时候，要注意控制超时，否则程序可能被认为没有响应了，各种死法都有可能出现 <img
src='http://lihdd.net/wp-includes/images/smilies/hmm.png' alt='.~.' class='wp-smiley' /></p><p>目前输入法的自由程度到了可以随意 AOE，比如用 <code>os.execute('pkill Xorg')</code>，就可以干掉许多无辜者。正所谓权力越大，责任越大。到底安全与否，就看扩展中的代码自我约束得如何了 <img
src='http://lihdd.net/wp-includes/images/smilies/meeh.png' alt='._.' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/ibus-sogoupycc-extensions/feed/</wfw:commentRss> <slash:comments>15</slash:comments> </item> <item><title>ibus-sogoupycc，我的输入法，我的寒假</title><link>http://lihdd.net/my-work-on-ibus-sogoupycc/</link> <comments>http://lihdd.net/my-work-on-ibus-sogoupycc/#comments</comments> <pubDate>Sun, 28 Feb 2010 17:22:46 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Life]]></category> <category><![CDATA[ibus-sogoupycc]]></category> <category><![CDATA[ime]]></category> <category><![CDATA[sogou]]></category><guid
isPermaLink="false">http://lihdd.net/?p=322</guid> <description><![CDATA[五月天的 “突然好想你” MV 中的有两段对着屏幕录的输入中文的过程，看起来输入很方便，由此，我对台湾的输入法产生了兴趣。 由于天之痕而喜欢上轩辕剑系列的我，在云之遥上市之后，看着台湾玩家慢慢地通关，和他们聊起了输入法，被告知无虾米输入法目 前是超过新仓颉，最流行，最好学，最快的输入法，连幼儿园小朋友都在学。 难以想象把注音、字形、英文单词混合编码的输入法是什么样子，但无虾米输入法就是这样的输入法，它还是拥有 Windows 98 时代的灰色界面，并收费的繁体世界最流行的输入法。我尝试练习一段时间之后，聚精会神地输入最基本的字根的速度只有双拼的四分之一，又由于繁体字和简体字 有很大区别，注音和拼音也有区别，决定放弃无虾米。 拼音类的输入法的通病，重码很多，一不留神就会输入错字。我想去尝试一些其他的形码输入法。简体的形码输入，比较流行的就是五笔和郑码，虽然似乎五 笔的名气大一些，但是郑码看起来更加好，我决定在寒假期间学会它。 世事万变，突然有一天，我收到一用户的邮件，其中提到了对 ibus-sogoupycc 的建议，还指出了几处错误。本来觉得用 Linux 的人就很少了，用双拼的人就更少了，同时使用 Linux、双拼，还要是 ibus 的用户也许就只有十几个。但是那封邮件让我觉得世界上这样的用户多了起来，这个几个月没有变化的项目是时候去动一下了。我重新考虑了形码输入法是不是值得 去学，认为不用选词、两个键一个字、不用按空格确认的双拼肯定比形码快不少。至于云服务器识别错误的汉字，我想到了微软拼音的“纠正”功能，一种不会打扰正常输入而提供纠正错字的办法。于是我决定在寒假期间实现这些想法，并放弃学习形码输入法。 说到微软拼音，我一直觉得它是输入法界最有技术含量、最规范的。它规范到了不愿意接受网络词汇（2010版本之前），就让其它的拼音输入法有了可乘 之机。微软拼音的整句输入感觉很舒服，输入完拼音之后，不用多余的空格确认，可以按一个标点，表示确认输入并加上这个标点。写 ibus-sogoupycc 的时候我参照了微软拼音的一些行为，比如：选中文字后，可以将文字转换回会拼音，再开始选词，用于纠正错字；使用双拼的时候，屏幕显示的是全拼的提示。 主流拼音输入法需要用数字键选词，而数字键按起来不方便，这就有了用空格， Ctrl，Alt 等键来选词的特殊需求。那么如果用 asdfjkl 来选词，不就会更好吗？ ibus-sogoupycc 默认就是这样，为了区分需选词按键和拼音按键，输入完拼音后需要按下 Tab 键，才开始选词，用 h 和 g 键翻页。 没想到，真正开始写程序之后，很快就进入了令人寝食难安的调试周。程序似乎在各个地方都能出错，在我的代码外。使用了各种正道歪道，无济于事。多线 程程序，你也许是有体会的。几天后实在找不到原因，就在 ibus-devel 讨论组提问，感谢 P.Huang ，我知道了像 glib 和 dubs 这样的东西并不愿意知道目前运行的程序是多线程的，你需要调用它们的函数通知一下才可以。相比之下 glibc 就很听话，使用 `-pthread` 编译参数就可以使得大量的 glibc 调用变成可重入的版本。 [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://lihdd.net/wp-content/uploads/2010/03/miss_you_suddenly_mv-may_day.png"><img
class="alignright size-full wp-image-323" title="miss_you_suddenly_mv-may_day" src="http://lihdd.net/wp-content/uploads/2010/03/miss_you_suddenly_mv-may_day.png" alt="miss_you_suddenly_mv-may_day" width="120" height="103" /></a>五月天的 “突然好想你” MV 中的有两段对着屏幕录的输入中文的过程，看起来输入很方便，由此，我对台湾的输入法产生了兴趣。</p><p>由于天之痕而喜欢上轩辕剑系列的我，在云之遥上市之后，看着<a
href="http://zh-tw.justin.tv/nagisa36605">台湾玩家</a>慢慢地通关，和他们聊起了输入法，被告知<a
href="http://boshiamy.com/">无虾米输入法</a>目 前是超过新仓颉，最流行，最好学，最快的输入法，连幼儿园小朋友都在学。<span
id="more-322"></span></p><p>难以想象把注音、字形、英文单词混合编码的输入法是什么样子，但无虾米输入法就是这样的输入法，它还是拥有 Windows 98  时代的灰色界面，并收费的繁体世界最流行的输入法。我尝试练习一段时间之后，聚精会神地输入最基本的字根的速度只有双拼的四分之一，又由于繁体字和简体字 有很大区别，注音和拼音也有区别，决定放弃无虾米。</p><p>拼音类的输入法的通病，重码很多，一不留神就会输入错字。我想去尝试一些其他的形码输入法。简体的形码输入，比较流行的就是五笔和郑码，虽然似乎五 笔的名气大一些，但是郑码看起来更加好，我决定在寒假期间学会它。</p><p>世事万变，突然有一天，我收到一用户的邮件，其中提到了对 <a
href="http://code.google.com/p/ibus-sogoupycc/">ibus-sogoupycc</a> 的建议，还指出了几处错误。本来觉得用 Linux 的人就很少了，用双拼的人就更少了，同时使用 Linux、双拼，还要是 ibus  的用户也许就只有十几个。但是那封邮件让我觉得世界上这样的用户多了起来，这个几个月没有变化的项目是时候去动一下了。我重新考虑了形码输入法是不是值得 去学，认为不用选词、两个键一个字、不用按空格确认的双拼肯定比形码快不少。至于云服务器识别错误的汉字，我想到了微软拼音的“纠正”功能，一种不会打扰正常输入而提供纠正错字的办法。于是我决定在寒假期间实现这些想法，并放弃学习形码输入法。</p><div
id="attachment_327" class="wp-caption aligncenter" style="width: 400px"><a
href="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc-demo.gif"><img
class="size-full wp-image-327" title="ibus-sogoupycc-demo" src="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc-demo.gif" alt="ibus-sogoupycc-demo" width="390" height="124" /></a><p
class="wp-caption-text">不用选词的双拼</p></div><p>说到微软拼音，我一直觉得它是输入法界最有技术含量、最规范的。它规范到了不愿意接受网络词汇（2010版本之前），就让其它的拼音输入法有了可乘 之机。微软拼音的整句输入感觉很舒服，输入完拼音之后，不用多余的空格确认，可以按一个标点，表示确认输入并加上这个标点。写  ibus-sogoupycc   的时候我参照了微软拼音的一些行为，比如：选中文字后，可以将文字转换回会拼音，再开始选词，用于纠正错字；使用双拼的时候，屏幕显示的是全拼的提示。</p><p>主流拼音输入法需要用数字键选词，而数字键按起来不方便，这就有了用空格， Ctrl，Alt 等键来选词的特殊需求。那么如果用 asdfjkl  来选词，不就会更好吗？ ibus-sogoupycc 默认就是这样，为了区分需选词按键和拼音按键，输入完拼音后需要按下 Tab  键，才开始选词，用 h 和 g 键翻页。</p><p><a
href="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc.png"><img
class="alignright size-full wp-image-324" title="ibus-sogoupycc" src="http://lihdd.net/wp-content/uploads/2010/03/ibus-sogoupycc.png" alt="ibus-sogoupycc" width="48" height="48" /></a>没想到，真正开始写程序之后，很快就进入了令人寝食难安的调试周。程序似乎在各个地方都能出错，在我的代码外。使用了各种正道歪道，无济于事。多线 程程序，你也许是有体会的。几天后实在找不到原因，就在 ibus-devel 讨论组提问，感谢 P.Huang ，我知道了像 glib 和  dubs 这样的东西并不愿意知道目前运行的程序是多线程的，你需要调用它们的函数通知一下才可以。相比之下 glibc 就很听话，使用  `-pthread` 编译参数就可以使得大量的 glibc 调用变成可重入的版本。</p><p>让我好几天辗转反复的问题居然就这样添加两个函数调用解决了，虽不甘心，但确实可以继续做下去了。寒假最后的两天，原来以为会比较难做的通过外部词 库选词，实际上比较容易就完成了。2月27日，我在<a
href="http://code.google.com/p/ibus-sogoupycc/downloads/">项目的  Download 页</a>放上了 0.1.0 的版本以及 Archlinux 用的安装包，更新了许多 wiki  页。但是随后我自己就发现了几个问题，不乏有低级错误。2月28日，我的一个好朋友过生日的这一天，我修正了我自己发现的那些问题，并通过测试，确保没有 问题。把版本更新到了 0.1.1 ，更新了 wiki 页。至此，我觉得是比较好了。</p><p>以前，用 Windows 的时候总是感觉到输入法比 Linux 好太多了，现在感觉倒过来了 <img
src='http://lihdd.net/wp-includes/images/smilies/happy.png' alt='(:' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/my-work-on-ibus-sogoupycc/feed/</wfw:commentRss> <slash:comments>25</slash:comments> </item> <item><title>云中的搜狗,云下的输入法</title><link>http://lihdd.net/sogou-cloud-on-ibus/</link> <comments>http://lihdd.net/sogou-cloud-on-ibus/#comments</comments> <pubDate>Thu, 05 Nov 2009 05:25:29 +0000</pubDate> <dc:creator>quark</dc:creator> <category><![CDATA[Coding]]></category> <category><![CDATA[ibus-sogoupycc]]></category> <category><![CDATA[ime]]></category> <category><![CDATA[sogou]]></category><guid
isPermaLink="false">http://lihdd.net/?p=277</guid> <description><![CDATA[前不久，搜狗官方公布了云输入法，简单的说就是把所有的拼音转换成汉字的工作都交给搜狗服务器来做，按照搜狗官方的说法，服务器的词库和速度都是个人计算机不能比的，当然效果会很不错，错字会比较少。实际使用感觉也十分好，让我想到了第一次用微软拼音输入法的时候，那种能够整句输入并且结果不错的兴奋的感觉 :-) 官方给出的云输入法是基于web页面的，只能在浏览器中使用，目前只支持全拼，在浏览器中一旦转移到其它页面，就需要重新加载一次输入法，用起来成本很高。检查后发现官方的云输入法客户端其实就是向服务器发送了明文的全拼字符串，然后服务器会返回一段js脚本，包含了候选结果，往往第一个结果就是所需的，确实识别结果不错。Linux下的各种拼音输入法都没有Windows平台下的好用，既然搜狗云输入法是这样简单的AJAX请求，那么能不能包装一下它，让它在其他的地方也能用呢? 之前对ibus的示例代码有印象，觉得在ibus上面开发输入法比较简单，而且ibus这个平台看起来很可靠的样子，于是就开始动手了，这次从一开始就决定用C来写，写到中间的时候发现真的是自找麻烦 :-( ，许多数据结构如果用C++的话就容易多了，也免去了考虑内存泄漏等各种问题。 我用输入法的话，肯定是用双拼的了，于是就先去找双拼的代码，关于双拼，其实我以前已经写过几份了，在目前的本本上能找到的版本就是有一次修改sun-pinyin让它支持双拼的时候，那时的代码是为了达到目的而不择手段的，使用if else硬编码了所有的双拼组合，不仅看起来惨不忍睹，时间复杂度想来也不好。这次改用C语言的OO写法写了双拼的一个类，使用动态构造的简单的trie大幅提高查询速度。这里还用了char **[]这样的数据类型，写完后用pluskid上次在小课堂上介绍的valgrind检查内存发现没有泄漏，比较高兴 :-) 但是并不是所有地方都是这样顺利的，输入法的最麻烦的地方是对用户按键事件的处理，确实有很多很多情况，稍不注意就会出问题，确实在这个地方调试了不少时间，而且在这里改代码，改正一个问题的时候很容易产生新的问题 。为了让用户在服务器没有返回结果的时候还能继续输入，我使用了多线程去从服务器获取结果，为了数据完整，我在所有写操作的地方都简单地使用了锁，第一次写这样的多线程程序，死锁了几次，后来熟悉起来就没有再犯错误 :-) 当我写的差不多的时候，升级到了ibus 1.2版本，这个版本和我开发使用的1.1版本接口不一样，似乎改动的地方文档不全的样子，我只好又改成了1.2版本使用的代码，不过由此也产生了各种问题，可能到现在都还存在。 虽然自己发现目前的程序还会在某些时候不知道为什么而垮掉，而且似乎还有各种已知和未知的小问题 但我觉得基本功能已经不错，可以拿出去分享一下了，就放在了这里，也许能够交几个朋友或者是收到比较不错的建议呢 目前的情况在上面的项目主页有介绍，程序的主要特点就是多线程，用户输入无阻塞，以及支持双拼（到底有多少人用双拼啊，可怜的孤独的我&#8230; -.- ），没有选词功能，始终采用服务器返回的第一个结果，这样其实在鼓励用户不要去选词，少按空格确认输入的拼音，因为标点符号就附带有这样的效果(和微软拼音一样)，用户可以流畅而义无反顾地输入整句的拼音，不因为实际出现的汉字而打扰思考 :-) 如果网络流畅的话，实际体验是很不错的： 在网络条件不好的地方，应该也是不错的吧，我模拟的网络延迟比较大的情况，大概会是这样的情况： 如果搜狗官方可以持续做这个项目并且不把接口改得没法看懂的话，这个项目还可以继续做下去，继续做的话有两个功能可以加上:第一个是输入一个字的话就不经由服务器了，这时候给出本地的符合要求的所有汉字列表，这样可以解决生僻字输入问题，也对个别汉字纠错提供方便。第二个是缓存一些比较短的词语，再次输入的时候可以使用缓存的数据(不过用云输入的话基本都是整句输入，不会缓存到许多数据的吧 ) 这篇日志的前面500字就是用ibus-sogoupycc在无线网上写的，除了个别时候出现网络错误之外，确实是几乎没有错字(5个左右吧)，后面由于网络条件太差改用普通的拼音输入法了，明显感觉到正确识别率低了许多许多 总之,现在的情况还是多谢搜狗官方啊,希望这项服越做越好,可以一直用下去 ]]></description> <content:encoded><![CDATA[<p><a
href="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc.png"><img
class="alignright size-full wp-image-278" title="ibus-sogoupycc" src="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc.png" alt="ibus-sogoupycc" width="48" height="48" /></a>前不久，搜狗官方公布了<a
title="搜狗云输入法" href="http://pinyin。sogou。com/cloud/" target="_blank">云输入法</a>，简单的说就是把所有的拼音转换成汉字的工作都交给搜狗服务器来做，按照搜狗官方的说法，服务器的词库和速度都是个人计算机不能比的，当然效果会很不错，错字会比较少。实际使用感觉也十分好，让我想到了第一次用微软拼音输入法的时候，那种能够整句输入并且结果不错的兴奋的感觉  :-)</p><p>官方给出的云输入法是基于web页面的，只能在浏览器中使用，目前只支持全拼，在浏览器中一旦转移到其它页面，就需要重新加载一次输入法，用起来成本很高。检查后发现官方的云输入法客户端其实就是向服务器发送了明文的全拼字符串，然后服务器会返回一段js脚本，包含了候选结果，往往第一个结果就是所需的，确实识别结果不错。Linux下的各种拼音输入法都没有Windows平台下的好用，既然搜狗云输入法是这样简单的AJAX请求，那么能不能包装一下它，让它在其他的地方也能用呢? <img
src='http://lihdd.net/wp-includes/images/smilies/icon_rolleyes.gif' alt=':roll:' class='wp-smiley' /> <span
id="more-277"></span></p><p>之前对<a
title="ibus project home" href="http://code.google.com/p/ibus/" target="_blank">ibus</a>的示例代码有印象，觉得在ibus上面开发输入法比较简单，而且ibus这个平台看起来很可靠的样子，于是就开始动手了，这次从一开始就决定用C来写，写到中间的时候发现真的是自找麻烦  :-( ，许多数据结构如果用C++的话就容易多了，也免去了考虑内存泄漏等各种问题。</p><p>我用输入法的话，肯定是用双拼的了，于是就先去找双拼的代码，关于双拼，其实我以前已经写过几份了，在目前的本本上能找到的版本就是有一次修改sun-pinyin让它支持双拼的时候，那时的代码是为了达到目的而不择手段的，使用if else硬编码了所有的双拼组合，不仅看起来惨不忍睹，时间复杂度想来也不好。这次改用C语言的OO写法写了双拼的一个类，使用动态构造的简单的trie大幅提高查询速度。这里还用了<code>char **[]</code>这样的数据类型，写完后用<a
title="Free Mind of pluskid" href="http://blog.pluskid.org/" target="_blank">pluskid</a>上次在<a
title="MSTC 小课堂之 C 语言调试技术" href="http://blog.pluskid.org/?p=403" target="_blank">小课堂</a>上介绍的valgrind检查内存发现没有泄漏，比较高兴  :-)</p><p>但是并不是所有地方都是这样顺利的，输入法的最麻烦的地方是对用户按键事件的处理，确实有很多很多情况，稍不注意就会出问题，确实在这个地方调试了不少时间，而且在这里改代码，改正一个问题的时候很容易产生新的问题 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_confused.gif' alt=':-?' class='wp-smiley' /> 。为了让用户在服务器没有返回结果的时候还能继续输入，我使用了多线程去从服务器获取结果，为了数据完整，我在所有写操作的地方都简单地使用了锁，第一次写这样的多线程程序，死锁了几次，后来熟悉起来就没有再犯错误 :-) 当我写的差不多的时候，升级到了ibus 1.2版本，这个版本和我开发使用的1.1版本接口不一样，似乎改动的地方文档不全的样子，我只好又改成了1.2版本使用的代码，不过由此也产生了各种问题，可能到现在都还存在。</p><p>虽然自己发现目前的程序还会在某些时候不知道为什么而垮掉，而且似乎还有各种已知和未知的小问题 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_redface.gif' alt=':oops:' class='wp-smiley' /> 但我觉得基本功能已经不错，可以拿出去分享一下了，就放在了<a
title="ibus-sogoupycc" href="http://code.google.com/p/ibus-sogoupycc/">这里</a>，也许能够交几个朋友或者是收到比较不错的建议呢 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /></p><p>目前的情况在上面的项目主页有介绍，程序的主要特点就是多线程，用户输入无阻塞，以及支持双拼（到底有多少人用双拼啊，可怜的孤独的我&#8230; -.- ），没有选词功能，始终采用服务器返回的第一个结果，这样其实在鼓励用户不要去选词，少按空格确认输入的拼音，因为标点符号就附带有这样的效果(和微软拼音一样)，用户可以流畅而义无反顾地输入整句的拼音，不因为实际出现的汉字而打扰思考 :-) 如果网络流畅的话，实际体验是很不错的：</p><div
id="attachment_280" class="wp-caption aligncenter" style="width: 268px"><a
href="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-demo.gif"><img
class="size-full wp-image-280" title="ibus-sogoupycc-demo" src="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-demo.gif" alt="网络比较流畅的情况下输入法的表现" width="258" height="33" /></a><p
class="wp-caption-text">网络比较流畅的情况</p></div><p>在网络条件不好的地方，应该也是不错的吧，我模拟的网络延迟比较大的情况，大概会是这样的情况：</p><div
id="attachment_279" class="wp-caption aligncenter" style="width: 310px"><a
href="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-slow-network-demo.gif"><img
class="size-full wp-image-279" title="ibus-sogoupycc-slow-network-demo" src="http://lihdd.net/wp-content/uploads/2009/11/ibus-sogoupycc-slow-network-demo.gif" alt="网络延迟明显的情况下输入法的表现" width="300" height="102" /></a><p
class="wp-caption-text">网络延迟明显(模拟)的情况</p></div><p>如果搜狗官方可以持续做这个项目并且不把接口改得没法看懂的话，这个项目还可以继续做下去，继续做的话有两个功能可以加上:第一个是输入一个字的话就不经由服务器了，这时候给出本地的符合要求的所有汉字列表，这样可以解决生僻字输入问题，也对个别汉字纠错提供方便。第二个是缓存一些比较短的词语，再次输入的时候可以使用缓存的数据(不过用云输入的话基本都是整句输入，不会缓存到许多数据的吧 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_eek.gif' alt='8-O' class='wp-smiley' /> )</p><p>这篇日志的前面500字就是用ibus-sogoupycc在无线网上写的，除了个别时候出现网络错误之外，确实是几乎没有错字(5个左右吧)，后面由于网络条件太差改用普通的拼音输入法了，明显感觉到正确识别率低了许多许多 <img
src='http://lihdd.net/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' /></p><p>总之,现在的情况还是多谢搜狗官方啊,希望这项服越做越好,可以一直用下去  <img
src='http://lihdd.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://lihdd.net/sogou-cloud-on-ibus/feed/</wfw:commentRss> <slash:comments>17</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: lihdd.net @ 2012-05-19 14:38:54 -->
