0%

关于Fcitx的提议 (一)

小企鹅(Fcitx)输入法英文自动输入的提议。

在使用fcitx输入法的过程中,突然有点小想法。在fcitx输入法的配置中有个小功能“自动英文模式”:

正如所说“在输入特定字符串时切换到英文模式”,打开之后看配置的英文模式触发词库:

这些英文单词与标点很清楚的表明接下来要输入英文了,输入法不用手工切换自动转换为英文输入模式。举个例子:

当我在中文汉字输入法模式下输入“www”,上图看到输入法还处于中文模式,当我再输入“.”时,输入法自动切换(如下图):

这是个很节约时间的输入状态,但是fcitx所给的英文模式触发词显然太少了,在*nix下CLI是经常需要打开终端就输入的,一旦开启了输入法在所有程序间“共享”,打开终端输入“sudo”就成了“速度哦”,反映快点可以按下回车(设定为自动提交输入),但是若习惯使然输入命令的快感使我提前按下了空格,提交了“速度哦”,这时输入本次输入就算失败了

假如我反映够灵敏,我按下回车把sudo准确提交了,但接下来仍得手动去切换英文输入法了,因为我没把握一直这么灵敏,这就要按下shift(假设我输入英文切换键是shift)换到真正的英文模式。等命令输入完毕,我回来写一篇中文文档,要用“shift”唤回中文汉字输入法,这中间我需要按两次“shift”。

有没有办法让我在输入命令时自动识别不再显示中文候选词并且阻止上面的一系列切换,使我一直处于中文输入法状态下呢?我打起了fcitx自动触发英文模式的主意!在终端输入的命令基本都来自于超级用户与普通用户的执行程序目录下,看下我bash的执行路径:

shell外部命令就来自于上图所列目录,把这些目录下的二进制程序名加入英文模式触发词库后,fcitx是不是就会自动检测我输入的是shell命令而自动停止显示候选词触发英文模式呢?

这应该是个不错的想法….尝试下,我先把sudo加入英文模式触发词词库,重启下fcitx看下效果:

fcitx已经识别我输入的是shell指令,不再显示中文候选词了,看起来效果不错!我把上面路径的binary file name全加入我的英文模式触发词库吧!

先把超级用户的执行程序名加入英文模式触发词,#:ls /sbin|sort>/usr/share/fcitx/data/AutoEn.dat,貌似感觉好多了(看起来很厉害的样子!!!)我挑个命令试下:su

正常输入,自动识别……这好象缺点什么??貌似我没有办法输入拼音“su”了,更别说打出“su”音 “suo”音等的汉字了!

一个新的问题:这些二进制可执行程序名中有多少与汉语拼音有冲突?尽量把这些排除在外,或者当输入“su”时,fcitx能够自动把su作为按频率统计的第一候选词,也就是候选词要中英文混排。

首先解决汉语拼音与命令冲突的问题,先下载汉语拼音音节表(共计398个),稍后需要从这里过滤文本:

a ai an ao ang 

b babobaibeibaobanbenbangbengbibiebiaobianbinbing  

p papopaipaopoupanpenpangpengpipiepiaopianpinping 

m mamomemaimaomoumanmenmangmengmimiemiaomiumianminming   

f fafofeifoufanfenfangfeng

d dadedaideidaodoudandangdengdidiediaodiudianding

t tatetaitaotoutantangtengtitietiaotianting

n nanaineinaononennangnengninieniaoniunianninniangning

l lalelaileilaoloulanlanglenglilialieliaoliulianlinliangling

g gagegaigeigaogougangenganggeng

k kakekaikoukankenkangkeng

h hahehaiheihaohouhenhangheng

j jijiajiejiaojiujianjinjiangjing

q qiqiaqieqiaoqiuqianqinqiangqing

x xixiaxiexiaoxiuxianxinxiangxing

zh zhazhezhizhaizhaozhouzhanzhenzhangzheng

ch chachechichaichouchanchenchangcheng

sh shasheshishaishaoshoushanshenshangsheng

r reriraorouranrenrangreng

z zazezizaizaozouzangzeng

c cacecicaicaocoucancencangceng

s sasesisaisaosousansensangseng

y yayaoyouyanyangyuyeyueyuanyiyinyunying

w wawowaiweiwanwenwangwengwu

from http://zh.wikipedia.org/wiki/%E4%B8%AD%E6%96%87%E6%8B%BC%E9%9F%B3%E5%B0%8D%E7%85%A7%E8%A1%A8

下面将所有二进制程序名按单词首字母排序:

#!/bin/bash
i=1;
for i in ` seq 8 ` ;
 do
     ls $(echo $PATH|cut -d ":" -f $i)|sort>>bins;
 done
sort bins>bins.ok;rm bins
exit

文本文件bins.ok几乎涵盖shell所有外部命令,当然这里还有shell内建指令没有包含进来,如cd等,都是很少的了。

分析中间“不听话”的命令把它揪出来!上图看到这有3000多行,人工怎么一个个揪出来!!这时拼音音节表要用上了,这像是编译原理的词法分析??!!差不多,该啐觉了,以后再按拼音音节分解英文单词。

2012.2.22 凌晨

坚持原创技术分享,您的支持将鼓励我继续创作!

Welcome to my other publishing channels