||
---update on 2024.3.9
柚子输入法主要的文件有四个,一个AutohotkeyU32.ahk, 这个是输入法实现的编码,也不长; 第2个是wubi86.ahk,这是一个五笔码表,采用的是编码=词组 词组这样的格式,本质上是一个txt文本,但采用了ahk这个后缀而已. 比较简单. 第3个是一个色块文件cn1.png,用于标识输入法的状态. 第4个是启动ahk的程序 AutohotkeyU32.exe. 其中最重要的是第1,2这两个文件. 第一个实现编码转换为词组的算法, 第二个提供了词组的编码.
1.替换原来的Wubi86,删除部分不用的词语。
这个主要是由于原来的词表太于陈旧,词汇量跟不上现在的需要. 我一直用黄狗输入法,因此利用黄狗的导出词库的功能, 用Excel作了一些处理之后,转换成了目前柚子输入法所使用的码表格式,就可以使用了.
这里面我增加了一些纯粹为自己方面而定义的词组,如
希腊字母: alfa, beta,delt, gama, omeg,pai, 等
带圈数字 cone, ctwo, cthr, cfor,
上下标字符 yixb(1下标) erxb(2下标), sanx(3下标), yisb, ersb, sans(1,2,3的上标)等
见附件 wubi86.ahk,注意这个码表是按编码的字母顺序编排的
2.清理AutohotkeyU32.ahk,调整部分快捷键,如反斜框对应顿号、(使用Unicode码表示,不能用中文顿号表示). 2023-08-22
使用中发现有些符号在输入法启用时不能输入,查了下发现中文符号如顿号,在输入法不能直接用Send 、来实现(会乱码), 查询了一下Send的用法,可以使用\::SendInput {U+3001} 解决(行首的反斜杠, 对应键盘上敲击反斜杠). 这也为简单输入特定的Unicode提供了一种好的方法,只需要替换上面的3001为待输入字符的Unicode编码即可(不过非常新的Unicode字符, 可能字体不一定能够支持).
3.部分词语的顺序调整或剔除,增加一些本人常用的词语
如果是新的字符或中文词组,在码表中修改即可.如果有特殊要求,比如要实现类似命令直通车的功能, 不能简单的在Wubi86.ahk这个文件中修改,而要在AutohotkeyU32.ahk这个脚本中修改,下面介绍. 另外,还有一些化学物质的缩写,单位的缩写,也可以在码表中修改.
只需要注意,有些符号不能出现在常量定义的右边时,这类符合就不能放在wubi86.ahk这个码表中,但可以放在AutohotkeyU32.ahk这个脚本中处理.
4.增加语句适配不同分辨率下色块的定位位置
在AutohotkeyU32.ahk中增加了几句编码,如下,最后一行是调整了色块的位置. 为什么有三个屏幕宽度是因为我平常用了三种不同的显示分辨率,一个是笔记本电脑(small),二个是不同的桌面显示屏.
顺便说下,我把cn1.png也做了一点修改,以适应不同背景下的显示.
5.调整双引号的转换,将原有的单引号调成双引号.
+"::SendInput {“}{”}{left}
就是这一句的作用,{left}表示输入了前两个符号之后,再按一下左箭头.这样光标就回到了两个双引号中间.这一点比黄狗输入法(或多多输入法生成器)中规定的自定义方式要简单和直观一些,没有印象的可以查看我之前的博文介绍(用<37>代表向左的箭头)
6.增加自定义特殊词汇的能力,比如date输出当前日期.time输出当前时间)
这一处涉及的也是AutohotkeyU32.ahk, 这一部分的代码主要是修改了srf_tooltip标签处的代码.
虽然Ahk v1变量定义比较自由,但还是有些字串不能作为变量内容,这种情况可以通过代码中硬编码来规定,比如某些罕用的Unicode,或者含有特殊字符如逗号/引号/特殊符号等的字串.
先用FormatTime格式化字串并输出给变量DateStr, 再将DateStr变量的内容发送到当前容器. Time编码也是类似的,只不过格式化的字串格式不一样.
以上内容为了简洁起见, 使用了Switch关键词,但这个语法在1.1.34版之后才添加,因此需要autohotkeyU32.exe要升级到最新版本才行(最后的公开版是1.1.37)
7.将反应较慢的Send更新为SendInput,避免偶尔出现的"一次编码两次输出词汇"的Bug.
查帮助发现SendInput说是比Send更稳定一些,因此原脚本中的Send都改成了SendInput, 确实原来偶尔出现的一次编码会出现两次词组的现象消失了.
8.经过研究,如果用autohotkey v2版来改写这个输入法不可行.
这个主要是2.0版的autohotkey做了一些调整了,取消了原来 abcd=XXYY这种格式的指令,而柚子输入法的编码→词组的转换正是基于这种命令格式的,即你输入的编码在柚子输入法中即是一个个常量,它把这个名称的常量转换成常量的内容发送到当前窗口,即完成输入. 现在取消了这种指令, #Include的文件也要按照ahk的语法来写,就没有那么优雅了.同时还出现了很多五笔编码与ahk的保留词冲突的问题, 要避开非常麻烦.因此以2.0为平台来实现就很困难了.
9.发现这个输入法可以指定z键为编码字符,因此可以以z开头定义一些特殊的词汇.
如zvec=乙烯基碳酸乙烯酯, 或者是一些数据的定义,如输入z+姓名缩写,输出这个人的邮箱等信息.
因为这个程序没有实现编码自动造词,因此词组应该用什么编码,完全可以自己设定,z也可以作为编码.
9. 在github下载源码后,用vs2022重新编译了一个x64 release,也可以用.
可执行文件为AutohotkeyU64.exe, 相应的脚本 AutohotkeyU32.ahk要将32修改成64. 其它地方不用变.
原来想看看源码解决打得快时出现的故障,但看了源码之后搞不定,64位版本上也还是有.
10. 将部分经常用到的信息作为词汇输入到码表中, 编码以Z+拼音首字母实现. 并将部分不能分享的词组单独拧到一个码表中使用.
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-7 10:22
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社